![限制 tmpdir 的大小](https://rvso.com/image/1417411/%E9%99%90%E5%88%B6%20tmpdir%20%E7%9A%84%E5%A4%A7%E5%B0%8F.png)
我需要限制 MySQL tmpdir 的磁碟使用量,這樣它就不會「吃掉」所有可用磁碟空間。大約有 30G 可用,但我看到 mysqld 使用所有這些來建立臨時表。
我的第一個方法是實現磁碟配額,但我遇到了問題,因為我不知道如何在磁碟使用時設定配額。它可能可以在啟動時在 init 腳本中完成,但我不知道這是否是一個好主意。
有什麼建議麼?在這種情況下,最佳實踐是什麼?
作業系統是RedHat
uname -a
Linux www.myservername.com 2.6.18-194.17.1.el5 #1 SMP Mon Sep 20 07:12:06 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
mysql --version
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (x86_64) using readline 5.1
答案1
你確定嗎? AFAIK 只要查詢需要,臨時表就存在,但之後它們就會消失。如果您有很多需要 30GB 臨時表的活動查詢,這會給您帶來比使用所有可用空間更多的麻煩(我的意思是磁碟 IO 等)
您仍然可以使用 ulimit,但這至少需要重新啟動服務,所以我不確定這是否比設定配額更好。
答案2
如果您有 LVM,請建立所需大小的單獨分割區掛載。您可以使用 mysqld 的 --tmpdir 選項。
檢查一下。http://dev.mysql.com/doc/refman/5.0/en/temporary-files.html
答案3
在虛擬機器中進行多次嘗試後,我認為對於生產環境而言,強制啟用配額 (-m) 的風險太大。這個問題只發生過一次,因為我正在處理這個基礎設施,並懷疑它一定與伺服器中創建一個巨大的臨時表的狡猾查詢有關。
感謝大家的建議。