database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Tutorials 15102 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 15102
mysql 에서 open file caching
작성자
이창훈(mushim)
작성일
2002-02-06 23:04
조회수
11,423

##################################

## mysql 에서 file open caching ##

##################################

 

mysql 이 성능향상을 위해서 캐싱하는 것중 열려진 파일의 핸들이 있다.

요청이 있을때 파일을 열고, 요청이 끝나도 바로 닫지 않고 파일의 핸들을 캐시에 올려둔다.

이러한 파일에는 테이블의 데이타파일, 인덱스파일 그리고 로그파일들이 해당된다.

 

대부분의 OS 에서는 이 파일핸들들은 모든 쓰레드에서 공유된다.

(* 파일핸들을 공유안시키고 테이블파일을 열 수도 있다. HANDLE table_name OPEN 을 참고하세요.)

 

mysql 은 table_cache 라는 설정변수로 캐시크기를 정할수 있다.

table 하나당 인덱스,데이타파일 2개가 열리므로, 실제 열리는 파일개수는 table_cache*2 이다.

만약, 이 값이상으로 테이블을 열게 되면 mysql은 주어진 알고리듬(lru)에 의해 옛날 파일핸들을 닫게 된다.

혹은 FLUSH TABLES, mysqladmin refresh , mysqladmin flush-tables 명령으로 사용자가 직접 캐시에 있는 파일을 닫을 수 있다.

 

table 캐싱의 효과는 특별한 지표가 정해져있지는 않지만 다음과 같은 지표로 판단할 수 있을 것이다.

Opened_tables / Questions : 쿼리당 여는 테이블 수.

위의 값이 충분히 작아지도록 table_cache 값을 크게 하면된다.

 

그러나, 캐싱의 성능을 극대화한다고 이값을 마냥 크게 잡을 수 는 없다.

대부분의 OS 는 프로세스당 열수 있는 파일 개수의 최대값을 정해놓기 때문에(여기에는 소켓도 포함된다),

table_cache 값이 지나치게 크면, cpu 는 놀아도 파일핸들이 없어서 요청을 처리하지 못하는 경우가 생길수도 있다.

흔한 경우는 아니지만 mysql 에러파일에서 \(errno: 23)\ 혹은 \(errno: 24)\ 같은 메세지를 보게 되면

사용가능한 파일핸들이 없다는 것이므로, table_cache 가 지나치게 크게 잡혔나 살펴보아야 한다.

 

그럼 table_cache 값을 정하는 방법을 살펴보자.

( 프로세스당 열 수 있는 파일수 - 최대접속수(max_connection) - (temporary table 에 사용되는 파일핸들) ) / 2

 

실제적인 경우를 예로 들어보자.

내가 쓰고 있는 리눅스 머신에서는 프로세스당 열 수 있는 파일수가 8192 로 되어 있다.

사양은 다음과 같다.

CPU : celeron 366, Mem : 64M

경험적으로 mysql 커넥션을 아무리 많이 잡아도 1,000 개 이상 처리하지 못할 것이다.

그리고, temporary table 에 사용되는 파일핸들을 많이 고려해도 한 100개

따라서, table_cache 값은 4046 으로 정할 수 있다.

대개의 경우 table 수는 4000 개를 넘지 않으므로 100% 캐싱된다.

 

지금까지 table 캐싱의 의미와, 정하는 방법을 살펴보았다.

그러나, 실제 table 캐싱과 성능향상과의 관계는 경험해볼 기회가 없었다.

예상으로는 인덱스파일 캐싱만큼은 효과가 없을 것 같다.

실험을 한다면 table_cache 값을 0 혹은 1정도로 했을때와, 충분히 크게 했을경우 각각 성능을 측정해보면

되지 않을까 생각된다.

 

* 참고사이트

http://www.mysql.com/information/presentations/presentation-oscon2000-20000719/index.html

http://www.mysql.com/doc/T/a/Table_cache.html

http://www.mysql.com/doc/N/o/Not_enough_file_handles.html

http://www.mysql.com/doc/H/A/HANDLER.html

[Top]
No.
제목
작성자
작성일
조회
16213MySQL Table Joins
정재익
2002-06-11
8618
15438mysqld_error code [1]
김순석
2002-03-12
11030
15180[참고자료-질문/답] mysql 최적화 관련
문태준
2002-02-16
11513
15102mysql 에서 open file caching
이창훈
2002-02-06
11423
14900mysqladmin 총정리
정재익
2002-01-23
17529
14867mysqlfs (MySQL filesystem) [1]
정재익
2002-01-20
8375
14789pconnect와 thread좀비..그리고 mysqladmin [3]
이재원(운비)
2002-01-15
8368
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다