MySQL引數調優

2021-08-26 13:37:56 字數 3118 閱讀 8128

l通用類:

key_buffer_size

含義:用於索引塊的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫)。

影響:對於myisam表的影響不是很大,myisam會使用系統的快取來儲存資料,所以大量使用myisam表的機器記憶體很快就會耗盡。但是,如果你將該值設得過大(例如,大於總記憶體的50%),系統將轉換為頁並變得極慢。mysql依賴作業系統來執行資料讀取時的檔案系統快取,因此你必須為檔案系統快取留一些空間。

建議:先設定為記憶體的25%,觀察效能變化。

table_open_cache

含義:為所有執行緒開啟表的數量。

影響:增加該值能增加mysqld要求的檔案描述符的數量。可以避免頻繁的開啟資料表產生的開銷。開啟乙個表的開銷可能很大,因為myisam會把myi檔案的檔案頭標識為正在使用,所以在記憶體中做這個操作比較好。,因為每個執行緒都需要開啟表,連線數越大這個值要越大。

建議:我們有300多個表的話,大約2048差不多了。

thread_cache_size

含義:快取可重用的執行緒數。

影響:這個引數設定執行緒的快取,執行緒的建立和銷毀的開銷可能很大,因為每個執行緒的連線/斷開都需要。如果應用程式中有大量的跳躍併發連線並且執行緒較多的話,就要加大它的值。它的目的是在通常的操作中無需建立新執行緒。

建議:通常至少設定為16。

query_cache_size

含義:指定mysql查詢結果緩衝區的大小。

影響:如果應用程式有大量讀,而且沒有應用程式級別的快取,那麼這很有用。不過不要設定太大,因為維護它也需要不少開銷,這會導致mysql變慢。

建議:通常設定為32-512mb。設定完之後最好是跟蹤一段時間,檢視是否執行良好。在一定的負載壓力下,如果快取命中率太低了,就啟用它,如果命中率已經不錯了,就可以把他調小一點。對於2g的記憶體,先從16m開始,一倍一倍的增加,直到命中率比較穩定為止。

query_cache_limit

含義:快取單條sql

的結果集上限。預設4kb。

影響:當一條sql

返回的結果集大於這個限制的時候,將不被mysql快取。

建議:設定為1m即可。

query_cache_min_res_unit

含義:快取為每個資料集存放的最小記憶體大小,預設4kb。

影響:如果太小的話,將會導致mysql經常訪問記憶體塊去獲取資訊,如果設定太大則浪費記憶體。

建議:如果sql

返回的結果集都很小的話,引數也可以調小一點,避免記憶體浪費。如果結果集大部分都大於4kb的話,則考慮加大引數。

back_log

含義:在mysql的連線請求等待佇列中允許存放的最大連線請求數。系統預設值為50。

影響:如果系統在乙個短時間內有很多連線,則需要增大該引數的值,該引數值指定到來的tcp/ip

連線的偵聽佇列的大小。不同的作業系統在這個佇列大小上有它自己的限制。試圖設定back_log高於你的作業系統的限制將是無效的。

建議:對於linux系統推薦設定為小於512的整數。

sort_buffer_size

含義:為每個需要進行排序的執行緒分配該大小的乙個緩衝區。

影響:增加這值加速orderby或groupby操作。不過該引數對應的分配記憶體是每連線獨佔的,如果有100個連線,那麼實際分配的總共排序緩衝區大小為100×sort_buffer_size。

建議:一般設定為2m觀察變化再調整。

read_buffer_size

含義:順序查詢操作所能使用的緩衝區大小。

影響:和sort_buffer_size一樣,該引數對應的分配記憶體也是每連線獨享。

建議:一般設定為2m再觀察變化。

read_rnd_buffer_size

含義:隨機查詢操作所能使用的緩衝區大小。

影響:每個執行緒獨享。

建議:一般設定為2m再觀察變化。

query_cache_type

含義:查詢緩衝型別。

影響:為1是使用緩衝,2是除非使用sql_cache才進行緩衝。對於緩衝而言,資料並不是實時的,有一定的延時。但是對於實時性要求不高的查詢短時間內多次執行,是不划算的,這個時候就需要快取。並且快取中是區分空格和大小寫的,如果大小寫不一致和空格不一致,也會認為是不同的sql

,不會利用到快取。雖然不設定查詢緩衝,有時可能帶來效能上的損失,但有一些sql

語句需要實時地查詢資料,或並不經常使用(可能一天就執行一兩次),這樣就需要把緩衝關了,可以採用臨時關閉的方法selectsql_no_cache。

建議:一般設定為1。

lmyisam類:

myisam_sort_buffer_size

myisam表發生變化時重新排序所需的緩衝。一般64m足矣。

linnodb類:

innodb_buffer_pool_size

對innodb的效率影響很大。因為innodb會把盡可能多的資料和索引快取在緩衝區,這個類似與oracle的bufferpool:如果只採用innodb,可以把這個引數調大一點,大約記憶體的70%左右。

當然,如果資料量不會暴增並且不是特別大,這個引數還是不要太大了,浪費空間。

innodb_additional_pool_size

對資料庫效能影響不是很大,至少記憶體足夠的機器上不會有什麼影響。

innodb_log_file_size

在高寫入負載尤其是資料集很大的時候,這個值非常重要,值越高效能越好,不過可能會增加資料恢復的時候。我設定為128m。

innodb_log_buffer_size

預設的設定在中等強度的寫入負載及短事物處理時,效能還可以。但是存在大量更新操作或者負載較大時,就要慢慢增加這個引數的值了。不過不要設定太大,會浪費記憶體。它每秒都會重新整理一次,所以不用設定超過1s所需的記憶體空間,16m足夠了。

innodb_flush_logs_at_trx_commit

這個引數對innodb及其重要,設定不好的話會比myisam慢1000倍!預設是1,這就是說每次更新事務都會被提交到磁碟,這是非常消耗資源的,硬碟和記憶體的速度是明顯數量級的差距。

設定為0是最快的,但是很不安全,全部在快取中,一掉電全沒了。

設定為1很不好,每次都去寫硬碟,沒有必要。

設定為2是比較好的,日誌不重新整理到磁碟上,只重新整理到作業系統快取上。然後每秒鐘寫快取。相對於現在資料庫每秒4k條左右的sql

,效能已經可以提高不少。

MySQL引數調優

l 通用類 key buffer size 含義 用於索引塊的緩衝區大小,增加它可得到更好處理的索引 對所有讀和多重寫 影響 對於myisam 表的影響不是很大,myisam 會使用系統的快取來儲存資料,所以大量使用 myisam 表的機器記憶體很快就會耗盡。但是,如果你將該值設得過大 例如,大於總...

mysql引數調優

l max connect errors max connect errors預設值為10,也即mysqld執行緒沒重新啟動過,一台物理伺服器只要連線 異常中斷累計超過10次,就再也無法連線上mysqld服務,為此建議大家設定此值至少大於等於10w 若異常中斷累計超過引數設定的值,有二種解決辦法,執...

mysql引數調優

優化之前我們需要知道什麼 業務相關的情況 mysql相關的配置 伺服器上需要關注那些 作業系統版本 是否為穩定版 cpu 網絡卡節電模式 建議資料庫應用的伺服器,關閉節電模式 伺服器numa設定 raid卡快取 磁碟排程策略 write back 回寫 宕機的話cache中資料,如果沒有刷入磁碟,可...