mysql5.7.25版本,可以通过查看performance_schema下thread表,查看mysql后台运行了哪些线程
下面我们来具体说说这些线程代表什么意思:
main函数:进程的主入口,负责初始化、读取配置文件信息等
buf_dump_thread:
(1).buffer pool预热(关机之前把内存数据先导出到磁盘上持久化,重启之后再加载到内存中)分为dump过程和load过程,均由后台线程buf_dump_thread完成. 在数据库发生变更,比如数据库重启之后,之前buffer_pool的数据没有在内存中,性能会受到明显的影响。所以对于核心库,可以开启该功能 由参数innodb_buffer_pool_dump_now和innodb_buffer_pool_load_now控制 (2).5.7之后支持的buffer pool动态调整大小,也是由buf_resize_thread完成 compress_gtid_table:mysql5.7引入了表gtid_executed,表示实例已经执行过了的事务信息(source_uuid:transactionid)。从库上可以不开启log_slave_updates,少记录一份二进制日志,若开启,记录gtid_executed到binlog里。 若启用GITD并且不启用log_slave_updates,则表gtid_executed会不断增大,因为每次事务提交都会将当前GTID写入到该表,为了避免该表不断增大,引入了前台线程compress_gtid_table来定期压缩合并该表
srv_master_thread:innodb主线程,5.6之后主要通过循环来调用其他线程完成各项操作
io_ibuf_thread:插入缓冲线程(ibuf指insert buffer,5.6之后改为change buffer),主要是change buffer的merge操作(内存中的最新的二级索引与磁盘加载到内存中的二级索引合并)
srv_lock_timeout_thread:锁线程,负责锁控制和死锁检测
dict_stats_thread:负责innodb表统计信息更新。默认是开启自动统计信息,当表上的记录修改超过10%时,就会对统计信息重新计算或者通过anaylze table手动调用线程收集统计信息
page_cleaner_thread:负责将脏数据写入到磁盘,5.7中可以开启多个page clean线程服务多个innodb buffer,innodb_page_cleaners设置
signal_handler:信号处理线程,负责sigterm,sigquit,sighup信号处理的线程
srv_monitor_thread:监控打印线程,打印采集的监控信息 thread_timer_notifier:计时器过期通知线程,一般在超过max_execution_time后自动终止sql执行 one_connection:用户连接线程
srv_purge_thread:undo清理线程,负责undo页过期清理
io_log_thread:日志线程,用户将redo log刷新到磁盘
srv_error_monitor_thread:错误监控线程,负责错误控制及处理
srv_worker_thread:innodb工作线程,负责实际工作的线程,轮询从队列中取出任务等并执行
io_write_thread:innodb写io操作线程,由innodb_write_io_threads控制
io_read_thread:innodb读io操作线程,由innodb_read_io_threads控制