zoukankan      html  css  js  c++  java
  • 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

     (转载请标明出处)

  • 相关阅读:
    operator模块和functools模块
    函数注解
    用户定义的可调用类型、从定位参数到仅限关键字参数
    可调用对象
    nxos启动的初始化和https访问nx-api
    网络安全基础之网络协议与安全威胁
    华为AC中服务集命令解释配置
    转:图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
    windows下python3 python2 共存下安装virtualenvwrapper
    关于网络安全学习的网站
  • 原文地址:https://www.cnblogs.com/mungerz/p/10413457.html
Copyright © 2011-2022 走看看