一、查看线程
在performance_schema数据库中的, threads表可以查看。
select thread_id,name,type,processlist_id,thread_os_id from threads where name like '%innodb%';
① io_read_thread和io_write_thread分别是读IO线程和写IO线程。
我们需要配置io_write_thread的个数来提高我们的IO写的能力,
innodb_write_io_threads 可以通过配置异步写IO线程个数,这个是根据存储的IO的能来的,模式是4个。固态硬盘建议改成8个或者16个。
innodb_read_io_threads 数据库的读取一般都是同步的,所以一般不建议修改这个值
② page_cleaner_thread 是脏页刷新的线程
可以通过innodb_page_cleaners来修改线程个数,建议一般跟innodb_write_io_threads个数一样。
二、 threads表的应用
问题:当我们的mysql的CPU占用比较高,那么我怎么知道是那个线程比较高了?
① 我们可以通过top -H -u mysql来查看mysql的每个线程的资源占用情况
② 我们可以通过上面的线程pid到performance_schema数据库中的, threads表找到对应的线程名称
通过线程id27712找到他的线程情况
select thread_id,name,type,processlist_id,thread_os_id from threads where thread_os_id = 27712;
这里的type: 线程类型,要么FOREGROUND
要么 BACKGROUND
。用户连接线程是前台线程。与内部服务器活动相关的线程是后台线程
processlist_id 就是我们的 show processlist的数据
那么我就可以根据show processlist找到对应占用CPU高的线程、用户信息。