《高性能MySQL》筆記 - MySQL 鎖的基本類型

MySQL 主要在兩個層面上實現併發控制:服務器層和存儲引擎層。

當讀寫有衝突的時候,通常對於MySQL來講,是進行鎖表操做的。安全

讀寫鎖

讀鎖:讀鎖是共享的,多個用戶同一時刻讀取同一資源,他們以前互不影響。服務器

寫鎖:寫鎖則是排他的,也就是說一個寫鎖會阻塞其餘的寫鎖和讀鎖,這是出於安全策略的考慮,只有這樣,才能確保在給定的時間裏,只有一個用戶能執行寫入,並防止其餘用戶讀取正在寫入的同一資源。併發

鎖粒度

一種提升共享資源的併發性的方式就是讓鎖定的對象更有選擇性。儘可能只鎖定須要修改的部分數據,而不是全部資源。更加理想的方式是,只對會修改的數據片進行精確的鎖定。任什麼時候候,在給定的資源上,鎖定的數據量越少,則系統的併發程度越高,只要相互之間不發生衝突便可。性能

可是,全部的鎖都是須要消耗資源的。鎖的各類操做,包括得到鎖,檢查鎖是否已經解除,釋放鎖等,都會增長系統的開銷。對象

這裏咱們能夠意識到:所謂的鎖策略,是在鎖的開銷和數據的安全之間尋求平衡,這種平衡會影響到性能。資源

表鎖

表鎖是MySQL中的基本策略,而且是開心最小的策略。當一個用戶在對錶進行操做(CUD)前,須要先得到寫鎖,這會阻塞其餘用戶對該表的全部操做。只有沒有寫鎖時,其餘讀取用戶才能得到讀鎖,讀鎖之間互不阻塞。數據

行鎖

行級鎖能夠最大程度的支持併發處理(同時也帶來了最大的鎖開銷)。時間

相關文章
相關標籤/搜索