数据库性能测试(mysql)

常见的数据库指标包括

TPS/QPS:衡量吞吐量。(TPS:每秒事务处理量(TransactionPerSecond)、每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准)
响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。。
并发量:同时处理的查询请求的数量。

为什么不要问我DB极限QPS/TPS

为什么不要问我DB极限QPS/TPS
参考URL: https://www.cnblogs.com/zhiqian-ali/p/6336521.html

极限法;我们假设两种极限场景:
极限场景一,所有SQL 都是主键等值查询。
极限场景二,所有SQL 都是走不上索引的全表扫描。
这两种场景下大家都能够一眼看出数据库的支撑能力,在场景一和场景二下会有很大的差别。当然,我们现实的业务场景,位于两种极限场景之间,这个时候很难简单粗暴的说当前实例可以支撑多少业务量,因为缺少信息输入。

mysql查看性能常用命令

参考URL: https://blog.csdn.net/zhangyunsheng11/article/details/80014457

1、查看mysql版本号:select version();
2、查看mysql存储引擎:show engines;
3、查看mysql的缓冲池大小配置:show variables like 'innodb_buffer_pool_size' ;
缓冲池大小,一般设置为机器的物理内存的80%
4、show variables like 'innodb_io%';
5、慢查询:show variables like '%slow%';
slow_query_log = on 打开了慢查询日志,执行时间超过2秒的即为慢查询
6、最大连接数:show variables like 'max_connections';
查询一下服务器响应的最大连接数(MySQL服务器过去的最大连接数是)
show global status like 'Max_used_connections';
7、进程使用情况:show global status like 'Thread%';
Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器thread_cache_size配置:
show variables like 'thread_cache_size';
8、查询缓存:show global status like 'qcache%';
MySQL查询缓存变量解释:
  Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。
  Qcache_free_memory:缓存中的空闲内存。
  Qcache_hits:每次查询在缓存中命中时就增大
  Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。
  Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)
  Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。
  Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。
  Qcache_total_blocks:缓存中块的数量。
我们再查询一下服务器关于query_cache的配置:show variables like ‘query_cache%’;
各字段的解释:
  query_cache_limit:超过此大小的查询将不缓存
  query_cache_min_res_unit:缓存块的最小大小
  query_cache_size:查询缓存大小
  query_cache_type:缓存类型,决定缓存什么样的查询,示例中表示不缓存 select sql_no_cache 查询
  query_cache_wlock_invalidate:当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。
  query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。
  查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
  如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
  查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%
  查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
  查询缓存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%

9、排序使用情况:show global status like 'sort%';
Sort_merge_passes 包括两步。MySQL 首先会尝试在内存中做排序,使用的内存大小由系统变量 Sort_buffer_size 决定,如果它的大小不够把所有的记录都读到内存中,MySQL 就会把每次在内存中排序的结果存到临时文件中,等 MySQL 找到所有记录之后,再把临时文件中的记录做一次排序。这再次排序就会增加 Sort_merge_passes。实际上,MySQL 会用另一个临时文件来存再次排序的结果,所以通常会看到 Sort_merge_passes 增加的数值是建临时文件数的两倍。因为用到了临时文件,所以速度可能会比较慢,增加 Sort_buffer_size 会减少 Sort_merge_passes 和 创建临时文件的次数。但盲目的增加 Sort_buffer_size 并不一定能提高速度
10、打开的文件数:show global status like 'open_files';
show variables like 'open_files_limit';
比较合适的设置:Open_files / open_files_limit * 100% <= 75%

11、表锁情况:show global status like 'table_locks%';
Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,如果Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些。

MySQL基准测试

关于mysql5.7的160万qps
参考URL: https://blog.51cto.com/weikle/1789595

为什么要做mysql基准测试

Mysql基准测试
参考URL: https://blog.csdn.net/fsx2550553488/article/details/80927933

例如我们拿到了一台服务器,准备做为数据库服务器,那么这台服务器的硬件资源能够支持多大的访问压力呢?优化了操作系统的内核参数后,是否提升了性能?调整了Mysql配置参数后,对性能有多少影响?……

通过一系列的调优工作,配合基准测试,就可以把这台服务器调整到最佳状态,也掌握了健康状态下的性能指标。

以后在实际运行过程中,当监控的数据接近了基准指标时,说明数据库服务器快要满负荷了,需要分析是数据库结构设计、SQL语句这类用法问题,还是硬件资源的确不够了,然后进行相应的处理。

数据库服务器也可能需要硬件升级,升级之后也需要进行基准测试,和之前的测试结果对比,确保升级后的性能是提升的,防止不恰当的升级或者错误的配置引起性能下降。

Mysql性能测试工具 mysqlslap

mysqlslap,mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试。

sysbench

sysbench是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、操作系统调度器、内存分配和传输速度、POSIX 线程,以及数据库服务器等。sysbench 支持Lua 脚本语言,Lua 对于各种测试场景的设置可以非常灵活。sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、操作系统和硬件的硬件测试。(节选自《高性能MySQL》)

总结:网上利用该工具的文章的比较多,应该算是主流工具,推荐使用该工具。

参考

性能测试之mysql监控、优化
参考URL: https://www.cnblogs.com/xiaowenshu/p/10455309.html
MySQL性能基准测试对比:5.7 VS 8.0
参考URL: https://www.cnblogs.com/qcloud1001/p/10488735.html

猜你喜欢

转载自blog.csdn.net/inthat/article/details/102833897