MySQL系列之十五 MySQL常用配置和性能压力测试


Posted in MySQL onJuly 02, 2021

一、MySQL常用配置

以下所有配置参数以32G内存的服务器为基

1、打开独立的表空间

innodb_file_per_table = 1

2、MySQL服务所允许的同时会话数的上限,默认为151,经常出现Too Many Connections的错误提示,则需要增大此值

max_connections = 8000

3、操作系统在监听队列中所能保持的连接数

back_log = 300

4、每个客户端连接最大的错误允许数量,当超过该次数,MYSQL服务器将禁止此主机的连接请求,直到MYSQL服务器重启或通过flush hosts命令清空此主机的相关信息

max_connect_errors = 1000

5、所有线程所打开表的数量

open_files_limit = 10240

6、每个连接传输数据大小,最大1G,须是1024的倍数,一般设为最大的BLOB的值

max_allowed_packet = 32M

7、请求的最大连接时间

wait_timeout = 10

8、排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序

sort_buffer_size = 16M

9、不带索引的全表扫描,使用的buffer的最小值

join_buffer_size = 16M

10、查询缓冲大小

query_cache_size = 128M

11、指定单个查询能够使用的缓冲区大小,默认为1M

query_cache_limit = 4M

12、设定默认的事务隔离级别

transaction_isolation = REPEATABLE-READ

13、 线程使用的堆大小,此值限制内存中能处理的存储过程的递归深度和SQL语句复杂性,此容量的内存在每次连接时被预留

thread_stack = 512K

14、开启二进制日志功能

log_bin

15、二进制日志格式:基于行

binlog_format = row

16、InnoDB使用一个缓冲池来保存索引和原始数据, 可设置这个变量到服务器物理内存大小的80%

innodb_buffer_pool_size = 6G

17、用来同步IO操作的IO线程的数量

innodb_file_io_threads = 4

18、在Innodb核心内的允许线程数量,建议的设置是CPU数量加上磁盘数量的两倍

innodb_thread_concurrency = 16

19、用来缓冲日志数据的缓冲区的大小

innodb_log_buffer_size = 16M

20、在日志组中每个日志文件的大小

innodb_log_file_size = 512M

21、在日志组中的文件总数

innodb_log_files_in_group = 3

22、SQL语句在被回滚前,InnoDB事务等待InnoDB行锁的时间

innodb_lock_wait_timeout = 120

23、慢查询记录的阈值时长,默认10秒

long_query_time = 2

24、将没有使用索引的查询也记录下来

log-queries-not-using-indexes

my.cnf示例:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
innodb_file_per_table = 1
innodb_buffer_pool_size = 6442450944  #内存不足6G会报错
innodb_file_io_threads = 4
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_lock_wait_timeout = 120
log_bin = /var/lib/mysql/mariadb-bin
binlog_format = row
slow_query_log
long_query_time = 2
log-queries-not-using-indexes
transaction_isolation = REPEATABLE-READ
query_cache_size = 128M
query_cache_limit = 4M
max_connections = 8000
back_log = 300
max_connect_errors = 1000
open_files_limit = 10240
max_allowed_packet = 32M
wait_timeout = 10
sort_buffer_size = 16M
join_buffer_size = 16M
thread_stack = 512K

二、MySQL的性能压力测试

常见测试工具:

  • mysqlslap
  • Sysbench
  • tpcc-mysql
  • MySQL Benchmark Suite
  • MySQL super-smack
  • MyBench

mysqlslap工具介绍

​mysqlslap来自于mariadb包,测试的过程默认生成一个mysqlslap的schema,生成测试表t1,查询和插入测试数据,mysqlslap库自动生成,如果已经存在则先删除。用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。

常用选项:

  • --auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力
  • --auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)
  • --auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持
  • --number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1
  • --number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1
  • --number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
  • --query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的存储过程或者sql语句来执行测试
  • --create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database
  • --commint=N 多少条DML后提交一次
  • --compress, -C 如服务器和客户端都支持压缩,则压缩信息
  • --concurrency=N, -c N 表示并发量,即模拟多少个客户端同时执行select;可指定多个值,以逗号或者--delimiter参数指定值做为分隔符
  • --engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开
  • --iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次
  • --only-print 只打印测试语句而不实际执行
  • --detach=N 执行N条语句后断开重连
  • --debug-info, -T 打印内存和CPU的相关信息

测试示例:

1)单线程测试

[root@centos7 ~]# mysqlslap -a -uroot -p
Enter password: 
Benchmark
        Average number of seconds to run all queries: 0.004 seconds
        Minimum number of seconds to run all queries: 0.004 seconds
        Maximum number of seconds to run all queries: 0.004 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

2)多线程测试,使用?concurrency来模拟并发连接

[root@centos7 ~]# mysqlslap -uroot -p -a -c 500
Enter password: 
Benchmark
        Average number of seconds to run all queries: 3.384 seconds
        Minimum number of seconds to run all queries: 3.384 seconds
        Maximum number of seconds to run all queries: 3.384 seconds
        Number of clients running queries: 500
        Average number of queries per client: 0

3)同时测试不同的存储引擎的性能进行对比

[root@centos7 ~]# mysqlslap -uroot -p -a --concurrency=500 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info
Enter password: 
Benchmark
        Running for engine myisam
        Average number of seconds to run all queries: 0.192 seconds
        Minimum number of seconds to run all queries: 0.187 seconds
        Maximum number of seconds to run all queries: 0.202 seconds
        Number of clients running queries: 500
        Average number of queries per client: 2

Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.355 seconds
        Minimum number of seconds to run all queries: 0.350 seconds
        Maximum number of seconds to run all queries: 0.364 seconds
        Number of clients running queries: 500
        Average number of queries per client: 2


User time 0.33, System time 0.58
Maximum resident set size 22892, Integral resident set size 0
Non-physical pagefaults 46012, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 31896, Involuntary context switches 0

4)执行一次测试,分别500和1000个并发,执行5000次总查询

[root@centos7 ~]# mysqlslap -uroot -p -a --concurrency=500,1000 --number-of-queries 5000 --debug-info
Enter password: 
Benchmark
        Average number of seconds to run all queries: 3.378 seconds
        Minimum number of seconds to run all queries: 3.378 seconds
        Maximum number of seconds to run all queries: 3.378 seconds
        Number of clients running queries: 500
        Average number of queries per client: 10

Benchmark
        Average number of seconds to run all queries: 3.101 seconds
        Minimum number of seconds to run all queries: 3.101 seconds
        Maximum number of seconds to run all queries: 3.101 seconds
        Number of clients running queries: 1000
        Average number of queries per client: 5


User time 0.84, System time 0.64
Maximum resident set size 83068, Integral resident set size 0
Non-physical pagefaults 139977, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 31524, Involuntary context switches 3

5)迭代测试

[root@centos7 ~]# mysqlslap -uroot -p -a --concurrency=500 --number-of-queries 5000 --iterations=5 --debug-info
Enter password: 
Benchmark
        Average number of seconds to run all queries: 3.307 seconds
        Minimum number of seconds to run all queries: 3.184 seconds
        Maximum number of seconds to run all queries: 3.421 seconds
        Number of clients running queries: 500
        Average number of queries per client: 10


User time 2.18, System time 1.58
Maximum resident set size 74872, Integral resident set size 0
Non-physical pagefaults 327732, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 73904, Involuntary context switches 3

以上就是MySQL系列之十五 MySQL常用配置和性能压力测试的详细内容,更多关于MySQL常用配置和性能压力测试的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL系列之三 基础篇
Jul 02 #MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 #MySQL
MySQL系列之二 多实例配置
Jul 02 #MySQL
MySQL系列之十三 MySQL的复制
Jul 02 #MySQL
MySQL系列之六 用户与授权
Jul 02 #MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 #MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 #MySQL
You might like
php session 错误
2009/05/21 PHP
Laravel框架表单验证详解
2014/09/04 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
PHP7多线程搭建教程
2017/04/21 PHP
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
使用js画图之饼图
2015/01/12 Javascript
javascript实用方法总结
2015/02/06 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
vuex实现购物车功能
2020/06/28 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Django的CVB实例详解
2020/02/10 Python
Python with语句用法原理详解
2020/07/03 Python
基于Python实现粒子滤波效果
2020/12/01 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
英语专业推荐信
2013/11/16 职场文书
大学生的应聘自我评价
2013/12/13 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
关于读书的活动方案
2014/08/14 职场文书
支行行长岗位职责
2015/02/15 职场文书
会计岗位职责范本
2015/04/02 职场文书
2016年春节问候语
2015/11/11 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Python编写nmap扫描工具
2021/07/21 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技