innodb的鎖和高並發
阿新 • • 發佈:2018-04-24
table 是把 1.3 ID 讀寫 事務 bsp HA http
1 innodb的鎖
1.1 s鎖,即讀鎖,即share鎖
1.2 x鎖,即寫鎖,排他鎖
1.3 s鎖和x鎖之間的關系
多個讀鎖可以共存,但是讀鎖不可以和寫鎖共存。寫鎖和寫鎖不可以共存。
1.4 間隙鎖
就是對一段數據加鎖,比如id大於3小於10的行加鎖,防止插入id=4的數據。
2 innodb高並發
適合於讀多寫少的高並發,所以要想獲取高並發,就要讀寫分離。
3 死鎖
事務A有了1要2,事務B有了2要1。
4 innodb的三種行鎖
第一,record lock
單個行上的鎖。
第二,gap lock
間隙上的鎖,不包括行本身,解決幻讀。
第三,next lock
包括間隙和行本身。
5 鎖是附加在sql語句中的,並不需要顯示設置
快照讀,不需要加鎖:
select * from xxx-table where a = 1;
當前讀
select * from xxx for update;
insert into xxx-table values(xxx);
這些需要加排他鎖。
6 所謂的兩階段鎖
就是把鎖操作分成加鎖階段和解鎖階段。
參考:
http://hedengcheng.com/?p=771
鎖是mysql中最難的,加什麽鎖,跟事務的隔離級別,什麽索引等都有關系。
innodb的鎖和高並發