加入收藏 | 设为首页 | 会员中心 | 我要投稿 安康站长网 (https://www.0915zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

利用sysbench压力测试MySQL

发布时间:2022-06-24 18:49:05 所属栏目:MySql教程 来源:互联网
导读:我接下来做sysbench压测的主要思路是根据现有的配置作出调整,能够持续性的优化和压力测试达到目的,而不是简单的去对比连接数在不同数量级会有多大的差别,所以你会在里面看到一些问题的排查,一些问题的解决,可能有些又不是压测相关的。 我设置了max_co
     我接下来做sysbench压测的主要思路是根据现有的配置作出调整,能够持续性的优化和压力测试达到目的,而不是简单的去对比连接数在不同数量级会有多大的差别,所以你会在里面看到一些问题的排查,一些问题的解决,可能有些又不是压测相关的。
  
    我设置了max_connections为3000,但是压测的时候到了300个线程就跑不上去了。这个问题很有典型性。
 
  sysbench抛出的错误如下:
 
  FATAL: mysql_stmt_prepare() failed
  FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"
  FATAL: `thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:282: SQL API error
 
  MySQL的错误日志信息如下:
 
 
  2017-03-14T15:01:57.839154Z 348 [Note] Aborted connection 348 to db: 'sysbenchtest' user: 'root' host: 'localhost' (Got an error reading communication packets)
  2017-03-14T15:01:57.839185Z 346 [Note] Aborted connection 346 to db: 'sysbenchtest' user: 'root' host: 'localhost' (Got an error reading communication packets)
  看起来两者关联不大,所以有些信息就会有一些误导了。
  根据错误的信息,当前的参数max_prepared_stmt_count设置值为16382,是安装后的默认值。
 
  mysql> show variables like 'max_prepared_stmt_count';
  +-------------------------+-------+
  | Variable_name           | Value |
  +-------------------------+-------+
  | max_prepared_stmt_count | 16382 |
  +-------------------------+-------+
 
  而packet的参数设置为4M的样子,也是默认值
 
  mysql> show variables like '%pack%';
  +--------------------------+------------+
  | Variable_name            | Value      |
  +--------------------------+------------+
  | max_allowed_packet       | 4194304    |
  | slave_max_allowed_packet | 1073741824 |
  +--------------------------+------------+
 
  到底是不是参数max_allowed_packet引起的呢,我们可以简单模拟一下。
 
  执行300个线程的时候,抓取了一下这个参数值,发现已经快溢出了。
 
  mysql> show global status like '%stmt%';
  +----------------------------+----------+
  | Variable_name              | Value    |
  +----------------------------+----------+
  | Prepared_stmt_count        | 27300    |
  +----------------------------+----------+
  10 rows in set (0.00 sec)
 
  所以自己简单做了个计算,
 
  200个线程参数值为  18200
  300个线程参数值为  27300
 
  通过简单的计算可以看出100个线程对应参数值9100,按照这个参数设置,我要运行500个线程,30000这个参数值是肯定不够的。很快就验证了我的这个想法,抛出错误了。所以我调整了参数值为100000,在900个线程都没有任何问题。

(编辑:安康站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!