mysql 原理 ~ 線程與IO


一 簡介:今天來聊聊具體的線程和IO

二 具體線程與作用

   1 master thread    mysql的主要工作觸發線程

      1 redo and binlog日志
      2 合並插入緩沖。
      3 臟頁的刷新
      4 undo頁回收
      5 產生一個ckp點

   2 IO THREAD       處理AIO模式的回調部分

   具體說明 AIO模式, 就是后台處理邏輯,然后先返回狀態給前台,等后台處理完成,會調用回調函數進行二次操作,也就是數據庫做完異步刷新,再調用以下進程

     insert buffer thread->insert buffer merges插入緩沖線程 1個
     log thread -> asynchronous log flushes 日志線程 1個
     read thread -> read-ahead負責數據塊的讀取) 讀線程 4個
     write thread -> flushing of dirty buffers(負責數據庫的寫入) 寫線程 4個

   3  purge thread 最新版本默認4個

      1  undo段的回收 2 對delete標記數據進行清除

        1  可以通過 innodb_purge_thread 調節參數 加快對undo段的回收 默認是1,OLTP業務通常調節為4

  4  page clean thread

        1  臟頁清理線程

           1  默認啟用一個線程,5,7支持多線程刷臟

           2  默認參數 innodb_page_cleaners  默認是1;最大可以是64,也就是會有64個page cleaner線程

       3   判斷參數本身是否合適

           Innodb_buffer_pool_wait_free  等待值

            如果值很大,則需要增加innodb_page_cleaners值,同時增加寫線程(innodb_write_io_thread)

 

  三 名詞解析

    1 IO操作三要素 read / write/ sync

    2 同步IO 在同步文件IO中,線程啟動一個IO操作然后就立即進入等待狀態,直到IO操作完成后才醒來繼續執行  例如redo的刷新,負責線程 master thread

      異步IO   異步文件IO方式中,線程發送一個IO請求到內核,然后繼續處理其他的事情,內核完成IO請求后,將會通知線程IO操作完成了。 如果IO請求需要大量時間執行的話,異步文件IO方式可以顯著提高效率 (縮寫 aio) 例如臟頁的刷新,負責線程 io thread

     請記住

     1 master thread和 io thread是獨立的,並非相互干涉

     2 mysql利用AIO的方式大大提高了處理效率,也是真正工作的,這里要牢記

     3 page_cleaner_thread  和 purge thread的出現目標是減輕mater thread的負擔

  四 總結

   1   mater thread負責主要工作,purge thread 和page cleaner分別負責undo和臟頁的相關工作,整體的后期處理由io_thread完成

       從分類角度上看 有部分同步IO工作 有部分異步IO工作 

  2 在起先的版本中 mysql通過源代碼模擬AIO的工作,在最新的版本中.mysql已經依賴linux內核進行AIO操作,參數是innodb_use_native_aio(默認開啟)  編譯需要依賴 libaio。AIO的相關線程就是io thread部分,上面第二部分

 

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM