iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中怎么实现性能压力测试
  • 279
分享到

MySQL中怎么实现性能压力测试

2023-06-20 13:06:37 279人浏览 薄情痞子
摘要

MySQL中怎么实现性能压力测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Mysql常用配置以下所有配置参数以32G内存的服务器为基打开独立的表空间in

MySQL中怎么实现性能压力测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、Mysql常用配置

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

打开独立的表空间

innodb_file_per_table = 1

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

max_connections = 8000

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

back_log = 300

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

max_connect_errors = 1000

所有线程所打开表的数量

open_files_limit = 10240

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

max_allowed_packet = 32M

请求的最大连接时间

wait_timeout = 10

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

sort_buffer_size = 16M

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

join_buffer_size = 16M

查询缓冲大小

query_cache_size = 128M

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

query_cache_limit = 4M

设定默认的事务隔离级别

transaction_isolation = REPEATABLE-READ

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

thread_stack = 512K

开启二进制日志功能

log_bin

二进制日志格式:基于行

binlog_fORMat = row

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

innodb_buffer_pool_size = 6G

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

innodb_file_io_threads = 4

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

innodb_thread_concurrency = 16

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

innodb_log_buffer_size = 16M

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

innodb_log_file_size = 512M

在日志组中的文件总数

innodb_log_files_in_group = 3

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

innodb_lock_wait_timeout = 120

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

long_query_time = 2

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

log-queries-not-using-indexes

my.cnf示例:

[mysqld]datadir=/var/lib/mysqlSocket=/var/lib/mysql/mysql.socksymbolic-links=0innodb_file_per_table = 1innodb_buffer_pool_size = 6442450944  #内存不足6G会报错innodb_file_io_threads = 4innodb_thread_concurrency = 16innodb_log_buffer_size = 16Minnodb_log_file_size = 512Minnodb_log_files_in_group = 3innodb_lock_wait_timeout = 120log_bin = /var/lib/mysql/mariadb-binbinlog_format = rowslow_query_loglong_query_time = 2log-queries-not-using-indexestransaction_isolation = REPEATABLE-READquery_cache_size = 128MQuery_cache_limit = 4Mmax_connections = 8000back_log = 300max_connect_errors = 1000open_files_limit = 10240max_allowed_packet = 32Mwait_timeout = 10sort_buffer_size = 16Mjoin_buffer_size = 16Mthread_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 -pEnter 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 500Enter 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-infoEnter 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: 2Benchmark        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: 2User time 0.33, System time 0.58Maximum resident set size 22892, Integral resident set size 0Non-physical pagefaults 46012, Physical pagefaults 0, Swaps 0Blocks in 0 out 0, Messages in 0 out 0, Signals 0Voluntary 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-infoEnter 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: 10Benchmark        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: 5User time 0.84, System time 0.64Maximum resident set size 83068, Integral resident set size 0Non-physical pagefaults 139977, Physical pagefaults 0, Swaps 0Blocks in 0 out 0, Messages in 0 out 0, Signals 0Voluntary context switches 31524, Involuntary context switches 3

5)迭代测试

[root@centos7 ~]# mysqlslap -uroot -p -a --concurrency=500 --number-of-queries 5000 --iterations=5 --debug-infoEnter 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: 10User time 2.18, System time 1.58Maximum resident set size 74872, Integral resident set size 0Non-physical pagefaults 327732, Physical pagefaults 0, Swaps 0Blocks in 0 out 0, Messages in 0 out 0, Signals 0Voluntary context switches 73904, Involuntary context switches 3

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中怎么实现性能压力测试

本文链接: https://www.lsjlt.com/news/296964.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作