반응형
- mysqladmin status
Uptime: 426 Running threads: 1 Questions: 11082
Reloads: 1 Open tables: 12
- 다중 thread 방식이기 때문에 해당 table에 동시에 쿼리를 날리는 클라이언트가 많이 존재하기 때문에 6개의 테이블만 존재하더라도 위의 상태 값을 보면 open tables가 12
- 동시 thread가 동일한 table에 다른 상태로 존재하기 때문에 독립적으로 open 해야 되며, 이 방식은 메모리를 추가적으로 사용하지만 성능을 향상 시킬 수 있음
- MyIsam table 이용할 경우 table을 open한 클라이언트에 대해 데이터 파일용 디스크립터가 별도로 하나씩 존재(인덱스 파일 디스크립터는 thread간 공유)
- MyIsam storage engine 의 경우 각각의 open table에 대해 2개의 파일 디스크립터를 필요로 함
두 개의 thread가 동일한 table에 접속을 하거나 하나의 thread가 동일한 쿼리 내에서 한 테이블을 두 번 접속(self join)할 경우 테이블이 두 번 열려야 함.
Myisam table이 처음 open 시 데이터 파일 디스크립터, 인덱스 파일 디스크립터를 필요로 하며 테이블을 추가적으로 사용할 경우 인덱스 파일 디스크립터는 공유하며
하나의 파일 디스크립트 필요
- 관련 variables
table_cache, max_connections, max_tmp_tables
위의 관련 변수가 open 파일 수 결정
- max_connections
200개의 동시 접속
table cache = 200 * N(실행 쿼리 안의 join 당 table 최대 수) - 추가로 임시 table 및 임시 파일에 대한 여분의 디스크립터를 보관하고 있어야 함
shell> perror 23
OS error code 23: File table overflow
shell> perror 24
OS error code 24: Too many open files
shell> perror 11
OS error code 11: Resource temporarily unavailable
위와 같은 에러 발생시 table cache( --open-files-limit )를 증가시키거나 max_connections는 감소
- 사용되지 않는 close table
- 캐시 풀 상태에서 캐시 안에 없는 table을 open 할 때
- When the cache contains more than table_cache entries and a table in the cache is no longer being used by any threads
- flush tables, mysqladmin flush-tables, mysqladmin refresh 같은 flush 연산이 발생할 경우
- Cache entry procedure
- 현재 사용하지 않는 table 반환(가장 마지막으로 사용된 table 기준)
- table open이 필요할 때, 캐시가 풀이지만 더 이상 반환할 table이 없을 경우 임시 확장 가능(필요없을 경우 반환)
- HANDLER table_name OPEN
- HANDLER table_name OPEN 구문을 사용하여 table을 open할 경우, 지정된 table object는 thread에 할당되며, 할당된 table object는 thread 사이에 공유되지 않음
- HANDLER table_name CLOSE 호출 또는 thread 종료 시 close.
table은 다시 table 캐시에 저장
반응형