首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Cluster 磁碟資料表:架構、建立與效能調優

     編輯:MySQL 資料庫相關知識

MySQL Cluster 磁碟資料表:架構、建立與效能調優

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;

四、效能調優關鍵:分離 Undo Log 與 Data File

  • 將 Undo Log File 放在高速 SSD/RAID 10(循序寫入密集)
  • 將 Data File 放在大容量 SAS/SSD(隨機讀寫)
  • 透過符號連結實現不同檔案系統分離

五、儲存空間計算規則

  1. 變長欄位佔固定空間:磁碟表中每行的變長欄位按最大長度預分配空間
  2. TEXT/BLOB 前 256 字節在記憶體,超過部分存磁碟
  3. 每行 8 字節指標:記憶體中保留 8 字節指向磁碟資料。若磁碟資料 < 8 字節,不如全存記憶體
  4. 索引欄位仍在記憶體:只有無索引的欄位可存磁碟

六、資料節點重啟注意事項

  • --initial 參數不會自動刪除磁碟資料檔
  • 重啟前必須手動刪除舊的 Data File 和 Undo Log File
  • 否則舊資料殘留導致啟動失敗或資料不一致

七、適用場景與限制

適用不適用/限制
大量歷史/日誌/歸檔資料,低頻存取高頻熱點資料(記憶體更快)
資料總量超過記憶體容量所有索引欄位必須在記憶體
成本敏感,不想全上大記憶體變長欄位按最大長度佔空間,可能浪費
需交易支援的大表TEXT/BLOB 只能前 256B 在記憶體

八、監控指標

  • DiskPageBufferHitRatio:磁碟頁面緩衝命中率
  • DiskPageBufferEntries:緩衝條目數
  • DiskSyncCount:磁碟同步次數
  • 資料節點日誌 ndb__out.log 觀察磁碟 I/O 錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved