
這個問題最初是在 stackoverflow.com 上提出的,但我被告知我可能會在這個網站上得到更好的答案...
很快我將為一個網站非常繁忙的客戶設定一個網頁伺服器。他有一個論壇(運行在簡單機器論壇用 PHP 編寫的 SMF)實際上無法更改。我想將其移至單獨的虛擬專用伺服器,因為它非常繁忙,每天約有 40,000 次點擊,每天有 400 多個貼文。對於 SMF 的版本(最好、最穩定的生產版本 1.1),它需要 MySQL 才能運行,所以我無法將其更改為 PostgreSQL(我可能更喜歡)
當在 Ubuntu Server 10 LTS 上安裝 MySQL Server 時,我很想知道是否可以做些什麼來確保它是最高效的。我希望盡可能快地運行以減少資源並確保我們可以保持在伺服器的資源限制之下。使用虛擬專用伺服器,我可以選擇快速切換資源,但我想確保 MySQL 伺服器的設定盡可能高效,因為我不是這方面的專家。
我正在做一些研究,發現一篇文章建議這樣做以確保其高效:
# open mysql conf and set these settings:
# key_buffer = 16k
# max_allowed_packet = 1M
# thread_stack = 64K
nano /etc/mysql/my.cnf
# restart mysql
/etc/init.d/mysql restart
誰能給我一些關於這個主題的技巧、提示、連結和知識?
答案1
首先; Janne 是正確的:每天 40k 讀取和 400 寫入是零負載。幾乎任何類型的設定都絕對不會出現效能缺陷。
我正在使用 SMF 的 VPS 上運行類似的設定。我發現它從快取機制中受益匪淺,因為它利用了 APC。
我的設定(我推薦給你):
- nginx
- MySQL(大多數 SMF 表的 InnoDB 轉換)
- PHP-FPM(非常可擴展,如果你告訴它以很少的生成啟動,則可以使用很少的資源)
- APC快取
答案2
首先,每天 40000 次點擊和每天 400 多個貼文聽起來不會讓 MySQL 出汗。如果一天中分佈的話,每天 40 000 次點擊大約相當於每秒 2 次點擊,而 400 多個帖子意味著每三分鐘就會有一個新帖子。
這還不算多。真的。
您沒有提到正在使用什麼儲存引擎。對於 MyISAM 表,您需要特別調整金鑰緩衝區和表緩存價值觀。使用 InnoDB 表innodb_buffer_pool_size是最重要的一個。
這金鑰緩衝區 = 16k在你的例子中聽起來很奇怪。 16 KB 的 key_buffer?沒辦法,至少要16M(兆位元組),或者如果你的伺服器有足夠的內存,那麼它可以更多。請注意,許多 MySQL 變數是聯繫特定值而不是全域值,因此如果您的伺服器負載意味著數千個並發 MySQL 連接,那麼您需要調低這些值,但如果您通常只有少數連接但資料集很大,那麼您需要調高值。