'MySQL'에 해당되는 글 9건
- 2013.12.09 TABLES TYPE/ SLEEP
TABLES TYPE/ SLEEP
MyISAM Tables
MySQL에서 CREATE TABLE 문으로 테이블을 생성하면, MyISAM 테이블 타입으로 생성된다.
MyISAM은 ISAM 테이블 타입과 많은 확장으로 이루어져 있다.
인덱스는 “.MYI” 파일에 저장되어 있고, 데이터는 “.MYD” 파일에 저장되어 있다.
myisamchck 유틸리티를 사용하여 테이블을 체크하거나 복구할 수 있다.
myisampack 유틸리티를 사용하여 압축이 가능하다.
MERGE Tables
MERGE 테이블은 MRG_MuyISAM 테이블 타입이라고 불려지며, 동일한 2개의 테이블을 합쳐서
1개의 테이블로 구성하는 것이다.
HEAP Tables
HEAP 테이블은 디스크에 저장되는 것이 아니라 메모리에 저장된다. HEAP 테이블은 임시
테이블로 사용할 경우 유용하다.
HEAP 테이블은 MyISAM 테이블 보다 30% 정도 속도 향상을 볼 수 있다. HEAP 테이블은
메모리에 저장되기 때문에, MySQL 서버를 재 시작할 경우에 데이터는 사라진다.
InnoDB Tables
InnoDB 테이블은 AICD 트랜잭션이 지원되는 테이블 타입이다.
InnoDB는 트랜잭션을 제공하며 commit, rollback, 충돌 복구 능력 핸들링도 제공된다.
InnoDB는 로우 레벨 락킹과 오라클 스타일의 완벽한 non-locking READ가 SELECT 문에서
제공된다. 이것은 동시 접속 사용자가 증가하면 할수록 퍼포먼스가 좋아지게 된다.
클라이언트에서 연결을 하고 연결을 종료하지 않았거나, 느린 쿼리가 실행되어 역시 연결 종료를
하지 못했을 경우에 발생한다.
SLEEP 상태가 될 경우 운영체제 프로세스가 늘어나고, MySQL 경우 프로세스 1개당 2.5M~3M를
잡아 먹기 때문에 메모리를 상당히 많이 차지하게 된다.
DBMS에서는 메모리가 중요하기 때문에 SLEEP 상태의 프로세스는 없는 것이 좋다.
SLEEP의 원인은 대용량 레코드를 가진 테이블에서 쿼리를 잘못 실행했을 경우 SLEEP 상태가
된다. PHP에서 mysql_close()를 안 했을 경우 SLEEP 상태가 된다.
PHP에서 mysql_pconnect()를 사용했을 경우 SLEEP 상태가 된다. (mysql_pconnect()의 경우는
속도가 빠를 수 있으나, 메모리가 바쳐주지 않는 한 사용하지 않는 것이 좋다. 최소한 메모리가
2G~3G 이상은 되어야 사용하는 것이 좋다.)
슬로우 로그 파일
슬로우 쿼리 로그를 my.cnf에서 [mysqld] 아래 다음과 같이 설정한다.
Log-slow-queries=c:/mysql/data/mysql-slow.log
wait_timeout을 적게
my.cnf 파일에서 wait_timeout=20으로 변경하면 20초가 넘어가면 연결을 강제 종료시킨다.