MySQL 採用基於優先級的調度機制,核心規則如下:
此策略確保數據修改的及時性,但可能導致高併發讀場景下的「讀饑餓」現象。
LOCK TABLES/UNLOCK TABLES 手動控制。MyISAM 支持「併發插入」:若表中無刪除操作或已執行 OPTIMIZE TABLE 整理碎片,新行僅追加至表尾,此時允許讀操作併發進行。
使用條件:
LOW_PRIORITY 修飾符。LOCK TABLES ... READ LOCAL(LOCAL 關鍵字僅鎖定現有行,不阻塞尾部追加)。| 修飾符 | 適用語句 | 效果 |
|---|---|---|
LOW_PRIORITY |
DELETE, INSERT, LOAD DATA, REPLACE, UPDATE | 降低寫優先級至讀操作以下,讀請求優先執行 |
HIGH_PRIORITY |
SELECT | 提升讀優先級,插隊執行(跳過等待的寫隊列) |
DELAYED |
INSERT, REPLACE | 將行放入「延遲插入」隊列,立即返回客戶端;待無讀操作時批量寫入 |
DELAYED 適用場景:日志寫入、非即時統計聚合等可容忍延遲的批量寫入。
| 存儲引擎 | 鎖粒度 | 併發性能 | 死鎖風險 |
|---|---|---|---|
| MyISAM / ISAM | 表級 | 低(高併發寫場景差) | 無 |
| BDB | 頁級 | 中等 | 有 |
| InnoDB | 行級 | 高(最佳併發) | 有 |
innodb_lock_wait_timeout。