我有一台運行 MySQL + Apache 的專用伺服器。我運行一個聊天腳本,每 3 秒輪詢一次。昨晚我的 MySQL 伺服器因為負載而死掉了。我想知道如何最大化我的 MySQL 線程以及 Apache 線程。
有人可以向我指出可以幫助我實現相同目標的網址嗎?
感謝您的時間。
答案1
MySQL 效能資訊的規範位置是MySQL 效能部落格。還有高效能MySQL傑里米·扎沃德尼的書。
您可能希望在應用程式中查看某種形式的連接池,它將重複使用現有的資料庫連接,而不是為每個新會話建立一個新連接。這將減少開啟新 TCP 連線和 MySQL 進行的任何處理的開銷。它還應該減少 MySQL 正在運行的空閒連接數,因為每個連接都需要一定量的記憶體才能存在。
為了大幅減少資料庫負載,您可以做的另一件事是整合 memcached。 Memcached 是記憶體中分散式鍵值儲存;就像網路附加的哈希圖一樣。您將修改您的應用程式以輪詢 memcached,如果沒有數據,則檢查資料庫。當您變更資料時,會將其寫入資料庫並使memcached中的資料失效。這意味著您將輪詢速度明顯更快的 memcached,而不是 MySQL。
一旦你實現了這些功能,並且只有當你實現了之後,你才可以開始考慮調整 MySQL 參數。如果您不知道自己在做什麼,那麼很有可能把事情搞砸,最終導致資料庫比以前慢。在你嘗試這個之前,我至少會先讀 MySQL Performance 書。
如果您能夠花更多的錢,第一個改進是將資料庫拆分到單獨的伺服器上。如果這還不夠,您可以開始考慮使用主從複製設置,其中寫入操作發送到主伺服器,但讀取操作分佈在主伺服器和從伺服器之間。這對於相當常見的讀取繁重的工作負載特別有效。