Mysql查看状态,连接数,线程数以及Mysql性能监控工具doDBA的使用以及优化

解决问题:

  • 怎样查看Mysql最大连接数(max_connections)?怎样修改max_connections?
  • 怎样查看Mysql线程缓存池数量(thread_cache_size)?thread_cache_size的作用?优化?
  • 怎样查看Mysql线程的状态(Threads_cached/Threads_connected/Threads_running/Threads_running)?
  • 怎样理解Threads_cached/Threads_connected/Threads_running/Threads_running?以及它们和并发量的关系?
  • 怎样使用doDBA工具?

 

1. 怎样查看Mysql最大连接数?怎样修改?

1.1 查看MySQL最大连接数?

登录Mysql:mysql -u username -p password

show variables like '%max_connections%';

 

1.2 修改MySQL最大连接数?

修改mysql的配置文件。

vi /etc/my.cnf

修改或添加:max_connections=1000(需要的值)

重启mysql:systemctl restart mysqld

如果修改失败,参见博客:MySQL 修改最大连接数(max_connections)失效,上限214问题

 

2.怎样查看Mysql线程缓存池数量(thread_cache_size)?thread_cache_size的作用?优化?

2.1 查看

登录mysql

show variables like '%thread_cache_size%';

 

2.2 理解

“每个Mysql客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程。”(来着《高性能MySQL》)

意思是如果Mysql客户端新建一个连接,那么Mysql服务器就需要为这个连接创建一个线程。如果Mysql线程缓存池中有线程,那么就直接从缓存区删除这个线程,并且把它分配给这个新的连接使用。节省了创建连接的开销。当连接关闭时,如果线程缓存还有空间的话,MySQL又会把线程返回缓存。如果没有空间,Mysql会销毁这个线程。

 

2.3 修改

修改mysql的配置文件。

vi /etc/my.cnf

修改或添加:thread_cache_size=300(需要的值)

重启mysql:systemctl restart mysqld

 

2.4 优化建议(优化建议来自《高性能MySQL》)

thread_cache_size变量指定了MySQL可以保持在缓存中的线程数。一般不需要配置这个值,除非服务器有很多连接请求。如果我们观察到很少有每秒创建的新线程数少于10个的时候,通常应该尝试保持线程缓冲足够大,但是实际上经常可能看到每秒少于1个新线程的情况。

一个好的办法是观察Threads_connected变量并且尝试设置thread_cache_size足够大以便能处理业务压力正常的波动。如果它保持在100-120,则可以设置为20;如果保持在500-700,200的线程缓存应该足够大了。

 

3.怎样查看Mysql线程的状态?

登录mysql

show status like 'thread%';

Threads_cached:当前线程缓存还有多少线程。

Threads_connected:当前已连接的MySQL线程数。这个值不会超过max_connections,也许会超过1或2个,不用管它。

Threads_created:这个值是个累加值,表示MySQL服务器为连接创建的线程数?有待考证!

Threads_running:表示当前正在运行的连接数,这个数会远小于Threads_connected,这是正常情况。

 

4. 怎样理解Threads_cached/Threads_connected/Threads_running/Threads_running?以及它们和并发量的关系?

没有高并发时,这四个状态为:

1000并发时,这四个状态为:(参考)

当高并发开始时,Threads_cached的值会减少,Threads_created值几乎不变,Threads_connected值持续增加;当Threads_cached的值减少为0后,Threads_createds值增加(波动会大于10),Threads_connected值持续增加;直到Threads_connected值稳定,这个值和max_connections有关系,此时Threads_cached值为0,Thread_created值不变,Threads_connected值不变。

当高并发结束后,Threads_connected值会减少,Threads_cached值会恢复成最初值(thread_cache_size配置决定。)

以上就是高并发时,MySQL线程的变化情况。

 

优化建议:(以下建议,来自踩坑)

合理的Threads_cached值,能在高并发开始时,让MySQL更快的进入状态,因为它会节省很多创建线程的开销。Threads_connected值上不去,首先看看max_connections的值是多少,如果有连接池,看看连接池配置的最大连接数是多少,如果数据库连接池(比如Druid)最大Active连接数只有500,那Threads_connected最多只能到501(用MySQL性能检测工具可以看到),如果还是上不去,就需要具体分析了。

 

5. 怎样使用doDBA工具?

5.1 在linux上部署doDBA

安装:

wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA --no-check-certificate
wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA.conf --no-check-certificate
chmod +x doDBA

修改配置文件:

运行:

监控Mysql:./doDBA -h 192.168.43.167 -mysql

监控系统:./doDBA -h 192.168.43.167 -sys

 

 (转载请标明出处)

 

posted @ 2019-02-21 17:10  mungerz  阅读(14406)  评论(0编辑  收藏  举报