MySQL 配置後臺InnoDB I/O執行緒數
配置後臺InnoDB I/O執行緒數
InnoDB使用後臺執行緒來處理各種型別的I/O請求。您可以使用innodb_read_io_threads和innodb_write_io_threads配置引數來配置服務於資料頁讀寫I/O的後臺執行緒數。這些引數分別表示用於讀和寫請求的後臺執行緒數。它們在所有支援的平臺上都是有效的。你可以在MySQL選項檔案(my.cnf或my.ini)中設定這些引數的值;不能動態地更改值。這些引數的預設值是4,允許的值範圍是1-64。
這些配置選項的目的是讓InnoDB在高階系統上更具擴充套件性。每個後臺執行緒最多可以處理256個I/O請求。後臺I/O的一個主要來源是預讀請求。InnoDB試圖平衡傳入請求的負載,使得大多數後臺執行緒都能平等地工作。InnoDB也嘗試將讀請求從相同的extent分配到相同的thread,以增加合併請求的機會。如果你有一個高階的I/O子系統,你在SHOW ENGINE INNODB STATUS輸出中看到超過64個innodb_read_io_threads掛起的讀請求,你可以透過增加innodb_read_io_threads的值來提高效能。
在Linux系統上,InnoDB預設使用非同步I/O子系統來執行資料檔案頁面的預讀和寫請求,這改變了InnoDB後臺執行緒服務這些型別的I/O請求的方式。
在Linux上使用非同步I/O
InnoDB使用Linux上的非同步I/O子系統(原生AIO)來執行資料檔案頁面的預讀和寫請求。這種行為由innodb_use_native_aio配置選項控制,該選項只適用於Linux系統,預設情況下是啟用的。在其他類unix系統上,InnoDB只使用同步I/O。過去,InnoDB只在Windows系統上使用非同步I/O。在Linux上使用非同步I/O子系統需要libaio庫。
使用同步I/O,查詢執行緒會對I/O請求進行排隊,而InnoDB後臺執行緒每次會檢索一個排隊的請求,並對每個請求發出同步I/O呼叫。當一個I/O請求完成並且I/O呼叫返回時,InnoDB後臺處理這個請求的執行緒呼叫一個I/O完成例程並返回處理下一個請求。並行處理的請求數為n,其中n為InnoDB後臺執行緒數。InnoDB後臺執行緒數由innodb_read_io_threads和innodb_write_io_threads控制。
使用本機AIO,查詢執行緒直接將I/O請求分發給作業系統,從而消除了後臺執行緒數量的限制。InnoDB後臺執行緒等待I/O事件來通知完成的請求。當一個請求完成時,後臺執行緒呼叫一個I/O完成例程,然後繼續等待I/O事件。
本機AIO的優勢是可伸縮性,對於I/O繫結嚴重的系統,通常在SHOW ENGINE INNODB STATUS\G輸出中顯示許多掛起的讀/寫。使用本機AIO時並行處理的增加意味著I/O排程器的型別或磁碟陣列控制器的屬性對I/O效能有更大的影響。
本機AIO對於大量I/O繫結的系統的一個潛在缺點是無法控制一次分配給作業系統的I/O寫請求的數量。分派給作業系統進行並行處理的I/O寫請求太多,在某些情況下可能導致I/O讀不足,這取決於I/O活動的數量和系統能力。
如果作業系統中非同步I/O子系統的問題導致InnoDB無法啟動,你可以使用innodb_use_native_aio=0來啟動伺服器。如果InnoDB檢測到一個潛在的問題,比如tmpdir位置,tmpfs檔案系統,以及Linux核心不支援tmpfs上的非同步I/O,這個選項也可以在啟動時自動禁用
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2886311/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 配置InnoDB主執行緒I/O速率MySql執行緒
- MySQL 配置InnoDB的併發執行緒MySql執行緒
- Redis篇:單執行緒I/O模型Redis執行緒模型
- mysql後臺執行緒詳解MySql執行緒
- MySQL:Innodb purge執行緒略解MySql執行緒
- MySQL:Innodb page clean 執行緒 (二) 解析MySql執行緒
- MySQL:Innodb page clean 執行緒 (一) 基礎MySql執行緒
- 後臺執行緒(daemon)執行緒
- MySQL底層概述—3.InnoDB執行緒模型MySql執行緒模型
- node.js的非同步I/O、事件驅動、單執行緒Node.js非同步事件執行緒
- MySQL 8.0 Reference Manual(讀書筆記73節--Thread Concurrency for InnoDB and I/O Threads)MySql筆記thread
- MySQL:一段innodb buffer instance和cleaner執行緒計算邏輯MySql執行緒
- MySQL_殺mysql執行緒MySql執行緒
- Java執行緒池核心執行緒用盡後為何優先排隊而不是繼續建立執行緒直至最大執行緒數?Java執行緒
- weblogic執行緒池引數調優配置方法Web執行緒
- 合理配置執行緒池執行緒
- Android中後臺的服務和多執行緒Android執行緒
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- MySQL innodb引擎的事務執行過程MySql
- 執行緒池中的最大執行緒數、核心執行緒數和佇列大小的合理設定執行緒佇列
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- 執行SQL發生錯誤!錯誤:disk I/O errorSQLError
- MySQL之磁碟I/O過高排查MySql
- MySQL InnoDB記憶體配置MySql記憶體
- MySQL 配置InnoDB清理排程MySql
- MySQL InnoDB頁面大小配置MySql
- shell後臺執行
- Linux後臺執行Linux
- 證明執行緒池ThreadPoolExecutor的核心執行緒數,最大執行緒數,佇列長度的關係執行緒thread佇列
- c#基礎,單執行緒,跨執行緒訪問和執行緒帶引數C#執行緒
- .net使用Task多執行緒執行任務 .net限制執行緒數量執行緒
- 執行python指令碼後臺執行Python指令碼
- MySQL服務端innodb_buffer_pool_size配置引數MySql服務端
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 多執行緒C++更新MYSQL執行緒C++MySql
- MySQL執行緒狀態詳解MySql執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- MySQL 配置InnoDB配置非持久優化器統計資訊引數MySql優化