MySQL InnoDB記憶體配置

eric0435發表於2022-04-09

InnoDB記憶體配置
MySQL將記憶體分配給各種快取和緩衝區,以提高資料庫操作的效能。當為InnoDB分配記憶體時,總是考慮作業系統需要的記憶體,分配給其他應用程式的記憶體,以及分配給其他MySQL緩衝區和快取的記憶體。例如,如果您使用MyISAM表,請考慮分配給鍵緩衝區的記憶體量(key_buffer_size)。

InnoDB特定的緩衝區使用以下引數配置:
.innodb_buffer_pool_size定義緩衝池的大小,緩衝池是存放InnoDB表、索引和其他輔助緩衝區快取資料的記憶體區域。緩衝池的大小對系統效能很重要,通常建議將innodb_buffer_pool_size配置為系統記憶體的50%到75%。預設的緩衝池大小是128MB。

在具有大量記憶體的系統上,可以透過將緩衝池劃分為多個緩衝池例項來提高併發性。緩衝池例項的數量由innodb_buffer_pool_instances選項控制。預設情況下,InnoDB建立一個緩衝池例項。緩衝池例項的數量可以在啟動時配置。

.innodb_log_buffer_size以位元組為單位定義InnoDB所要寫入磁碟日誌檔案中的日誌快取區大小。預設大小為16MB。大型日誌緩衝區允許執行大型事務,而不需要在事務提交之前將日誌寫入磁碟。如果有更新、插入或刪除許多行的事務,可以考慮增加日誌緩衝區的大小以節省磁碟I/O。Innodb_log_buffer_size可以在啟動時配置

警告:
在32位GNU/Linux x86上,注意不要將記憶體佔用設定得太高。glibc可能允許程式堆堵塞執行緒堆疊,這會導致伺服器崩潰。如果分配給mysqld程式的全域性和每個執行緒的緩衝區和快取的記憶體接近或超過2GB,這是一個風險。

一個類似於下面的公式,計算MySQL的全域性和每個執行緒的記憶體分配,可以用來估計MySQL的記憶體使用。您可能需要修改公式,以考慮到MySQL版本和配置中的緩衝區和快取。
innodb_buffer_pool_size+ key_buffer_size+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)+ max_connections*2MB

每個執行緒使用一個堆疊(通常是2MB,但在Oracle公司提供的MySQL二進位制檔案中只有256KB),在最壞的情況下還使用sort_buffer_size +read_buffer_size的額外記憶體

在Linux上,如果核心啟用了大頁支援,InnoDB可以使用大頁為其緩衝池分配記憶體。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2886306/,如需轉載,請註明出處,否則將追究法律責任。

相關文章