--查配置前端
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)。