程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL服務優化參數設置參考

MySQL服務優化參數設置參考

編輯:MySQL綜合教程

MySQL服務優化參數設置參考   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   含義:為每個需要進行排序的線程分配該大小的一個緩沖區。   影響:增加這值加速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,性能已經可以提高不少。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved