欢迎来到天天文库
浏览记录
ID:37323649
大小:1.50 MB
页数:31页
时间:2019-05-21
《MySQL核心参数含义源码解析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MySQL核心参数含义源码解析徐春阳1. 前言MySQL运维常见的困惑?响应时间莫名奇妙地变长?数据库慢得有点莫名其妙了?Cpu利用率飙高了,原因?O数据库本身的问题?R主从中断?系统环境/网络环境有问题?SQL执行结果有错?怀疑数据库参数不合适了?修改?不能准确预计容量最后‐‐在问题真正解决前,跟同事持不同的意见?2. 数据库核心参数总览innodb_flush_log_at_trx_commitsync_binlogbinlog_group_commit_sync_delaybinlog_group_commit_sync_no_delay_coun
2、tinnodb_commit_concurrency事务安全/提交有关......各种类型cache有关缓冲池有关其他重要参数innodb_buffer_pool_sizeinnodb_buffer_pool_instancesinnodb_max_dirty_pages_pctinnodb_max_dirty_pages_pct_lwminnodb_io_capacity_maxthread_cache_sizeinnodb_thread_concurrencyinnodb_io_capacitytable_open_cacheinnodb_concu
3、rrency_ticketsinnodb_lru_scan_depthtable_open_cache_instancesmax_connectionsinnodb_adaptive_flushingtable_definition_cachemax_user_connectionsinnodb_adaptive_flushing_lwmbinlog_cache_sizemax_allowed_packetinnodb_old_blocks_timequery_cache_sizeslave_max_allowed_packetinnodb_old_bl
4、ocks_pct......back_log。。。。。。wait_timeoutlong_query_time......注:对于某些参数,如果视角不同,归类也可能不一样。限于时间,后面仅讲解缓存池的机制以及与其相关参数。3. 缓存池工作机制概述访问页面时,如缓存命中,直接访问内存,无需访问磁盘。页面的修改在内存中进行,用户功能是什么?无需等待page的更新写进磁盘。缓存池大小有限,如何提高缓存命中率?如何缓存最热的页面?应考虑的因素页面的修改虽然在内存中先进行,但需要考虑何时将被修改的页面刷入磁盘,使页面的更新“落地”。采用LRU算法进行页面替换LRU
5、链表分成old/young两部分如何实现?被更新的页面被加入flush列表,后台刷新线程及时刷新3.1 缓存池中的列表空闲内存页(块)列表,需要装载(缓存)磁盘上的free数据页的时候,从该列表取内存块。缓存了磁盘上的数据页的内存块列表,包含三类:Buffer bool1.未修改的页面,可以从该列表中摘除,然后挂到freeLRUinstance 列表中。2.已修改还未刷新到磁盘的页面。3.已修改且已经刷新到磁盘的页面(实际上可并为第1类)1orN个在内存中被修改但还没有刷新到磁盘的数据页列表,就flush是所谓的“脏”页列表,内存中的数据跟对应的磁盘上
6、的数据不一致。属于该列表的页面同样存在于LRU列表Buffer bool中,但反之未必。instance 3.2 访问数据页的流程D脏页R未修改/已刷新页选访问数据页Buffer pool择该时在缓存池空闲中没有命中,页未存则需要先找命放中到空闲块来装载数据页Free listfreefreeFree list查找方向没有空余null的块,然尾部后从LRU中查找未被LRU listRDDRD修改的页/或已被刷尾新的页,部找到后放LRU listDDDD入free列表中,然后从free列表在LRU列表中找不到可以替换的页,单页刷盘中重新取则从LRU列表的
7、队尾开始选择单页刷新,刷新完成后加入free列表.3.3 访问数据页的源码之—寻找空闲的block函数从free list 取block,找到就返回block从LRU列表中查找可以替换的block然后放入free 列表,如果返回true,然后跳转到函数loop位置,重新从free列表中找空闲的block。第一次扫描时仅scan 100个页( 不考虑压缩页),如果需要进行第二次扫描,则扫描整个lru列表。从LRU列表中刷新一个页面(”脏”页),然后加入free列表,跳转到loop位置,进行新的循环。???如果需要用户线程来刷新“脏页”来产生空闲页,系统的
8、性能将如何?Free or 可以替换的页大量存在太重要了。3.4 缓存池的有关
此文档下载收益归作者所有