Mysql

讓 MySQL 記憶體儲存引擎利用 512 GB 的 RAM 是否可行?

  • September 6, 2017

我正在考慮擴大規模而不是擴大規模。因此,我很想知道是否可以將 MySQL 記憶體儲存引擎用於 500+ GB 的數據庫,假設一個伺服器具有這種記憶體?我應該提到,對錶的查詢主要是臨時查詢。

我相信我發現會出現的一個問題是,對 MEMORY 表的查詢可能會導致創建臨時表。臨時表在轉換為 MyISAM 表之前具有使用最多4 GB RAM 的硬性限制。這當然會完全破壞性能。臨時表的記憶體限制可以通過將tempdir 設置為 ramdisk 來解決。

您預見到還有哪些其他類型的問題?

MEMORY 儲存引擎可以是福也可以是禍

  • 你打算儲存什麼

  • 您計劃多久執行一次 DML

  • 你留下多少記憶體

    • 數據庫記憶體(MyISAM 密鑰記憶體、InnoDB 緩衝池)
    • 記憶體
    • 作業系統操作

MEMORY 儲存引擎

  • 對 INSERT、UPDATE 和 DELETE 使用全表鎖定
  • 無法執行並發 INSERT
  • 預設使用雜湊索引而不是 BTREE 索引
  • 可以使用 BTREEs 索引,但必須在 CREATE TABLE 時顯式指定
  • 沒有交易支持
  • 單行查詢非常適合 MEMORY 表,尤其是使用 HASH 索引 - 除非您明確使用 BTREE(需要更多記憶體消耗),否則遠端查詢和順序訪問非常可怕

即使您在 RAM 中有數據,mysqld 也會始終訪問 .frm 文件以檢查作為參考點存在的表,因此總是會產生少量磁碟 I/O。按比例,對 MEMORY 儲存引擎表的大量訪問將具有明顯的磁碟 I/O。

我提出第二個答案而不是修改我的第一個答案,因為我認為這個答案本身就有優點。

為什麼不為它的硬碟創建一個具有約 600GB ramdisk 的 VM,並將 512GB 數據儲存載入到 ramdisk 中,然後您就可以將它視為普通 HDD 並且它永遠不會撞擊物理介質?

如果我有一台具有 2TB RAM 的機器,我會幫助你找出正確的語義,但我沒有。然而,我確實有學術界的朋友每天都在研究這類問題。我只是沒有那種硬體可供我使用;)

但這將解決您所有的速度問題

引用自:https://dba.stackexchange.com/questions/6156