上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.7 MySQL前台线程
跟MySQL后台线程类似,我们也可以通过performance_schema.threads表来查询MySQL中有哪些前台线程(以下为双主复制架构数据库实例中的查询结果)。
mysql> select name, type, thread_id, processlist_id from performance_schema.threads where type='FOREGROUND'; +----------------------------------+----------+----------+---------------+ | name | type | thread_id | processlist_id | +----------------------------------+----------+----------+---------------+ | thread/sql/compress_gtid_table |FOREGROUND| 50 | 7 | | thread/sql/one_connection |FOREGROUND| 52 | 9 | ...... | thread/sql/slave_io |FOREGROUND| 54 | 11 | | thread/sql/slave_sql |FOREGROUND| 55 | 12 | | thread/sql/slave_worker |FOREGROUND| 56 | 13 | ...... +----------------------------------+----------+----------+---------------+ 9 rows in set(0.00 sec)
我们可以看到,有5种前台线程,这些前台线程的主要功能如下。
● compress_gtid_table(GTID压缩线程):用于压缩MySQL 5.7新增的mysql.gtid_executed表中的GTID记录数量。在MySQL 5.7版本中,当从库关闭log-bin或者log_slave_updates参数之后,SQL线程每应用一个事务就会实时更新一次mysql.gtid_executed表(在MySQL 5.7中启用GTID复制时可以关闭log_slave_updates参数,使用该表来记录GTID。但在MySQL 5.6中由于没有此表,所以不能关闭log_slave_updates参数),时间一长,该表中就会存在大量的GTID记录(每个事务一行),使用该线程可以把多行记录压缩成一行。
● one_connection(用户连接线程):用于处理用户请求的线程。
● slave_io(I/O线程):用于拉取主库binlog日志的线程。
● slave_sql(SQL线程):用于应用从主库拉取的binlog日志的线程。注意:在多线程复制中,该线程为协调器线程,用于分发binlog日志给工作线程(slave_worker)应用,并对多个工作线程进行协调。
● slave_worker(工作线程):在多线程复制场景中,接收并应用SQL线程(slave_sql)分发的主库binlog日志,多个工作线程之间的一致性依靠SQL线程(slave_sql)进行协调。