MySQL Cluster 5.1.6+ 支援將無索引欄位存放於磁碟,突破純記憶體限制。本文詳細解析磁碟資料物件、建立流程、儲存計算、效能調優與運維注意事項。
| 物件 | 說明 |
|---|---|
| Tablespace(表空間) | 其他磁碟物件的容器 |
| Undo Log File(Undo 日誌檔) | 儲存回滾資訊,用於交易復原 |
| Log File Group(日誌檔組) | 一或多個 Undo Log File 組成,指派給表空間 |
| Data File(資料檔) | 儲存磁碟表資料,直接指派給表空間 |
Undo Log File 和 Data File 是每個資料節點上的實體檔案,預設位於 DataDir/ndb_node_id_fs/。Tablespace 和 Log File Group 是邏輯物件,非實體檔案。
-- 1. 建立日誌檔組,指派 Undo Log File
CREATE LOGFILE GROUP lg1
ADD UNDOFILE 'undo1.log'
INITIAL_SIZE 64M
ENGINE=NDBCLUSTER;
-- 2. 建立表空間,指派日誌檔組與資料檔
CREATE TABLESPACE ts1
ADD DATAFILE 'data1.dat'
USE LOGFILE GROUP lg1
INITIAL_SIZE 256M
ENGINE=NDBCLUSTER;
-- 3. 使用表空間建立磁碟表
CREATE TABLE t1 (
id INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100),
c2 TEXT
) TABLESPACE ts1 STORAGE DISK
ENGINE=NDBCLUSTER;
DROP TABLE t1;
ALTER TABLESPACE ts1 DROP DATAFILE 'data1.dat' ENGINE=NDBCLUSTER;
DROP TABLESPACE ts1 ENGINE=NDBCLUSTER;
DROP LOGFILE GROUP lg1 ENGINE=NDBCLUSTER;
--initial 參數不會自動刪除磁碟資料檔| 適用 | 不適用/限制 |
|---|---|
| 大量歷史/日誌/歸檔資料,低頻存取 | 高頻熱點資料(記憶體更快) |
| 資料總量超過記憶體容量 | 所有索引欄位必須在記憶體 |
| 成本敏感,不想全上大記憶體 | 變長欄位按最大長度佔空間,可能浪費 |
| 需交易支援的大表 | TEXT/BLOB 只能前 256B 在記憶體 |
DiskPageBufferHitRatio:磁碟頁面緩衝命中率DiskPageBufferEntries:緩衝條目數DiskSyncCount:磁碟同步次數ndb__out.log 觀察磁碟 I/O 錯誤