programing

마리아의 줄 위 자물쇠DB

testmans 2023. 9. 7. 21:35
반응형

마리아의 줄 위 자물쇠DB

여기 문제가 있습니다. 세션 1이 테이블 X를 업데이트하려고 하면 테이블이 잠깁니다.

내가 필요한 것은 세션 1이 업데이트하려는 행만 잠그는 것이고, 세션 2는 다른 행에 동시에 접근하거나 업데이트할 수 있습니다.

세션 1:update X set a=1994 where b =2 //I want to lock only row where b=2, not the whole table X

세션 2:update X set a=1951 where b =1 //I need it to work

PS:

  • 응용 프로그램의 코드에 접근할 수 없습니다. 데이터베이스에서 구성해야 합니다.
  • autocommit=1
  • 사용중입니다innodb_version: 5.5.35-MariaDB-33.0

mariadb의 innodb 구현이 mysql로 작동한다고 가정하면, mysql 매뉴얼의 InnoDB에서 섹션 15.7.3 Locks Set by Different SQL Statements by Different SQL Statements by mysql manual을 사용하여 수행해야 할 작업(empassis is mine)을 해결할 수 있습니다.

잠금 읽기, UPDATE 또는 DELETE는 일반적으로 SQL 문을 처리할 때 스캔되는 모든 인덱스 레코드에 레코드 잠금을 설정합니다.문장에 행을 제외하는 WHERE 조건이 있는지 여부는 중요하지 않습니다.InnoDB는 정확한 WHERE 조건을 기억하지 못하고 검색된 인덱스 범위만 알고 있습니다.

...

문에 적합한 인덱스가 없고 MySQL이 문을 처리하기 위해 전체 테이블을 스캔해야 하는 경우 테이블의 모든 행이 잠겨 다른 사용자가 테이블에 삽입하는 모든 것이 차단됩니다.쿼리가 불필요하게 많은 행을 검색하지 않도록 좋은 인덱스를 만드는 것이 중요합니다.

따라서 테이블에 적절한 인덱스를 만들어 해당 인덱스가 잠기지 않도록 해야 합니다.

언급URL : https://stackoverflow.com/questions/63632534/row-level-locks-in-mariadb

반응형