mysql db lock을 해결 하기mysql db lock을 해결 하기

Posted at 2010. 10. 7. 08:25 | Posted in DataBase
반응형
mysql db에 너무도 많은 db lock이 걸려서, 몇십분씩 시스템이 멈추고 했고
시스템이 멈추면 많은 사용자들이 페이지를 retry를 하기 때문에 순간적으로
엄청나게 과대한 트래픽이 발생하였구요.
 
hosting 업체의 엄중한 경고(?)속에 traffic을 줄이기 위한 첫번째 미션으로
db lock 없애기에 재도전을 했습니다. mysql의 db lock에 대해서 구글링을
그전에도 수없이 했지만, 어떤이는 mysql의 버그라고 하고... 답이 없더군요.
 
그러다가, mysql이 테이블을 열기 위해서 사용하는 file의 갯수에 대한 글을 읽고
도대체 몇개나 파일이 열리는가 확인을 했습니다. 그결과는 오아미갓~!!! 이었죠.
천개 이천개도 아니고 무려 77만 입니다. ㅠ..ㅠ...
 
phpmyadmin에서 아래 명령을 수행해 보세요. 
SHOW GLOBAL STATUS LIKE 'Opened_tables';
 
그래서, 어떻게 할까 고민을 하다가, 아래의 내용에 힌트를 얻어서
table_cache 옵션값을 파파팍~ 늘려 버렸다.
 
왜??? 나도 깊은 이유는 모른다.
 
아마도 max_connections가 10,000인데
너무나도 작은 수의 table_cache를 그냥 뒀기 때문인거 같다.
 
하여간, table_cache를 큰 숫자로 바꾼 이후에, db lock은 거의 없어졌다.
 
파일 오픈용 캐시는 table_open_cache 엔트리 레벨에서 관리된다. 디폴트 값은 64이다;
이 값은 --table_cache 옵션으로 변경 시킬 수가 있다.
MySQL은 쿼리를 실행하기 위한 것 보다 많은 수의 테이블을 임시로 오픈 한다는 점을 알아두자.
 
 
참조문서
반응형

//