2011-11-04 86 views
5

我有一個漂亮的香草mysql 5.1安裝程序,我正試圖調整它。我發現這個handy scriptmysql調優變量 - 當前&默認值

它提出了以下建議:

query_cache_limit (> 1M, or use smaller result sets) 
query_cache_size (> 16M) 
join_buffer_size (> 128.0K, or always use indexes with joins) 
table_cache (> 64) 
innodb_buffer_pool_size (>= 14G) 

在對這些意味着什麼讀了什麼,他們目前被設置,我發現我可以運行「中mysqladmin變量」

我現在的值是:

query_cache_limit      | 1048576 
query_cache_size      | 16777216 
join_buffer_size      | 131072  
innodb_buffer_pool_size     | 8388608 

我如何閱讀這些,他們是字節?那麼1M,16M,13M和8M?

我的箱子只有4G的拉姆,在正常的日子裏只有幾百megs沒有記憶。我應該遵循這些建議,並做到:

#innodb_buffer_pool_size = 15G 
#table_cache = 128 
#join_buffer_size = 32M 
#query_cache_size = 64M 
#query_cache_limit = 2M 

林由15G迷惑,這是一個磁盤空間的東西,而不是記憶的事情嗎?如果是這樣,那麼這些建議不是很好嗎?

我應該爲我的盒子獲得更多的記憶嗎?我的數據庫大小是34Gigs,我使用所有innodb,我有71個表,其中4個是巨大的,其餘的都很小。我一直在考慮將重要版本遷移到SOLR並從那裏進行所有查詢,但是想要了解我可以通過基本調整做些什麼。

感謝 喬爾

+0

我發現這是一個有用的閱讀http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/ –

+0

這可能會更好問在serverfault.com –

+0

我讀了perfblog,但仍然困惑,我認爲它假定你已經知道那個變量是什麼和做什麼。 – Joelio

回答

0

你不應該設置你的InnoDB緩衝池比你的可用內存更高。該腳本可能建議根據您的表格中的記錄數量和它們的物理尺寸。 Innodb的性能是基於內存的,如果它能適應內存中的索引,性能會迅速下降。所以設置innodb_buffer_pool_size高几乎總是很好的建議。

Innodb不是所有涉及到mysql的最佳表類型。非常大的表格通常有很多插入,但很少讀取和更新(即日誌記錄)與MyISAM表格相比更好。 Innodb的非常活躍的表格(插入,更新,刪除,選擇)效果更好。這個建議可能會引發一場激烈的戰爭,這是一般性建議。

但這就是說,沒有腳本會告訴你你的設置應該是什麼。它只能成爲一個最好的客人。最佳設置基於您的數據訪問模式。你真的必須瞭解所有變量是什麼。除了手冊之外,mysqlperformanceblog.com是瞭解有關mysql的絕佳場所。

在mysql中,使用「show variables」和「show status」來查看發生了什麼。你也可以運行「顯示innodb狀態」,但是如果你不知道變量是什麼,你可能不會理解那個輸出。

+0

謝謝,這似乎是一些很好的建議,我升級了我的VM並增加了更多的內存,運行我有大約8個演出免費,所以我設置innodb_buffer_pool_size爲4G。當我啓動mysql時,我預計它會使用這個4G內存,但我沒有看到它。現在,在使用68m居民和331m互換後,整夜運行大批量作業。我做錯什麼了嗎? – Joelio

+0

我讀了你的「show variables」並試過了,mysql仍然顯示innodb_buffer_pool_size的舊號碼......不知道我做錯了什麼,我把這些變量添加到my.cnf並重新啓動了mysql .. – Joelio

+0

好吧,我想它出來了,我把變量放在my.cnf的錯誤部分,感謝您檢查show變量的想法。 – Joelio