首页 > 其他分享 >如何准备百万性能测试数据

如何准备百万性能测试数据

时间:2023-09-06 14:46:25浏览次数:36  
标签:COMMENT 存储 varchar no DEFAULT 性能 测试数据 NULL 百万

需要在数据库准备100万条数据,进行性能测试。

使用存储过程在MySQL准备测试数据。

Q:

你作为一名数据库专家,有两张表,结构如下:
CREATE TABLE user_base (
id bigint(20) NOT NULL,
apply_no varchar(50) DEFAULT NULL COMMENT '关联的申请号',
batch_date date DEFAULT NULL COMMENT '批次日期',
car_no varchar(100) DEFAULT NULL COMMENT '车牌号',
created_date datetime(6) DEFAULT NULL,
due_bill_no varchar(50) DEFAULT NULL COMMENT '关联的借款单号',
hash_key varchar(64) DEFAULT NULL COMMENT '基于IdNo生成',
id_no varchar(100) NOT NULL COMMENT '证件号码',
id_type varchar(20) NOT NULL COMMENT '证件类型 IdTypeEnum',
last_modified_date datetime(6) DEFAULT NULL,
phone varchar(100) DEFAULT NULL COMMENT '手机号',
project_no varchar(20) DEFAULT NULL COMMENT '项目编号',
remark varchar(255) DEFAULT NULL,
sex varchar(10) DEFAULT NULL COMMENT '性别(MALE/FEMALE)',
user_id varchar(50) NOT NULL COMMENT '用户编号',
user_name varchar(200) NOT NULL COMMENT '用户姓名',
version int(11) DEFAULT NULL,
PRIMARY KEY (id),
KEY idx_user_base_project_no_due_bill_no_id_no (project_no,due_bill_no,id_no),
KEY idx_user_base_batch_date (batch_date),
KEY idx_user_base_id_no (id_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户基本信息表';

CREATE TABLE user_bank_card (
id bigint(20) NOT NULL,
user_id varchar(50) NOT NULL COMMENT '用户编号',
id_no varchar(100) NOT NULL COMMENT '身份证号',
bank_name varchar(50) NOT NULL COMMENT '银行名称',
bank_code varchar(20) NOT NULL COMMENT '银行编码',
bank_card_no varchar(100) DEFAULT NULL,
phone varchar(100) DEFAULT NULL,
version int(11) DEFAULT NULL,
created_date datetime(6) DEFAULT NULL,
last_modified_date datetime(6) DEFAULT NULL,
project_no varchar(20) DEFAULT NULL COMMENT '项目编号',
due_bill_no varchar(50) DEFAULT NULL COMMENT '借据号',
agreement_no varchar(100) DEFAULT NULL COMMENT '协议号',
apply_no varchar(100) DEFAULT NULL COMMENT '申请号',
account_name varchar(100) DEFAULT NULL COMMENT '账户名',
is_default tinyint(1) DEFAULT '1' COMMENT '是否使用',
src_req_sn varchar(50) DEFAULT NULL COMMENT '原始绑卡请求号',
PRIMARY KEY (id),
KEY idx_user_bank_card_project_due_bill_no (project_no,due_bill_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户银行绑卡信息';

我现在想构造1000条数据,要求id从1开始递增,apply_no、due_bill_no唯一,且同一条数据的apply_no、due_bill_no相同,两个表之间通过apply_no关联,project_no固定为WS10043190001,sex为MALE或FEMALE,其他字段随机生成。
请你帮我写一个mysql存储过程完成上述需求。

A:

当然,我可以帮您编写一个 MySQL 存储过程来满足您的需求。以下是一个示例存储过程的实现:
mysql
DELIMITER //

CREATE PROCEDURE generate_data()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE total_rows INT DEFAULT 1000;
    DECLARE project_no VARCHAR(20) DEFAULT 'WS10043190001';
    DECLARE sex ENUM('MALE', 'FEMALE');
    
    WHILE i <= total_rows DO
        -- Generate random values
        SET @apply_no := CONCAT('apply', i);
        SET @due_bill_no := CONCAT('duebill', i);
        SET @id_no := CONCAT('idno', i);
        SET @user_id := CONCAT('user', i);
        SET @user_name := CONCAT('user', i, ' name');
        SET @phone := CONCAT('123456789', i);
        SET @bank_card_no := CONCAT('123456789', i);
        SET @account_name := CONCAT('account', i, ' name');
        SET @bank_code := CONCAT('bank', i);
        
        -- Insert into user_base table
        INSERT INTO user_base (id, apply_no, batch_date, car_no, created_date, due_bill_no, hash_key, id_no, id_type, last_modified_date, phone, project_no, remark, sex, user_id, user_name, version)
        VALUES (i, @apply_no, CURDATE(), NULL, NOW(6), @due_bill_no, MD5(@id_no), @id_no, 'ID_CARD', NOW(6), @phone, project_no, NULL, sex, @user_id, @user_name, NULL);
        
        -- Insert into user_bank_card table
        INSERT INTO user_bank_card (id, user_id, id_no, bank_name, bank_code, bank_card_no, phone, version, created_date, last_modified_date, project_no, due_bill_no, agreement_no, apply_no, account_name, is_default, src_req_sn)
        VALUES (i, @user_id, @id_no, 'Bank Name', @bank_code, @bank_card_no, @phone, NULL, NOW(6), NOW(6), project_no, @due_bill_no, NULL, @apply_no, @account_name, 1, NULL);
        
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

请注意,上述存储过程中的字段值是随机生成的示例值,您可以根据实际需求进行修改。您可以在 MySQL 中运行此存储过程,通过调用 CALL generate_data(); 来生成所需的 1000 条数据。

希望这可以帮到您!如果您有任何其他问题,请随时提问。

修改

DELIMITER //

CREATE PROCEDURE generate_data()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE total_rows INT DEFAULT 1000;
    DECLARE project_no VARCHAR(20) DEFAULT 'WS10043190001';
    DECLARE sex ENUM('MALE', 'FEMALE');
    
    WHILE i <= total_rows DO
        -- Generate random values
        SET @apply_no := CONCAT('apply', i);
        -- 需要apply_no、due_bill_no的值相同,修改脚本
        SET @due_bill_no := CONCAT('apply', i);
        SET @id_no := CONCAT('idno', i);
        SET @user_id := CONCAT('user', i);
        SET @user_name := CONCAT('user', i, ' name');
        SET @phone := CONCAT('123456789', i);
        SET @bank_card_no := CONCAT('123456789', i);
        SET @account_name := CONCAT('account', i, ' name');
        SET @bank_code := CONCAT('bank', i);
        
        -- Insert into user_base table
        INSERT INTO user_base (id, apply_no, batch_date, car_no, created_date, due_bill_no, hash_key, id_no, id_type, last_modified_date, phone, project_no, remark, sex, user_id, user_name, version)
        VALUES (i, @apply_no, CURDATE(), NULL, NOW(6), @due_bill_no, MD5(@id_no), @id_no, 'ID_CARD', NOW(6), @phone, project_no, NULL, sex, @user_id, @user_name, NULL);
        
        -- Insert into user_bank_card table
        INSERT INTO user_bank_card (id, user_id, id_no, bank_name, bank_code, bank_card_no, phone, version, created_date, last_modified_date, project_no, due_bill_no, agreement_no, apply_no, account_name, is_default, src_req_sn)
        VALUES (i, @user_id, @id_no, 'Bank Name', @bank_code, @bank_card_no, @phone, NULL, NOW(6), NOW(6), project_no, @due_bill_no, NULL, @apply_no, @account_name, 1, NULL);
        
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

创建MySQL存储过程时,返回-1

image

当创建MySQL存储过程时,返回-1的问题通常与存储过程中的错误处理有关。有以下几种可能的原因和解决方法:

  1. 存储过程是否存在语法错误:请确保存储过程中的语法和逻辑都正确,不要存在语法错误或逻辑错误。

  2. 存储过程是否正确处理异常:在存储过程中,如果发生了异常,未正确处理异常可能导致返回-1。因此,请确保在存储过程中使用适当的异常处理机制(如DECLARE CONTINUE HANDLER FOR SQLSTATE)来捕获和处理异常,并确保在处理异常时不会返回-1。

  3. 存储过程中的逻辑错误:如果存储过程中的逻辑错误导致返回-1,需要仔细检查存储过程的逻辑,确保它按预期执行。

  4. 存储过程中的权限问题:可能存储过程所使用的用户没有执行该存储过程的权限,导致无法正确执行存储过程。请确保存储过程执行的用户有足够的权限。

创建存储过程成功应该是0,如下:
image

经测试,是权限不够。
更换更高权限的用户,可以执行成功。

标签:COMMENT,存储,varchar,no,DEFAULT,性能,测试数据,NULL,百万
From: https://www.cnblogs.com/Uni-Hoang/p/17682263.html

相关文章

  • Android内存优化案例——不合适和高性能的写法(一)
    安卓内存优化是一个很重要的话题,有很多方面可以考虑,比如避免内存泄漏、减少内存抖动、优化图片加载、使用缓存和对象池等。下面我举一些代码案例,分别展示不合适的写法和高性能的写法。1.避免使用枚举类型。枚举类型会占用更多的内存,因为它是一个类对象,而不是一个基本类型。如果......
  • 升讯威在线客服系统的并发高性能数据处理技术:高性能TCP服务器技术
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • RunnerGo——更高效、更易用的性能测试利器
    随着互联网技术的迅速发展,性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中,RunnerGo以其独特的优势,逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点,并对比其与JMeter的优势,让您了解RunnerGo为何成为高效、易用的性能测试利器。RunnerGo的特点......
  • RunnerGo——更高效、更易用的性能测试利器
    随着互联网技术的迅速发展,性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中,RunnerGo以其独特的优势,逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点,并对比其与JMeter的优势,让您了解RunnerGo为何成为高效、易用的性能测试利器。 RunnerGo......
  • 移动APP性能测试有什么注意事项?
    移动APP性能测试是移动应用开发过程中非常重要的一个环节,它能够有效地评估和验证应用在不同环境下的性能表现,为开发者提供宝贵的参考和改进的方向。在进行移动APP性能测试时,有一些注意事项需要我们关注,并且在测试完成后,获取一份详尽的测试报告也非常重要。1、明确测试的目......
  • 性能强悍价格到位,老牌NAS也玩性价比
    前几天看到站内爆料铁威马的优惠信息,搭载N5095的 F4-423 到手不到1900,一看之下着实有些心动,说起来我折腾了这么多NAS,铁威马还真没试过。稍作思考直接下单,毕竟能够存在这么多年的NAS品牌,没点自己的看家本领肯定说不过去,目前已经使用了个多月,和大家分享下使用体验。NAS的......
  • 服务器性能指什么如何优化
    服务器性能指什么如何优化性能最通俗的衡量指标就是“时间”,CPU的使用率指的是CPU用于计算的时间占比,磁盘使用率指的是磁盘操作的时间占比。当CPU使用率100%时,意味着有部分请求来不及计算,响应时间增加或者超时;当磁盘使用率100%时,意味着有部分请求需要等待IO操作,响应时间也会增加或......
  • Azure中的磁盘性能与测试
    性能指标IOPS:应用程序在一秒钟内发送到存储磁盘的请求数,包括Read和Write数(单位时间内的次数)IOPS可细分为如下几个指标:ToatalIOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。RandomReadIOPS,100%随机读负载情况下的IOPS。Rando......
  • cefsharp - WinForms 和 Wpf 示例之间的巨大性能差异
    https://www.coder.work/article/7217456我注意到在使用 http://www.vsynctester.com 时CefSharp.WinForms.Example和CefSharp.Wpf.Example之间存在非常重要的性能差异(以FPS计)在我的显卡控制面板和CefExampleInit()中的设置中关闭VSync时settings.CefCommandLi......
  • 三维模型OBJ格式轻量化的数据压缩与性能平衡分析
    三维模型OBJ格式轻量化的数据压缩与性能平衡分析 三维模型的OBJ格式轻量化数据压缩在保持性能的同时,可以减小文件大小、提高加载速度和节省存储空间。然而,在进行数据压缩时,需要权衡压缩比率和模型质量之间的关系,并考虑不同应用场景下的需求。首先,数据压缩对于大规模场景中的......