MySQL後台線程整理總結

來源:互聯網
上載者:User

標籤:不同   mod   處理   資料庫   協助   多參數   size   不同的   ast   

 本文整理自《MySQL技術內幕 InnoDB儲存引擎》

 

MySQL通過後台各種線程、記憶體池、檔案互動來實現對外服務的,不同線程實現不同的資源操作,各個線程相互協助,共同來完成資料庫的服務。
以下簡單總結MySQL的一些後台線程以及主要作用,以及innodb引擎的變化升級情況。

整體上看,MySQL的後台線程概括如下,分為master thread,IO thread,purge thread,page cleaner thread

 

這其中,Master Thread是MySQL的最核心的線程,其中實現了多種功能,同時也在不斷地改進與最佳化。
InnoDB 1.2.X之前版本的Master Thread主要工作內容,
如下是虛擬碼來描述 Master Thread

MasterThread{    //每1秒一次操作涉及的行為    PerSecondOperation()    {        1,重新整理redo日誌緩衝到磁碟,不管是否提交(總是)
      屬於master thread中的checkpoint實現
2,合并插入緩衝(可能),根據一秒之內發生的IO次數,如果小於5,則執行合并插入緩衝的操作
3,最多重新整理100個Innodb緩衝池中的髒頁到磁碟(可能), if(buf_get_modified_ratio_pct>buf_max_dirty_pages_pct>buf_get_modified_ratio_pct)   執行重新整理100個髒頁到磁碟
4,如果當前沒有使用者活動,切換到background模式 } //每10秒一次操作涉及的行為 TenSecondOperation() { 1,重新整理100個Innodb緩衝池中的髒頁到磁碟(可能), 判斷過去10秒之內IO操作是否小於200次,如果是,重新整理100個髒頁到磁碟------>寫入程式碼
2,合并最多5個插入緩衝(總是),無條件,總是執行合并最多5個插入緩衝
3,日誌緩衝重新整理到磁碟(總是)
4,刪除無用的undo頁(總是),每次最多嘗試回收20個頁---->寫入程式碼
5,重新整理100或者10個髒頁到磁碟(總是):---->寫入程式碼 髒頁比例>70%==>重新整理100個髒頁到磁碟, 髒頁比例<70%==>重新整理10個髒頁到磁碟 } //BackgroundOperation線程 BackgroundOperation() { 1,刪除無用的Undo頁(總是)
2,合并20個插入緩衝(總是)
3,跳回到主迴圈(總是)
4,不斷刷線100個直到page到磁碟,直到滿足(髒頁小於參數buf_max_dirty_pages_pct)。 }}

不難發現,InnoDB 1.2.X之前的版本寫死了很多參數,
InnoDB 1.2.X之後版本的Master Thread根據實際情況,靈活地增加了一些配置參數,尤其是與IO有關的innodb_io_capacity參數。
innodb_io_capacity表示實體儲存體的IO能力,在後台線程與實體儲存體IO互動的時候,由於不同的存放裝置有不同的IO處理能力,
innodb_io_capacity就表示實體儲存體的IO處理能力的參,預設值是200
通過根據實際儲存情況對innodb_io_capacity的配置,可以最大化地提高MySQL伺服器的處理效能。

MasterThread{    1,增加參數innodb_io_capacity,合并插入緩衝=innodb_io_capacity*5%;重新整理髒頁數量=innodb_io_capacity    2,buf_max_dirty_pages_pct預設值修改為75%    3,innodb_purge_batch_size,回收undo頁的配置,預設值20    //每1秒一次操作涉及的行為    PerSecondOperation()    {        1,重新整理redo日誌緩衝到磁碟,不管是否提交(總是)           屬於master thread類型的checkpoint        2,合并插入緩衝(可能),根據一秒之內發生的IO次數:           if(過去1秒鐘的ios<5%innodb_io_capacity)           {                   執行合并5%innodb_io_capacity個page的插入緩衝的操作           }        3,重新整理緩衝池中的髒頁到磁碟(可能):           if(buf_get_modified_ratio_pct>buf_max_dirty_pages_pct)                重新整理髒頁個數:100%*innodb_io_capacity           if(buf_get_modified_ratio_pct<buf_max_dirty_pages_pct)                重新整理髒頁個數:10%*innodb_io_capacity        4,如果當前沒有使用者活動,切換到background模式    }    //每10秒一次操作涉及的行為    TenSecondOperation()    {            1,重新整理緩衝池中的髒頁到磁碟(可能):           if(buf_get_modified_ratio_pct>buf_max_dirty_pages_pct)                重新整理髒頁個數:100%*innodb_io_capacity           if(buf_get_modified_ratio_pct<buf_max_dirty_pages_pct)                重新整理髒頁個數:10%*innodb_io_capacity                2,合并插入緩衝(可能),根據過去一秒之內發生的IO次數:            if(ios<5%innodb_io_capacity)            {                    執行合并5%innodb_io_capacity個page的插入緩衝的操作            }        3,日誌緩衝重新整理到磁碟(總是)                4,刪除無用的undo頁(總是)           根據參數:innodb_purge_batch_size    }    BackgroundOperation()    {        1,刪除無用的Undo頁(總是)

2,合并innodb_io_capacity個插入緩衝(總是)
3,跳回到主迴圈(總是)
4,不斷刷線innodb_io_capacity個page到磁碟,直到滿足(髒頁小於參數buf_max_dirty_pages_pct)。 }}

獨立的page cleaer thread

PageCleanerThread(){        1,重新整理緩衝池中的髒頁到磁碟(可能):        if(buf_get_modified_ratio_pct>buf_max_dirty_pages_pct)            重新整理髒頁個數:100%*innodb_io_capacity        if(buf_get_modified_ratio_pct<buf_max_dirty_pages_pct)            重新整理髒頁個數:10%*innodb_io_capacity}

 

MySQL後台線程整理總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.