2011-01-20 57 views
2

我們有一個專用的MySQL服務器,其上有大約2000個小型數據庫。 (這是一個Drupal多站點安裝 - 每個數據庫都是一個站點)。使用MySQL數據庫很慢

當您第一次加載每個網站時,最多可能需要30秒才能返回第一頁。之後,頁面以可接受的速度返回。我已經通過堆棧追溯到MySQL。另外,當你連接命令行mysql客戶端時,連接速度很快,然後「使用dbname」很慢,然後查詢速度很快。

我的預感是,這是由於服務器配置不正確,未使用的dbs掉出緩存或類似的東西,但我不確定哪種緩存或設置適用於這種情況。

我試過的一件事是innodb_buffer_pool大小。這被設置爲默認的8M。我嘗試將它提高到512MB(該機器具有〜2GB的RAM,並且額外的RAM是可用的),因爲我所做的讀數表明更多應該提供更好的性能,但是這使得系統運行更慢,所以現在已經回到8MB。

感謝您的閱讀。

+0

您是使用單個用戶訪問所有數據庫還是使用多個用戶? – RJD22 2011-01-20 12:23:16

+0

你有嘗試過8到512MB之間的地方嗎?它可能是一個輕微的折衷 – 2011-01-20 12:23:17

+0

`2000數據庫`,`使用dbname`速度慢 - 您是否對所有2000數據庫使用單用戶? – ajreal 2011-01-20 12:31:03

回答

4

對於2000數據庫,您應該調整table cache設置。此緩存中肯定有很多緩存未命中。

嘗試使用mysqltunner和/或tunning_primer.sh獲取有關設置潛在問題的其他信息。

現在,Drupal使數據庫密集型工作,檢查你的Drupal安裝,你可能會產生很多(太多)的請求。

關於innodb_buffer_pool_size,你肯定有很多分頁緩存未命中帶一個小緩衝區(8Mb)。理想的大小是當你所有的數據和索引大小都可以適應這個緩衝區,並且有2000個數據庫時......當然它的大小非常小,但是對於你來說很難成長。如果MySQL需要太多的內存,你的apache將無法獲得足夠的內存,那麼調整一個MySQL服務器是很困難的。

解決辦法是:

  • 的支票,你不DNS名稱,但與IP
    做出了連接(在的情況下)
  • 購買更多的RAM
  • 集MySQL的一個單獨的服務器
  • 調整您的設置

對於Drupal,嘗試設置會話不在t他的數據庫,但在memcache(你需要內存,但它會更好的MySQL),可用的模塊。如果你有Drupal 7,你甚至可以嘗試在memcache而不是MySQL中設置一些緩存表(不要使用大緩存表)。

編輯:最後一件事,我希望你沒有修改的Drupal使用持久的數據庫CONNEXIONS,一些模塊允許(或有一箇舊的Drupal 5,其自動嘗試做到這一點)。用2000數據庫你會殺死你的服務器。嘗試檢查mysql錯誤日誌中「太多連接」錯誤。

0

你好Rupertj當我讀到你正在使用表類型innodb,對不對?

innodb表比myisam錶慢一點,但我不認爲這是一個主要問題,正如你所說,你使用的是drupal系統,是一種多站點,就像一個文字按下系統?

如果是的話,對於這種系統,每次安裝插件或其他東西時都會感到抱歉,它會將數據庫擴展到表格中,當然還會在數據中增長......並且可能會變得非常慢。我自己體驗的不是使用Drupal,而是使用Word按下博客系統,這對我和我的朋友來說是一場噩夢。

從那時起,我放棄了這個項目...而我唯一給你的建議是,不要在你的drupal系統中安裝很多插件。

我希望這個建議可以幫助你,因爲它在文字記錄方面幫了我很大的忙。

0

這聽起來像Drupal中的緩存問題,而不是MYSQL。看起來有幾個非常重的查詢,或者很多很小的查詢,或者兩者都是錘擊數據庫服務器。一旦完成,Drupal緩存在幾個緩存層中。之後,只有一個(或很少)查詢是構建頁面所需的全部。在一開始就慢,在那之後快。

0

您將不得不對其進行配置以確定原因,但表緩存看起來像是一個可能的嫌疑犯。

但是,您還應該注意持續性連接 - 絕對肯定應始終關閉(對所有人而言,不僅僅是您)。 Apache/PHP持久連接是一種悲觀,您和其他人通常可以不用。