레이블이 MyISAM인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MyISAM인 게시물을 표시합니다. 모든 게시물 표시

2010년 3월 3일 수요일

튜닝을 위한 팁(MyISAM)

1.캐쉬

key_buffer_size, preload_buffer_size등의 캐쉬를 수정해 본다. key_buffer_size는 되도록이면 많이 할당한다. 이것은 공유메모리이다. 메모리가 충분히 있다면 myisam_use_mmap를 사용해서 모든 MyISAM테이블을 메모리에 매핑하는 것도 검토해 본다.

2.데이터 테이블, 인덱스 파일을 별도의 디스크에 보존한다.

I/O의 분산처리에 도움이 된다. CREATE TABLE문장에 DATA DICTIONARY, INDEX DICTIONARY를 지정하면 MYD파일, MYI파일의 보존 디렉토리를 변경할 수 있다.

3.써넣기하지 않는 테이블은 압축

써넣기가 없는 테이블은 "myisampack -v 테이블명", "myisamchk -rq 테이블"를 실행해서 테이블을 압축한다. 압축하면 파일사이즈도 작게되고 그로인해 디스크로부터 읽어들이는 양도 줄어 들게 되므로 경우에 따라서는 속도향상도 기대된다.

2009년 9월 15일 화요일

테이블관리3- myisamchk

myisamchk는 MyISAM테이블을 체크하고 복구하는 전용명령어이다.
서버가 테이블을 사용하지 않는 상태(갱신하지 않는, 열려있지 않은 상태)에서 myisamchk를 사용하지 않으면 안된다.
mysql명령어에서 --skip-external-locking 옵션을 사용했을 경우 MySQL 서버를 정지시키지 않아도 myisamchk를 사용할 수 있다.

사용전에는 FLUSH TABLES을 실행해서 일단 테이블을 닫아주어야한다.
또, 체크중에는 LOCK TABLES을 사용해서 클라이언트가 체크중에 있는 테이블에 접근할 수 없도록 해둘 필요가 있다.

기본적인 사용방법은 아래와 같다.
myisamchk [옵션] {테이블명|MYI파일명}

인수로는 테이블명 또는 MYI파일을 지정한다. 복수 지정가능하다.
myisamchk옵션은 my.cnf파일의 [myisamchk]그룹에 기술할 수 있다.

myisamchk는 작업용 파일을 TMPDIR환경변수에 있는 디렉토리밑에 작성한다. (없는 경우는 /tmp디렉토리)
만약 파티션에 여유가 없을 경우에는 out of memory가 나올 수 있다.
그럴 때에는 --tmpdir옵션으로 작업용 파일을 두는 디렉토리를 지정해야한다.

메모리사이즈관련 옵션
--sort_buffer_size, --key_buffer_size, --read_buffer_size, --write_buffer_size

체크관련 옵션
--fast ( -F ), --check-only-changed ( -C ), --medium-check( -m) , --extend-check( -e )
--check (-c), --force( -f), --information( -i ), --read-only( -T ) , --update-state ( -U)

복구관련 옵션
복구할 때 myisamchk는 일시 작업용 파일인 .TMM(인덱스), .TMD(데이터)를 사용한다.
--recover(-r), --safe-recover( -o)
--backup( -B), --character-sets-dir=디렉토리, --correct-checksum, --data-file-length=사이즈(-D 사이즈), --extend-check(-e), --force(-f), --keys-used=정수( -k 정수), --max-record-length=길이,--parallel-recover(-p), --quick(-q), --set-collation=collation명, --sort-recover(-n), --tmpdir=디렉토리(-t 디렉토리), --unpack(-u)

기타옵션
--analyze(-a), --block-search=옵셋(-b옵셋), --description(-d), --set-auto-increment[=정수](-A정수) , --sort-index( -S) , --sort-records=정수(-R 정수), -- verbose(-v), --silent(-s), --version(-V), --help(-h)


2009년 2월 26일 목요일

심볼릭링크(symbolic link)

MYD파일과 MYI파일은 심볼릭링크여도 동작한다.
파티션 용량 부족을 해결하기 위해 또는 I/O분산을 위해서 파일 본체를 별도의 디렉토리에 이동하고 데이터베이스를 나타내는 디렉토리밑에 심볼릭링크를 만드는 것이 가능하다. 

mysqld옵션(my.cnf파일)에 skip-symlink가 지정되어있으면 심볼릭링크는 사용하지 못한다. 
심볼릭링크를 사용하기 위해서는 수동으로 심볼릭링크를 만드는 방법과 CREATE TABLE문을 실행할때 특정 키워드를 지정하는 방법이 있다. 

SQL문 심볼릭링크사용예
mysql> CREATE TABLE table1 (i int) ENGINE=MYISAM DATA DIRECTORY ='/disk1/data/' INDEX DIRECTORY = '/disk2/data/';

DATA DIRECTORY에는 MYD 보존위치를 지정하고 INDEX DIRECTORY에는 MYI 보존위치를 지정한다. 

수동으로 심볼릭링크를 만드는 경우는 mysql을 정지시킨 후 작업하는 것이 안전하다. 
mysqld를 정지시킬 수 없는 경우는 SQL문으로 그 테이블을 락(lock)해놓은 후 작업한다. 

작업예
mysql> LOCK TABLES table1 WRITE;
mysql> FLUSH TABLES;

(파일 이동과 심볼릭링크 작성을 실행한다.)

mysql>UNLOCK TABLES;


2009년 2월 23일 월요일

MyISAM 파일구성

한개의 MyISAM테이블은 한개의 MYD파일과 한개의 MYI파일, 한개의 frm파일로 구성되어있다. 
파일명은 다음과 같다. 

  테이블명.확장자(MYD, MYI, frm)

이것은 데이터베이스를 나타내는 디렉토리 밑에 생성된다.  별도로 필요로 하는 파일은 없다. 

MYD파일은 데이터를 보존하고 MYI파일은 인덱스를 보존한다. 
frm은 테이블의 정의이다. 


MyISAM에 대해서

MyISAM스토리지엔진은 MySQL표준 스토리지엔진이다. 
사용자인증테이블등의 권한 테이블은 MyISAM형이어야만 한다. 

MyISAM테이블의 특징은 다음과 같다. 
  • 심플한 파일구성
  • 인덱스는 B-Tree
  • 트랜잭션은 해당없음
  • 외부키제약 없음
  • 락은 테이블락만  존재(LOCK TABLES문)
  • 압축가능
  • 심볼릭링크로 파일을 분산가능