다음 열쇠 자물쇠 어디 갔지?
2805 단어 MySQL
원래 다음 키록은요.
InnoDB의 행 잠금은 다음 키 잠금을 사용합니다.읽어들일 때 색인 검색을 위해 다음 키 잠금을 사용하기 때문에 클리어런스 잠금이 발생할 경우 가상 지시선을 방지하기 위해 이전 클리어런스가 항상 잠깁니다.고유한 색인이 있는 피쳐 값을 읽어들일 때는 클리어런스 잠금이 필요하지 않지만 주파수 영역 읽어들일 때는 클리어런스 잠금이 필요합니다.
고유 값 검색에는 클리어런스 잠금이 존재하지 않아야 하지만 존재하지 않는 줄을 읽으려면 배타적·공유 잠금이 아니라 클리어런스 잠금이 필요합니다.동시에 다음 열쇠 자물쇠 때문에 제품 걸어놓기INSERT에서 id=19로 이동할 수 없습니다.
mysql> select * from products where product_id = 18 for update; #Tx1
Empty set (0.00 sec)
mysql> insert into products values (19, 'line', 200000); #Tx2
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
가격역 검색 조건에 따라 무한대 잠금도 있다mysql> select * from products where product_id > 20 for update; #Tx1
+------------+--------------+--------+
| product_id | product_name | price |
+------------+--------------+--------+
| 21 | line | 200000 |
+------------+--------------+--------+
1 row in set (0.00 sec)
mysql> insert into products values (37, 'line', 200000); #Tx2
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
다음 키가 잠긴 잠금 범위
다음 줄과 다음 줄은 색인을 스캔할 때의 방향에서 보아야 하며, 표 다음 줄이 아니라 색인을 스캔할 때의 방향에서 보아야 한다.따라서 제품id<15 등 검색 조건의 경우 색인에서 15까지 한 번 스캔한 후 15 이하 방향으로 스캔하기 때문에 16, 10 등에 잠금이 걸릴 것으로 예상됩니다참고 자료 또한 다음 키가 잠긴 범위는 색인을 스캔할 때 조건 값 뒤에 존재하는 값까지 간극이 잠긴 것으로 추정할 수 있다.(product id<=15의 조건에서 15의 다음 키가 20인 경우 20이 다음 키에 잠긴 이미지)
다음 쿼리에서다음 버튼은 id=12에 잠겨 있습니다.이때 인덱스에서 주변 줄을 한데 모아 Tx2 INSERT와 경쟁한다.
mysql> select * from products where product_id <= 12 for update; #Tx1
+------------+--------------+-------+
| product_id | product_name | price |
+------------+--------------+-------+
| 1 | macbook pro | 150 |
| 2 | iphone 5 | 150 |
| 3 | iPad | 150 |
| 4 | NULL | 1000 |
| 5 | sample | 150 |
| 6 | sasa | 150 |
| 7 | sasa | 150 |
| 8 | thinkpad | 150 |
| 9 | lenovo | 150 |
| 10 | eeee | 150 |
| 11 | fff | 100 |
| 12 | fff | 800 |
+------------+--------------+-------+
12 rows in set (0.00 sec)
mysql> insert into products values (13, 'fff', 800); #Tx2
#待機状態
여러 실험을 거쳐 얻어지는 경향이어서 정답이라고 할 수는 없지만 참고로 제공한다.나는 나도 각양각색의 것을 시도할 수 있다고 생각한다.
Reference
이 문제에 관하여(다음 열쇠 자물쇠 어디 갔지?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mizzwithliam/items/3d2d92c74e81c80b0207텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)