mysql的worker 线程_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跟踪线程的操作经验。
mysql的worker 线程_MySQL线程相关推荐
- mysql 线程池大小设置_MySQL线程池参数解析
线程池是数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona ...
- mysql 线程_MySQL服务器线程数的查看方法详解
本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合理的范围 ...
- mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- mysql 并发锁表_MySQL锁表的用法,防止并发情况下的重复数据
早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定.但是具体如何用,怎么用,不太清楚.今天详细研究了下,总算搞明白了2者的 ...
- mysql 写binlog 原理_MySQL binlog原理及应用
01 概述 Binlog它记录了所有的DDL和DML(除了数据查询语句)语句,以事件(EVENT)形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般来说开启二进制日志 ...
- 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
文章目录 一.自定义线程池使用流程 二.自定义任务拒绝处理策略 三.完整代码示例 在博客 [Android 异步操作]线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTas ...
- 【Android 异步操作】线程池 ( 线程池 reject 拒绝任务 | 线程池 addWorker 添加任务 )
文章目录 一.线程池 reject 拒绝任务 二.线程池 addWorker 添加任务 在上一篇博客 [Android 异步操作]线程池 ( 线程池 execute 方法源码解析 ) 中 , 讲解 线 ...
- mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...
事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...
最新文章
- vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
- 镗孔指令g76格式_11种孔加工固定循环指令+1个案例=完美解决孔加工问题
- Android爬坑之旅之WebView
- 笔记 - AliCloud 云数据库 简介
- ZOJ 2165 Red and Black
- 关于java结构中描述正确的是_下列关于Java中类的构造方法的描述,正确的是()...
- android 高德地图 sh1,百度、高德地图获取发布版(Release)SHA1
- Python字符串与列表间的相互转化
- html选中然后显示到表格,如何将数据从html表单显示到表格中?
- 2019澳门理工计算机作品决赛,我校学子在2019年泛珠三角+大学生计算机作品赛总决赛中斩获佳绩...
- Windows 下的 electron 开发笔记一
- c语言背包问题(动态规划解法)
- C# 开发Chrome内核浏览器(WebKit.net)
- 最新:斐讯K3千兆无线路由器刷官改版固件的详细图文教程
- linux运行roon,Roon + HQPlayer + NAA + 解码 网线直连方案
- windows 安装cab文件
- Java面试题(上)
- 使用联想智能引擎的电脑,将会懂你的心思
- 瑞合信LED字幕WiFi卡使用教程(8.0版)
- 使用多可用区Kubernetes进行灾难恢复