mysql线程php_MySQL线程

MySQL线程

当MySQL服务器本身遇到性能问题的时候,一般可以通过slow log来找到耗时比较多的SQL语句,并且进一步通过explain来优化和改进SQL执行速度.这种方法有这几方面的限制:首先,并不是所有的问题都是因为异常SQL造成的,当大量SQL哀求时间比较长,但不到slow log阈值的时候(通常线上无法将slow log阈值设置的较小),MySQL服务器负载也会很高;其次,MySQL服务器本身的状态会影响SQL的执行,有一些没有问题的SQL语句在MySQL负载较高时,也会进入slow log.

另外一种办法是通过MySQL的Performance Schema、Innodb status以及MySQL status等MySQL统计信息来定位问题;这通常需要对MySQL的实现有相当的了解;并且定位问题不是非常直接.

本人认为除了以上两种方法之外,可以通过strace MySQL的线程来定位性能瓶颈.这种方法可以定位出因为系统IO(包括网络)、内存、线程同步(MySQL锁使用错误)等造成的问题;也就是说,如果能确定MySQL Server不存在大量需要在用户态进行的计算(例如浮点运算、字符串处理等),都可以尝试使用此方法.

下面将介绍MySQL线程相关的一些信息,以MySQL5.6.29为例,MySQL5.7会有一些纷歧样.

1、多线程法式

MySQL只有一个进程,使用多线程实现并发.使用InnoDB作为存储引擎的情况下,主要关注MySQL和InnoDB创立的线程.

可以使用MySQL的Performance Schema.threads表来查看MySQL的线程.这个表含所有MySQL创建并活跃的线程以及部门InnoDB线程.

2、线程池

每次和MySQL Server建立连接,MySQL服务器都会创建或分配一个线程处理对应的哀求.

MySQL会维护一个线程池管理这些工作线程.只有当工作线程的正在响应哀求时,才会进入Performance Schema.threads表.可以通过向MySQL进程发送SIGHUP信号来释放所有的线程并创建一个只有一个线程的线程池.

3、InnoDB线程

InnoDB会创建很多功能线程(都是运行期间常驻线程),用于处理异步任务.但也许InnoDB有很多代码是临时工写的,有部门线程没有使用MySQL提供的Performance Schema机制注册到threads表中.

4、线程对应

由于threads表中没有包括线程的系统id,甚至由于第2点和第3点的原因(部分线程不会出现在threads)表中,因此无法通过threads表将MySQL的线程对应到系统线程.

以下表为本人梳理的线程创建顺序及数量,可以通过将MySQL服务器依照线程ID进行排序,然后一一对应上.(注:由于MySQL在启动过程中需要创建一些临时线程,因此MySQL的线程ID并不是连续的)

下表所列CPU光阴为本人的线上环境的某一个从库的光阴.

创立顺序线程名称线程数量线程作用CPU光阴

1main1主线程

2innodb ibuff io thread1innodb inser buff写入和读取线程0s

3innodb log io thread1innodb undo log写入和读取线程1s

4innodb read threadsinnodb_read_io_threadsinnodb数据库文件read ahead线程9s*8

5innodb write threadsinnodb_write_io_threadsinnodb数据库文件写入线程2m*8

6lock_wait_timeout_thread1watches the timeouts for lock waits0.99s

7srv_error_monitor_thread1warns of long semaphore waits33s

8srv_monitor_thread1prints InnoDB monitor info0.15s

9srv_master_thread1does purge and other utility operations4s

10srv_purge_coordinator_thread1redo log清理1h

11srv_worker_threadinnodb_purge_threads – 1purge worker0

12buf_flush_page_cleaner_thread1flush page53m

13buf_dump_thread1buffer pool dump/load thread0s

14dict_stats_thread1dict stats gathering thread0.11s

15fts_optimize_thread1Optimize all FTS tables0.15s

16signal_handler1signal handler thread0s

17slave_io1slave io19m

18slave_sql1slave sql11h

19connectionnhandler0

下一节,本人将分享关于使用strace跟踪线程的操作履历.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值