DB type이 MyISAM Type이면 insert, update등을 할때마다 LOCK이 발생.
myisam의 경우 insert, update시 자동 lock이 되므로 select되는 부분만 read lock을 걸어줘도 충분.
(데이터 무결성이 정확히 보장되어야 한다면 “스토리지 엔진을 InnorDB를 쓰고 트랜잭션을 사용”도 참고)
mysql의 기본 테이블 타입인 myisam의 table 단위의 lock과,
oracle, ms-sql의 row 단위 lock의 장단점.
* table단위 lock은 쓰기작업시 table 전체를 잠그기 때문에
다른사람이 그 table에 접근하기 위해 대기를 해야하는것.
* row단위 lock은 해당 row를 제외한 다른 row 들도 쓰기, 읽기가 가능.
* row단위의 lock은 table단위 lock보다 어떤 row가 어떤 락 상태인지 파악하므로
리소스를 더 쓸 수 있으며, 그에따른 오버헤드도 발생할 수 있다.
기본적인 Lock의 개념
* Lock설정은 특정 Table을 사용하고 있는 상황에서 다른 접속자의 접근 차단하는 기능을 한다.
* Read Lock을 걸면 다른 사용자는 해당 Table에 읽기만 할 수 있다.
* Write Lock을 걸면 다른 사용자는 Table에 전혀 접근 할 수 없다.
LOCK TABLES tab_name READ
현재 client 이외의 client들은 tab_name이란 테이블에 READ를 못한다는 즉, SELECT를 못한다는 것.
LOCK TABLES tab_name WRITE
현재 client 만이 WRITE 즉, INSERT, DELETE 등을 할 수 있다는 것.
WRITE Lock을 걸면, 자동으로 READ lock 까지 걸린다.
Example
lock tables AAA write;
insert …
unlock tables;
댓글 없음:
댓글 쓰기