InnoDB 預設資料頁(page size)為 16KB,屬硬性編譯常數,無法透過參數動態調整。若業務從 Oracle/SQL Server 遷移後發現 I/O 明顯增長,可考慮修改源碼重新編譯 MySQL 以調整頁大小(4K/8K/16K/32K/64K)。
以 MySQL 5.1.38 為例,檔案:storage/innobase/include/univ.i
/* The universal page size of the database */ #define UNIV_PAGE_SIZE (2 * 8192) /* 16KB,必須為 2 的冪次 */ /* The 2-logarithm of UNIV_PAGE_SIZE */ #define UNIV_PAGE_SIZE_SHIFT 14 /* log2(16384) = 14 */
| 目標頁大小 | UNIV_PAGE_SIZE | UNIV_PAGE_SIZE_SHIFT |
|---|---|---|
| 4KB | 4096 | 12 |
| 8KB | 8192 | 13 |
| 16KB (預設) | 16384 | 14 |
| 32KB | 32768 | 15 |
| 64KB | 65536 | 16 |
/* The universal page size of the database */ #define UNIV_PAGE_SIZE 8192 /* The 2-logarithm of UNIV_PAGE_SIZE */ #define UNIV_PAGE_SIZE_SHIFT 13
univ.i 後,執行完整編譯流程(./configure && make && make install)。mysql_install_db),舊資料無法直接相容,需邏輯備份匯入。SHOW VARIABLES LIKE 'innodb_page_size'; 驗證生效。MySQL 5.6+ 引入 innodb_page_size 參數(僅限實例初始化時指定),仍屬實驗特性。生產環境建議優先嘗試:調整 innodb_buffer_pool_size、優化索引設計、使用壓縮表(ROW_FORMAT=COMPRESSED)、或評估 TokuDB/Percona Server 等替代引擎。