在高效能環境中,正確的記憶體分配方式對 MySQL 的運行有著顯著影響。Linux 系統中預設使用的記憶體分配器(glibc-malloc)在高併發環境下表現不佳,因此,我們可以選擇其他更高效的記憶體分配器來提升效能。本文將介紹如何切換到其他記憶體分配器,並展示具體操作步驟。

1. 為什麼選擇正確的記憶體分配器很重要?

Linux 發行版中預設的記憶體分配器是 glibc-malloc,然而在高併發的 MySQL 環境下,glibc-malloc 會出現效能瓶頸。因此,避免使用 glibc-malloc 是一個常見的優化策略。

幸運的是,我們有兩個更好的選擇:

  • jemalloc:效能相對較佳,但 RAM 管理效率稍低。
  • tcmalloc:推薦選擇,具有更好的整體效能和管理能力。

2. 安裝與配置 tcmalloc

安裝 tcmalloc

首先,我們需要安裝 tcmalloc,這可以通過以下命令來完成:

sudo yum -y install gperftools-libs

這將安裝與 tcmalloc 相關的庫,並為後續配置做好準備。

配置 systemd 服務檔

安裝完成後,我們需要為 MySQL 配置 systemd 來使用 tcmalloc 作為記憶體分配器。以下是步驟:

  1. 使用編輯器編輯 MySQL 的 systemd 設定檔:

    sudo EDITOR=vi systemctl edit mysqld
  2. Service 區塊中添加以下環境變數設定,以啟用 tcmalloc

    [Service]
    Environment="LD_PRELOAD=/usr/lib64/libtcmalloc_minimal.so.4"

這樣可以確保 MySQL 在啟動時使用 tcmalloc 進行記憶體分配。

重載並重啟 MySQL

配置完成後,我們需要重載服務並重新啟動 MySQL 以應用新的記憶體分配器:

sudo systemctl daemon-reload
sudo systemctl restart mysqld

這將使 MySQL 使用新的記憶體分配器進行運行,從而提升系統效能。

3. jemalloc 與 tcmalloc 的比較

在選擇記憶體分配器時,我們需要根據實際的運行環境進行選擇。以下是 jemalloc 和 tcmalloc 的簡單比較:

  • jemalloc:適合需要極高效能但不太關注記憶體管理的場景。它在處理大量碎片化記憶體需求時有不錯的表現,但對於 RAM 管理來說可能不是最佳選擇。
  • tcmalloc:更推薦的選擇,尤其是在高併發環境下。它在效能和記憶體管理方面有更好的平衡,因此在大多數情況下是較佳的選擇。

結論

為了提升 MySQL 的效能,正確選擇記憶體分配器至關重要。在高併發的環境下,預設的 glibc-malloc 表現不佳,我們可以通過安裝並配置 tcmalloc 或 jemalloc 來獲得更好的效能。具體選擇取決於應用場景,但在大多數情況下,tcmalloc 是推薦的選擇。



按讚的人:

共有 0 則留言


大家好,我是Hank,一名全端工程師(Full Stack Engineer),專注於網路應用程式技術,包括但不限於APP、網站及LINE官方帳號的應用。過去12年都在新創公司擔任技術長與合夥人,目前是一位自由接案者,希望拓展更多可能性。同時我也是一個樂團的鼓手,擅長打爵士鼓,如果有玩音樂的朋友,歡迎互相交流。謝謝大家!