--查配置
show variables
1>查看数据库版本号
show variables like 'innodb_version'\G;
2>查看innodb存储引擎处理io的线程配置
show variables like 'innodb_%io_threads'\G;
---------------
innodb_read_io_threads
innodb_write_io_threads
3>purgeThread:事务被提交后,其使用的undolog可能不在需要,因此需要purgeThread来回收已经使用并分配的undo页
从innodb1.1版本后,用户可以配置开启PurgeThread线程,可以提高CPU的利用率
innodb_purge_threads=1;
4>Page Cleaner Thead:作用是将之前版本中脏页的刷新操作放入单独线程来完成,目的是减轻 主线程(Master Thread)的工作,对于用户查询线程阻塞起到优化作用。
5>查看缓冲池大小:
show variables like 'innodb_buffer_pool_size'\G;
缓冲池缓存的数据页类型有:索引页、数据页、undo页、插入缓冲页(insert buffer)、自适应哈希索引(adaptive hash index)、innodb存储的锁信息(lock info)、数据字典信息(data dictionary)
6>缓冲池支持开启多个缓冲池实例:每各页根据哈希平均分配到各个缓冲池实例;好处:减少数据库内部资源竞争,提高并发。
查看
show variables like 'innodb_buffer_pool_instances'\G;
设置
set global innodb_buffer_pool_instances=1 (或者大于1)
7>缓冲池的管理
缓冲池是通过 LRU(最近最少使用)算法来进行管理的。使用最频繁的页放在LRU列表的最前端,不常使用的放在列表末尾。当缓冲池放不下时,从末尾列表处开始释放。
innodb存储引擎在LRU列表中加入了 minpoint位置机制!
新读到的页,先不放在LRU最前端,而是放在minpoint位置处,minpoint位置默认配置是在LRU列表的5/8处 ,可以用innodb_old_blocks_pct控制。
参数innodb_old_blocks_time,用来表示读取到minpoint位置需要等待多久才会被加入到LRU列表的前端。
LRU管理已经读取的页,
Free表示未被用过的页。
当LRU列表从old部分加入到new部分,称为(page made young) ;由于 innodb_old_blocks_time设置而没有从old部分移到new部分,称为(page not made young)
page made young:显示的是移动的次数
--查看INNODB存储引擎状态
SHOW ENGINE INNODB STATUS\G;
buffer pool size : 缓冲池页数; (1页=16k)
free buffers :当前free列表中页的数量
Database pages :LRU列表中页的数量
说明:
Free buffers + Database pages +(插入缓冲 、锁信息、自适应哈希索引、数据字典信息) = Buffer pool size
Free buffers + Database pages:这里边主要缓存的是 (数据页和索引页)
Buffer pool hit: 表示缓冲池的命中率 小于95%表示LRU被慢sql污染了
8>脏页 (Flush 列表 :即脏页列表)
LRU列表中的页被修改后,称该页为脏页(dirty page)--缓冲池中页和磁盘中页数据不一致。
SHOW ENGINE INNODB STATUS\G;
Modified db pages : 脏页数量
9>重做日志缓冲
因为每秒都会刷新重做日志到日志文件,索引缓存不需要很大,有innodb_log_buffer_size来控制,默认8M。
10>当数据库关闭是把所有脏页刷新回磁盘,默认如此,可以配置:
innodb_fash_shut_shutdown=1
11>LRL列表可用空间不够,从innodb1.2版本后有专门的线程负责把脏页刷新回磁盘 (Page Cleaner)
innodb_lru_scan_depth 控制LRU列表可用页数量,(默认1024)。