《MySQLInnodbbufferpool相关参数详细.docx》由会员分享,可在线阅读,更多相关《MySQLInnodbbufferpool相关参数详细.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MySQLInnodbbufferpool 相关参数innodb_buffer_pool_chunck_sizebuffer pool块,当buffer pool扩容或缩容时,以chunck为单位来进空间resizing。只能在实例重启时修改效。修改chunck,增加和减少的空间需要是MB的倍数。如果innodb_buffer_pool_chunck_size*innodb_buffer_pool_instances不能于innodb_buffer_pool_size,也就是只能改。innodb_buffer_pool_instancesbuffer pool可以分为多个pool,称为实例,每
2、个实例都专属的LRU链和相关的数据结构,已达到避免只有个pool时的并发冲突。innodb_buffer_pool_sizebuffer pool总,设定最好是innodb_buffer_pool_instances*innodb_buffer_pool_chunck_size的倍数,否则MySQL会调整为适当的,因为只能按照innodb_buffer_pool_chunck_size来调节。SHOW STATUS WHERE Variable_name=InnoDB_buffer_pool_resize_status;可以在线动态调整,但是不知道会有什么BUG。在线调整时,可以通过以下命令查
3、看调整进度:Note InnoDB: Resizing buffer pool from 134217728 to 4294967296. (unit=134217728) Note InnoDB: disabled adaptive hash index.Note InnoDB: buffer pool 0 : 31 chunks (253952 blocks) was added. Note InnoDB: buffer pool 0 : hash tables were resized.Note InnoDB: Resized hash tables at lock_sys, adapt
4、ive hash index, dictionary. Note InnoDB: completed to resize buffer pool from 134217728 to 4294967296.Note InnoDB: re-enabled adaptive hash index.同样也可以查看error log的调整过程信息,如: 在线增buffer pool的error log在线减buffer pool的error logNote InnoDB: Resizing buffer pool from 4294967296 to 134217728. (unit=134217728
5、) Note InnoDB: disabled adaptive hash index.Note InnoDB: buffer pool 0 : start to withdraw the last 253952 blocks.Note InnoDB: buffer pool 0 : withdrew 253952 blocks from free list. tried to relocate 0 pages. (253952/253952)Note InnoDB: buffer pool 0 : withdrawn target 253952 blocks. Note InnoDB: bu
6、ffer pool 0 : 31 chunks (253952 blocks) was freed. Note InnoDB: buffer pool 0 : hash tables were resized.Note InnoDB: Resized hash tables at lock_sys, adaptive hash index, dictionary.Note InnoDB: completed to resize buffer pool from 4294967296 to 134217728. Note InnoDB: re-enabled adaptive hash inde
7、x.可以看到resizing过程需要禁适应哈希索引以及resize hash table,那么在线调整的内核原理如下: 1.increase以chunck为单位增加buffer容量;将哈希表,链表结构和指针等重定向到新的内存地址; 将新页加到free list。这些操作由后台线程进,操作过程中其他线程法访问buffer pool。2.decrease抽取buffer pool的碎并回收; 以chunck为单位移除页;将哈希表,链表结构和指针等重定向到新的内存地址。这些操作由后台线程进,在抽取buffer pool的碎并回收时允许其他线程访问buffer pool,其他过程中buffer poo
8、l不允许访问。所以在线调整buffer pool还是对在线事务有影响。innodb_old_blocks_pct MySQL的LRU算法经过优化,将LRU链分为young区和old区,这个参数控制分配多少例给old区,例如默认值37,即分配概分之三的LRU链给old区使。可取值5到95。可在线调整。innodb_old_blocks_time这个参数控制LRU链中old区的页经过多少毫秒后才移动到young区,如果读取到old区的页该页在old区停留没有超过设定的时间,则不 会移动到young区。默认值是1000,即1秒。可在线调整。通常是于防全表扫描等次性读取对LRU的冲刷,以及避免热数据被
9、量的短期内读的冷数据取代。 设为0时,则old区的数据旦被读取就会移动到young区。 LRU的优先淘汰LRU链尾的页,即old区的末端。innodb_read_ahead_threshold线性预读的触发阈值,可取值0到64。默认值是56,意思是当在个extent顺序读取了56个页,那么innodb就会认为很有可能继续顺序读取该extent剩余的页,那么innodb就会把整个extent都异步地预先读取到buffer pool,以备后续需要的时候直接读取内存。innodb_random_read_ahead是否开启随机预读,意识是如果innodb发现buffer pool已经有了同属于个ex
10、tent的13个连续的页,就会把这个extent剩余的页都预先读取到buffer pool。innodb_adaptive_flushing是否开启适应刷盘调整,默认开启。即动调整刷盘的速度。什么是刷盘的速度?如段时间内刷100页和有多少脏页就刷多少的区别,就是速度的概念。 innodb会种启发式的算法,根据buffer pool的脏页数量,以及redo件写速度,来控制刷盘速度。innodb_adaptive_flushing_lwm志件使量的百分率低位,当达到这个界限,则会触发适应刷盘,即使没有开启innodb_adaptive_flushing。 默认值10,最值70。innodb_flu
11、sh_neighbors在刷盘时是否把要写磁盘的页所在的区的其他页也起刷盘。当使HDD硬盘设备时,开启innodb_flush_neighbors可以减少IO压,其实是减少了寻道时间,因为同个extent通常在磁盘上是相邻的页。对于SSD,寻道时间并不是个影响性能的关键因素,反不需要开启innodb_flush_neighbors。可取值0,1,2,默认值为1。0,将邻接块同刷盘的特性关闭;1,将同个区的所有块同刷盘;2,只将同个区的赃块同刷盘。innodb_flushing_avg_loops innodb保存之前flush状态的迭代次数,有点拗,意思就是对于适应flush应对负载变化的积极
12、程度,以便能够更顺滑地调整flush速度。默认值是30,最值1,最值1000。可动态调整。innodb_lru_scan_depth每秒钟都会有个后台线程page cleaner thread来扫描LRU上的脏页并刷盘,该参数控制扫描链表的深度,即页数。默认值1024,最值100。可动态调整。innodb_max_dirty_pages_pctbuffer pool的脏页例上限,MySQL会通过flush来保持脏页例不超过该设定。默认75,代表75%。可取值0到99。innodb_max_dirty_pages_pct_lwm脏页例上限的低位,超过低位就会提前进flush,避免超过脏页上限。默
13、认值0,表禁该特性。innodb_buffer_pool_filename innodb_buffer_pool_dump_at_shutdown或innodb_buffer_pool_dump_now于记录tablespace IDs和page IDs的件名.innodb_buffer_pool_dump_at_shutdown在实例正常关闭时,将buffer pool导出到磁盘件,以便下次启动时可以加载回来,那么buffer pool的数据就不需要经过业务运来warm up 。innodb_buffer_pool_load_at_startup 在实例启动时加载导出的buffer pool数据innodb_buffer_pool_dump_now马上导出buffer pool的数据到磁盘件innodb_buffer_pool_load_now马上加载以前导出的buffer poo数据innodb_buffer_pool_dump_pct控制buffer pool导出时的采样例,可取值1到100.innodb_buffer_pool_load_abort 中断buffer pool数据的加载innodb_io_capacity告诉innodb当前系统磁盘的性能,可设为所磁盘的iops。