(MariaDB/MySQL)MyISAM儲存引擎讀、寫操作的優先順序

駿馬金龍發表於2018-04-22

MariaDB/MySQL中使用表級鎖的儲存引擎(例如MyISAM、Aria(MariaDB對MyISAM引擎的改進,前身是MyISAM))在讀(select)、寫操作(insert、delete、update、replace)上有優先順序的概念。預設情況下,寫操作的優先順序高於讀操作。注:不適用於InnoDB儲存引擎。

以MyISAM為例。當有程式正在寫MyISAM表的時候,又有新的讀操作、寫操作出現,則會先執行完所有的寫操作,等寫完後才會讀表。實際上並非總是先執行完所有寫操作,因為有系統變數max_write_lock_count控制最大寫鎖數量,當這些數量的寫操作完成後會轉為執行讀操作。

所以,INSERT、LOAD DATA INFILE、UPDATE、REPLACE、DELETE語句都有LOW_PRIORITY關鍵字,用來降低對MyISAM儲存引擎的寫操作優先順序,使得MariaDB先執行完所有的讀操作後再執行寫操作。而SELECT語句有HIGH_PRIORITY關鍵字,用來提高讀操作的優先順序。除了這兩個關鍵字,還可以設定系統變數low_priority_updates=on來降低寫操作優先順序。

唯一需要注意的是,INSERT語句不僅有LOW_PRIORITY,也有HIGH_PRIORITY。當使用INSERT HIGH_PRIORITY語句時,表示禁用INSERT的併發插入行為。

相關文章