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 引擎