解决问题:

  • 怎样查看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

(转载请标明出处)

转载于:https://www.cnblogs.com/mungerz/p/10413457.html

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

  1. MySQL查看状态及简单优化

    MySQL查看状态及简单优化 使用show status命令 含义如下: aborted_clients 客户端非法中断连接次数 aborted_connects 连接mysql失败次数 com_xx ...

  2. MYSQL 查看最大连接数和修改最大连接数

    MySQL查看最大连接数和修改最大连接数 1.查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_con ...

  3. Mysql查看最大连接数及设置

    Mysql查看最大连接数及设置 1.查看连接数 show status like 'Threads%' 2.查看当前数据库设置的最大连接数 show variables like '%max_conn ...

  4. 查看tomcat的线程数

    查看tomcat的线程数 ps -Lf pid |wc -l 查看tomcat的线程数 port: 5010 netstat -an|grep port|awk '{count[$6]++} END{ ...

  5. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

  6. mysql 查看密码_Ubuntu安装和配置MySQL数据库

    彻底删除mysql 首先在终端中查看MySQL的依赖项 //创建一个Date对象,表示当前系统时间Date date1=new Date();//创建一个Date对象,参数表示指定的时间距离1970年 ...

  7. MySQL查看数据库连接数和状态

    1.查看MySQL连接数 登录到MySQL命令行,使用如下命令可以查看当前处于连接未关闭状态的进程列表: show full processlist; 若不加上full选项,则最多显示100条记录. ...

  8. mysql查看历史连接数_MySQL如何查看连接数和连接状态

    MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准 ...

  9. mysql查看最大连接数_MySQL查看最大连接数和修改最大连接数

    1.查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_connections = 200; 以下的文章 ...

最新文章

  1. python爬虫实例100-Python 练习实例1
  2. Java集合中的排序API分析
  3. 201771010118马昕璐《面向对象程序设计java》第八周学习总结
  4. 分享10个强大的神器工具,你一定会需要!
  5. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第二题:骰子迷题
  6. svn 分支合并(Subclipse例子)
  7. 程序员基本功02对象与内存控制
  8. mongo ttl索引
  9. matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
  10. 优秀的程序员是如何处理技术 Bug 的?
  11. CGI、PHP-CGI、FastCGI
  12. Theme相关:button的效果不显示
  13. 第六章节 三层架构(二. 模型层与数据访问层)
  14. 实用主义学python百度网盘_麻瓜编程:实用主义学Python(5套全)(火评)
  15. 蓝光三维扫描仪 蓝光投影仪
  16. UopenCryptionKit4Java:一个好用的轻量开源加解密器工具包
  17. ActiveMQ 停止 关闭 报错 ERROR: No or outdated process id in
  18. 计算机一级网络题连接网络,计算机一级MSOffice模拟试题及答案
  19. 都2021年了不会还有人用门禁卡吧!(手把手教你用手机代替门禁卡)
  20. Word学习简单笔记(2)文档排版与设计

热门文章

  1. Python报错:IndentationError: expected an indented block
  2. Working copy XXX locked and cleanup failed in SVN
  3. Java多线程同步Synchronized深入解析
  4. Java线程池Executor框架
  5. linux文件系统启动流程 ---笔记整理
  6. Nand分区及nand erase简解
  7. 叶县有没有计算机培训学校,叶县中等专业学校
  8. java feign同时传对象和其他参数_关于Spirng Cloud的Feign传参问题:
  9. Java throws子句
  10. 利用Cydia Substrate进行Android HOOK(2)