什么是鎖
鎖機制是并發控制的需要,分為共享鎖和排他鎖(也叫讀鎖和寫鎖)。
讀鎖是相互不阻塞的,即多個客戶在同一時刻可以同時讀取同一個資源,而互不干擾。
寫鎖是排他的,會阻塞其他的寫鎖和讀鎖。
鎖粒度
鎖粒度,就是鎖的范圍。理想情況下,鎖的范圍越小越好,只對會修改的數據片進行精準的鎖定。即鎖定的數據量越少,則系統的并發程度越高,只要相互之間不發生沖突即可。
加鎖會消耗資源。
鎖策略
所謂的鎖策略,就是在鎖的開銷和數據的安全性之間尋求平衡,這種平衡當然也會影響性能。
每種 MySQL 存儲引擎都可以實現自己的鎖策略和鎖粒度。
表鎖
表鎖是 MySQL 中最基本的鎖策略,并且是開銷最小的策略。
盡管存儲引擎可以管理自己的鎖,MySQL 本身還是會使用各種有效地表鎖來實現不同的目的。例如,服務器會為諸如 ALTER TABLE
之類的語句使用表鎖,而忽略存儲引擎的鎖機制。
行級鎖
行級鎖可以最大程度地支持并發處理(同時也帶來了最大的鎖開銷)。
行級鎖只在存儲引擎層實現。
服務器層完全不了解存儲引擎中鎖的實現。