--查配置前端
show variables
1>查看数据库版本号算法
show variables like 'innodb_version'\G;
2>查看innodb存储引擎处理io的线程配置sql
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)。