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

摘要:
如何查看MySQL线程缓存池的数量?如何使用doDBA工具?修改MySQL配置文件。这意味着,如果MySQL客户端创建了一个新连接,MySQL服务器需要为该连接创建一个线程。如果MySQL线程缓存池中有线程,请直接从缓存中删除该线程并将其分配给新连接。如果没有空间,MySQL将销毁线程。Threads_Running:表示当前正在运行的连接数,这将比Threads_Connected(正常)小得多。)以上是MySQL线程在高并发下的变化。

解决问题:

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

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

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?以及它们和并发量的关系?

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

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

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

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

当高并发开始时,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查看状态,连接数,线程数以及Mysql性能监控工具doDBA的使用以及优化第4张

运行:

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

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

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

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

 (转载请标明出处)

免责声明:文章转载自《Mysql查看状态,连接数,线程数以及Mysql性能监控工具doDBA的使用以及优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RocketMQ(一)原理和实战!crontab的语法规则格式(每分钟、每小时、每天、每周、每月、每年定时执行 规则)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

实现MySQL数据库同步实例演示(主从模式) 新风宇宙

 本次实验的主要目的是剖析配置MySQL(和PHP搭配之最佳组合) 数据库的主辅MySQL数据库同步的实际操作步骤,我前两天在相关网站看见的资料,觉得挺好,就拿出来供大家分享,开始具体的配置。   本次试验的MySQL(和PHP搭配之最佳组合)版本都是 4.1.7-standard-log , master 端的操作系统是 redhat 9.0 , sla...

python3.6+RF连接mysql

接口自动化中会遇到有操作数据库的动作 目录 1、安装第三方库 2、安装pymysql 3、数据库操作 1、安装第三方库 使用在线安装:pip install robotframework_databaselibrary -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna....

一、从Windows消息机制说起

    一,消息       消息(Message)指的就是Windows 操作系统发给应用程序的一个通知,它告诉应用程序某个特定的事件发生了。比如,用户单击鼠标或按键都会引发Windows 系统发送相应的消息。最终处理消息的是应用程序的窗口函数,如果程序没处理的话操作系统有默认函数将会作出处理。     从数据结构的角度来说,消息是一个结构体,它包含了...

谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一。做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种数据库自身体系结构的理解。今天这一讲,作为补充 Java 面试考察知识点的完整性,关于数据库的应用和细节还需要在实践中深入学习。 今天我要问你的问题是,谈谈...

R连接mysql数据库(ODBC)

Warning messages: 1: In odbcDriverConnect("DSN=Rdata;UID=root") : [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 当R语言从数据库取出数据时,出现以上错误,...

前端worker之web worker

web worker 背景 众所周知javascript是单线程的,同一时间内只能做一件事情。这是十分必要的,设想,如果js是多线程的。有个dom元素两个线程同时做了改变,一个display:none,另一个display:block,这样让浏览器就无所适从了。出于此种考虑,单线程的js就这样一直延续下来,但是凡事必有两面性,虽然单线程保证了一些ui操作的...