I/O를 분산시킨다는 의미로는 MySQL에서 다음과 같은 방법이 제공되었다.
- 데이터베이스 디렉토리를 심볼릭 링크로 해서 분산 배치
- InnoDB에서는 테이블스페이스 파일(innodb_data_file_path)를 여러개의 파일로 분할
- InnoDB에서는 테이블단위로 파일을 작성(innodb_file_per_table)
- MyISAM에서는 MERGE 테이블
- MyISAM에서는 RAID테이블( MySQL5.0에서 페지: 옛날 OS에서는 한개의 파일 사이즈가 4G제한이 있었지만 현재는 그런 제한이 없어졌으므로 자연스럽게 없어짐... )
- MyISAM에서 파일단위로 심볼릭 링크를 사용해서 분산배치
MySQL5.1에서 도입된 파티셔닝기능은 MyISAM과 InnoDB둘다 동작하는 공통의 인터페이스(사용방법)이어서 통일감도 있고, 조작은 SQL문의 실행만으로 완료할 수 있으므로 관리자도 이용자도 편하게 되어졌다.
파티셔닝을 이용하는 것으로 지금까지 보다 편하게 I/O분산배치를 시행할 수 있게 되었다.
다만, 파티셔닝이 지금까지의 수법을 완전히 대체할 수 있느냐라고는 할 수 없다.
예를 들어 innodb_data_file_path등은 DB셋업할 때 고려해야할 사항이다.
또 MERGE테이블에서는 myisampack으로 각각의 테이블을 작게 할 수 있으므로 이미 존재하는 테이블을 분할 할 때는 파이셔닝보다 편리할 때도 있다.
각각 때와 장소에 맞게 적절히 사용할 필요가 있다.
파티셔닝기능이 유효인지 확인하는 방법에는 SHOW VARIABLES로 have_partitioning의 값을 보면 알 수 있다. 이 값이 YES이면 파티셔닝기능이 들어있다라고 할 수 있다.
만약 값이 NO로 되어 있거나 원래 have_partitioning자체가 나타나지 않은 경우 사용하고 있는 mysqld 바이너리에 파티셔닝이 포함되어 있지 않는 것이다.
서버 소스를 configure할 때 --with-partition를 지정해서 컴파일하면 될 것이다.