MariaDB寫入效能的可能瓶頸
MariaDB寫入效能的可能瓶頸
停用索引與外鍵檢查
鍵值(如Primary Key)與外部索引在寫入時的檢查也會影響大幅影響寫入的效能,例如很大的表格與多欄位的Primary Key時,每次插入時的檢查就會非常影響效能。
以下為關閉的方式
ALTER TABLE `個股券商分點進出統計` DISABLE KEYS;
SET FOREIGN_KEY_CHECKS = 0;
以下為寫入後開啟
ALTER TABLE `個股券商分點進出統計` DISABLE KEYS;
SET FOREIGN_KEY_CHECKS = 0;
但如果權限不足還是無法關掉,也可以使用INSERT IGNORE
放大max_allowed_packet
目前的預設大小為1MB,以下為修改為16MB的範例。
這個設定值是指每條連接會預留這個記憶體使用空間。
查詢目前的設定值
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
以下是系統的回應
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 2097152 |
+--------------------+---------+
這個回應指的是目前的記憶體空間預留約2MB
套用新的設定值
透過以下指令來設定新的設定
mysql -u root -p -e "SET GLOBAL max_allowed_packet=8388608;"
8M:8388608
16M:16777216
32M:33554432
64M:67108864
128M:134217728
256M:268435456
512M:536870912
1G:1073741824
其他
- 只有新建立的連線才會用到你修改後的新數值
當你設定max_allowed_packet
時,這個變數對新建立的連線會立即生效,但已經存在的連線在連線建立時就決定了自己的max_allowed_packet
大小。
關於效能
以下是小助理的回答
項目 | 對效能影響 | 說明 |
---|---|---|
max_allowed_packet | ❗ 間接相關(穩定性) | 限制單次傳送的資料大小,過小會導致大筆 INSERT/Large BLOB 無法執行,但它不是效能瓶頸 |
關閉 PRIMARY / UNIQUE KEY 驗證 | ✅ 顯著提升 | 大量資料塞入時,每筆都會比對索引 → 關掉能避免頻繁索引重建與查詢 |
關閉 FOREIGN KEY 檢查 | ✅✅ 非常顯著 | 外鍵需做關聯表查詢驗證 → 關掉後插入效率倍增,尤其是 InnoDB 引擎 |