【高性能Mysql】讀書筆記

讀寫鎖

讀寫鎖是爲了保證數據的一致性
讀鎖(共享鎖)
寫鎖(排他鎖)
鎖粒度:一種提高共享資源併發性的方式是讓鎖對象有選擇性,只要鎖定會修改的數據,鎖定的數據量越小併發性越大。Mysql不同存儲引擎的都可以實現自己的鎖策略和鎖粒度。
表鎖:對錶進行寫操作(insert,update,delete)時需要先獲得寫鎖,這樣會阻塞其他用戶對該表的讀寫操作。只有沒有寫鎖時,才能對錶進行讀操作。alter table就是使用的表鎖,而忽略存儲引擎自己方式實現的鎖。
行鎖:最大成都實現併發操作,同時帶來巨大的鎖消耗。(InnoDB,XtraDB)

事務

事務就是一組原子性的Sql查詢
語法:

START TRANSACTION;
sql...
COMMIT;

事務的4大特性ACID
原子性:最小單位
一致性:所有sql成功之後纔會commit
隔離性:未執行完事務對其他事務是不可見的
持久性:commit成功就是保存到數據庫

隔離級別

SQL標準中定義了4種隔離級別,較低級別的隔離通常可以執行更高的併發,系統的開銷也更低。

READ UNCOMMITTED:髒讀,不可重複讀,幻讀
READ COMMITTED:不可重複讀,幻讀
REPEATABLE READ:幻讀
SERIALIZABLE(可串行化):加鎖讀

死鎖

死鎖是指二個或多個事務對同意資源上相互佔用,並請求鎖定對方佔用的資源,導致的惡性循環現象。
數據庫系統實現了各種死鎖檢測和死鎖超時機制,越複雜的系統越能檢測到死鎖的循環依賴,並立即返回一個錯誤。雖然有效,但會導致非常慢的查詢。InnoDB目前處理死鎖的方法是,將持有最少行級鎖的事務進行回滾。
死鎖產生的原因:數據衝突,存儲引擎實現的方式導致。

Mysql中的事務

自動提交(AUTOCOMMIT):每一個sql默認就是一個事務
show VARIABLES like ‘AUTOCOMMIT’
ON代表啓用

在事務中混合使用事務型和非事務型的表(如InnoDB和MyISAM),會導致MyISAM表無法回滾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章