使用mysql 自带的mysqlslap (mysql仿真客户端)做“简单”的mysql性能测试、压力测试

本文介绍了如何使用mysqlslap工具进行MySQL的性能和压力测试。通过模拟多个客户端连接,测试新服务器、硬件升级后的数据库性能,并探讨了参数调优的效果。文章详细阐述了测试的思路,包括利用Excel生成测试脚本,创建测试表,插入大量数据,以及执行自定义SQL语句。最后,作者分享了一个测试用的Excel模板链接,供读者下载参考。
摘要由CSDN通过智能技术生成

为什么要测试:

  1. 新装的服务器,为了模拟将来业务达到一定程度时数据库大致的一个性能状况。
  2. 服务器进行了硬件升级,性能比原来快了么。
  3. mysql进行参数调优,到底什么才是比较优的。

mysqlslap是一个诊断程序,旨在模拟MySQL服务器的客户端负载并报告每个阶段的时间。它就像多个客户端正在访问服务器一样。

mysqlslap分三个阶段运行:

  1. 创建架构,表以及可选的任何存储程序或数据以用于测试。此阶段使用单个客户端连接。
  2. 运行负载测试。此阶段可以使用许多客户端连接。
  3. 清理(​​如果指定,则断开连接,删除表)。此阶段使用单个客户端连接。

思路:使用excel快速生成可测试的sql语句去测试。

使用excel配置参数过程中,应充分考虑生产中的实际并发与语句执行情况后进行配置。我在测试过程中,模拟500个客户端,请求五千次左右。

↑上图excel很简单,通过公式,生成可执行脚本,然后复制到SSH命令行↓

执行结果查看↓

-------------↑以上是针对数据库自动测试的一个思路,还可以自己建表,用自己的sql语句进行测试------------------------------------


以下是自己建表手动测试,mysqlslap也能自己建表,但他每次都删,不便于我们观察,我们自己创建一些表,然后使用自己的sql来进行测试。

创建2个表,class表插入2000条数据,person表插入10000000(一千万)条数据。插入数据用mysql的函数。person表中通过classid进行关联。然后写出带左连接的语句进行测试。

创建class表:

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `C1` varchar(255) DEFAULT NULL,
  `C2` varchar(255) DEFAULT NULL,
  `C3` varchar(255) DEFAULT NULL,
  `C4` varchar(255) DEFAULT NULL,
  `C5` varchar(255) DEFAULT NULL,
  `C6` varchar(255) DEFAULT NULL,
  `C7` varchar(255) DEFAULT NULL,
  `C8` varchar(255) DEFAULT NULL,
  `C9` varchar(255) DEFAULT NULL,
  `C10` text,
  `C11` text,
  `C12` text,
  `C13` text,
  `C14` text,
  `C15` text,
  `C16` text,
  `C17` text,
  `C18` text,
  `C19` text,
  `C20` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

创建person表:

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `classid` bigint(20) NOT NULL,
  `fname` varchar(200) NOT NULL,
  `lname` varchar(1000) NOT NULL,
  `age` tinyint(3) unsigned NOT NULL,
  `sex` tinyint(1) unsigned NOT NULL,
  `i1` float(255,2) DEFAULT NULL,
  `i2` float(255,2) DEFAULT NULL,
  `i3` float(255,2) DEFAULT NULL,
  `i4` float(255,2) DEFAULT NULL,
  `i5` float(255,2) DEFAULT NULL,
  `i6` float(255,2) DEFAULT NULL,
  `i7` float(255,2) DEFAULT NULL,
  `i8` float(255,2) DEFAULT NULL,
  `i9` float(255,2) DEFAULT NULL,
  `i10` float(255,2) DEFAULT NULL,
  `t1` text,
  `t2` text,
  `t3` text,
  `t4` text,
  `t5` text,
  `v1` varchar(255) DEFAULT NULL,
  `v2` varchar(255) DEFAULT NULL,
  `v3` varchar(255) DEFAULT NULL,
  `v4` varchar(255) DEFAULT NULL,
  `v5` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

插入class表2000条:

通过函数

BEGIN  
    DECLARE i INT DEFAULT 1;  
    WHILE i<=2000 DO  
        INSERT INTO class(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20) 
				VALUES(CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),CONCAT('测试数据',FLOOR(RAND()*100)),
				CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)),CONCAT('测试数据',FLOOR(RAND()*99999999)));
        SET i = i+1;  
    END WHILE;  
END

插入person表10000000(一千万)条:

注意,是有参数输入的↑

插入脚本:

BEGIN   
	DECLARE chars varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
	DECLARE fname VARCHAR(25) DEFAULT '';
	DECLARE lname VARCHAR(25) DEFAULT '';
	DECLARE id int UNSIGNED;
	DECLARE len int;
	set id=1;
	WHILE id <= num DO
		set len = FLOOR(1 + RAND()*25);
		set fname = '';
		WHILE len > 0 DO
			SET fname = CONCAT(fname,substring(chars,FLOOR(1 + RAND()*62),1));
			SET len = len - 1;
		END WHILE;
		set len &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值