Mysql
是否可以為 OpenVZ 禁用或調整文件系統記憶體共享?
對於基於容器的虛擬化實現的 OpenVZ,似乎主機和所有來賓共享文件系統記憶體。當談到虛擬化時,這聽起來很矛盾,但這實際上是 OpenVZ 的一個特性。
這也很有意義。因為只有一個核心在執行,所以可以從共享記憶體中相同的文件系統記憶體頁面中受益。雖然這聽起來很有益,但我認為這裡的設置實際上會因此而影響性能。原因如下:我的機器實際上並沒有共享磁碟上的任何文件,所以我無法從中受益。
幾台 OpenVZ 機器正在執行帶有 MyISAM 表的 MySQL。MyISAM 依賴於系統的文件系統記憶體來記憶體數據文件,這與 InnoDB 的緩衝池不同。此外,已知一些虛擬機在主機中的同一文件系統上執行繁重的大型 I/O 操作。出於測試目的,我
cat *.MYD > /dev/null
在一台機器上執行了一些大型數據庫,我看到另一台機器上的文件系統記憶體降低,由htop
. 這實質上會刷新來賓 (FIFO) 中所有有用的文件系統記憶體,因此它會刷新來賓中的 MySQL 記憶體。直到這裡,我的分析是否正確?現在使用者抱怨 MySQL 很慢。它是。一些簡單的
SELECT
查詢在磁碟 I/O 被其他機器大量使用時需要幾秒鐘。所以,簡單地說:
有沒有辦法避免文件系統記憶體被基於容器的虛擬化中的其他虛擬機清除?
而不是遷移到 KVM 或 InnoDB(見下文),我可能會錯過一個混淆選項。
一些想法:
- 選擇用於在核心中刷新文件系統記憶體的算法。(可能?如何?)
- 為單個 VM 保留一定數量的頁面。(對於讀取的文件系統記憶體類型的頁面似乎沒有選項
man vzctl
)- 在另一個文件系統上執行 MySQL 會讓我到任何地方嗎?
- 升級機器中的 RAM(如 @michael-hampton 建議的那樣)。雖然是一個便宜的選擇,但它可能無法解決它。升級 +8GB 與一夜之間的磁碟 I/O 操作量不成比例,比如幾十 GB。
如果沒有,我認為我的選擇是:
- 將 KVM 用於執行 MySQL-MyISAM 的 VM。
balloon
KVM 實際上將記憶體分配給 VM,除非使用驅動程序,否則不允許換出記憶體。- 轉移到 InnoDB 並調整緩衝池、臟頁等。從長遠來看,這被認為是“不錯的”,因為並非每個負責系統管理的人都了解 InnoDB。
- 歡迎提出更多建議。
系統軟體:Proxmox(現在是 1.9,可以升級到 2.x)。為 VM 分配的一個大 LV。
除了您已有的想法之外,您還可以添加更多 RAM,儘管這似乎是一種昂貴的短期創可貼。
從長遠來看,您最好的選擇可能是離開 OpenVZ。