MySQL後台線程的清理工作

來源:互聯網
上載者:User

標籤:reads   啟動   回收   表示   style   資源   mil   ima   效能   

後台清理工作:髒頁刷盤、undo回收

  1、page cleaner thread:重新整理髒頁

  2、purge thread:清空undo頁、清理“deleted”page

一、innodb_page_cleaners

  page cleaner線程從buffer pool中刷髒頁的線程數量。

1、5.7新特性

  1、5.6版本以前,髒頁的清理工作交由master線程的;

  2、Page cleaner thread是5.6.2引入的一個新線程(單線程),從master線程中卸下buffer pool刷髒頁的工作獨立出來的線程(預設是啟一個線程);

  3、5.7開始支援多線程刷髒頁;

2、發起髒頁的寫請求

  清理因為觸發需要髒頁回收的髒頁(髒很久了、冷髒頁……)

3、如何調整這個參數

mysql> show variables like ‘i%cleaners‘;+----------------------+-------+| Variable_name        | Value |+----------------------+-------+| innodb_page_cleaners | 1     |+----------------------+-------+1 row in set (0.05 sec)

  1、設定檔my.cnf中添加innodb_page_cleaners=num值

  2、預設是1;最大可以是64,也就是會有64個page cleaner線程並發工作清理髒頁

4、如何判斷是否要修改增加innodb_page_cleaners

mysql> show global status like ‘%wait_free‘;+------------------------------+-------+| Variable_name                | Value |+------------------------------+-------+| Innodb_buffer_pool_wait_free | 0     |+------------------------------+-------+1 row in set (0.01 sec)

  Innodb_buffer_pool_wait_free:標誌著髒頁有沒有成為系統的效能瓶頸;如果值很大,則需要增加innodb_page_cleaners值,同時增加寫線程。

 

  1、通常,對於buffer pool的寫發生在後台,當innodb需要讀或建立一個資料頁,但是沒有乾淨的可用頁,innodb就會為等待的操作能完成先將一些髒頁刷入磁碟。

  2、Innodb_buffer_pool_wait_free就是這等待操作的執行個體數。如果innodb_buffer_pool_size的大小設定適當,這個值就會很小,甚至為0。

 

二、innodb_purge_threads

  purge線程,後台線程,致力於innodb清理,資源回收操作。

1、清理操作

  1、清理undo頁

    undo記錄修改前的資料用於復原,已提交的時候,不再復原,即可清理該undo資訊。

  2、清理page裡面的有“deleted”標籤的資料行

    1、當我們delete資料行時,是對資料頁中要刪除的資料行做標記“deleted”,事務提交(速度快);

    2、後台線程purge線程對資料頁中有“deleted”標籤的資料行進行真正的刪除。

2、調整依據

  1、系統存在大量的delete、對主鍵的update

mysql> show global status like ‘%rows%d%ted‘;+---------------------+-------+| Variable_name       | Value |+---------------------+-------+| Innodb_rows_deleted | 0     || Innodb_rows_updated | 5     |+---------------------+-------+2 rows in set (0.01 sec)

  2、mysql> show engine innodb status \G

Trx id counter 1159171  #事務計數Purge done for trx‘s n:o < 1157813  #事務清空位置    #1159171-1157813表示有待清空的事務量undo n:o < 0  #當前清理事務undo位置state: running but idle  #啟動但是閑置History list length 1029  #當前undo資料頁的總量1029*16K

3、調整:innodb_purge_threads預設值是1,OLTP系統一般會修改為4

mysql> show variables like ‘%purge_t%‘;+----------------------+-------+| Variable_name        | Value |+----------------------+-------+| innodb_purge_threads | 4     |+----------------------+-------+1 row in set (0.01 sec)

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.