MySQL引數調優

2021-06-13 07:11:55 字數 3734 閱讀 1851

通用類:

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 含義

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

:增加這值加速order by

或group by

操作。不過該引數對應的分配記憶體是每連線獨佔的,如果有

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語句需要實時地查詢資料,或並不經常使用

(可能一天就執行一兩次

),這樣就需要把緩衝關了,可以採用臨時關閉的方法

select sql_no_cache。

建議:一般設定為1。

l myisam類:

myisam_sort_buffer_size

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

64m足矣。

l innodb類:

innodb_buffer_pool_size

對innodb

的效率影響很大。因為

innodb

會把盡可能多的資料和索引快取在緩衝區,這個類似與

oracle

的buffer pool

:如果只採用

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

mysql引數調優

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

MySQL引數調優

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