7.6. 디스크 이슈
7.6.1. 심볼릭 링크 사용하기
- 디스크 검색 (Disk seek)은 성능 저하의 중요 원인을 제공한다. 이런 문제는 효과적인 캐싱 처리가 불가능할 정도로 데이터 양이 많아지는 경우에 뚜렷하게 나타난다. 여러분이 다소 랜덤하게 대형 데이터 베이스를 접속하는 경우에는, 데이터를 읽기 위해서 최소 1번의 디스크 검색과 데이터를 쓰기 위한 두 번의 디스크 검색이 필요하다는 점을 확실히 알고 있어야 한다. 이런 문제를 최소화 하기 위해서는, 가능한 한 최소의 디스크 검색이 이루어 지도록 해야 한다.
- 서로 별개의 디스크에 대한 파일 심볼릭 링크 (symbolic link) 또는 디스크 스트라이핑 (striping)을 사용해서 사용 가능한 디스크 스핀들 (spindle)의 숫자를 늘린다:
- 심볼릭 링크 사용하기
MyISAM 테이블의 경우, 인덱스 파일과 데이터 파일이 일반적으로 저장되어 있는 데이터 디렉토리를 다른 디스크로 심볼릭 링크 시킨다. 이렇게 하면 디스크 검색 및 데이터 읽기 시간을 보다 개선 시킬 수 있다.
- 스트라이핑
스트라이핑이란, 여러분이 디스크를 많이 가지고 있고, 첫 번째 블럭은 첫 번째 디스크에 올려 놓고, 두 번째 블럭을 두 번째 디스크에, 세 번째는 세 번째 디스크에, 그리고 N 번째 블럭은 (N MOD 디스크 번호) 디스크에 놓는 것을 의미한다. 만일 일반적인 데이터의 크기가 스트라이프 크기보다 작다면 (또는 정확히 같다면), 보다 좋은 성능을 얻을 수가 있다. 스트라이핑은 OS 및 스트라이프 크기에 매우 밀접하기 때문에, 여러분이 사용하는 어플리케이션을 서로 다른 스트라이프 크기로 벤치 마크를 해보기 바란다.
스트라이핑의 속도 차이는 파라미터와 매우 밀접한 관련이 있다. 스트라이핑 파라미터와 디스크 숫자를 어떻게 설정하느냐에 따라서 전체적인 차이를 가지게 된다.
- 안전성을 위해서는, RAID 0+1 (스트라이핑 및 미러링 (striping plus mirroring))을 사용할 수도 있지만, 이와 같은 경우에는, 2 × N 개의 디스크 드라이브가 필요하게 된다.
- 리눅스의 경우에는 hdparm를 사용해서 디스크 인터페이스를 구성 한다면 보다 우수한 성능을 얻어낼 수가 있을 것이다. MySQL의 경우, 아래의 옵션을 사용하면 된다:
hdparm -m 16 -d 1
- 여러분은 또한 데이터 베이스가 사용하는 파일 시스템용 파라미터를 설정할 수도 있다:
만일 파일이 언제 최종적으로 접속이 되었는지 알 필요가 없다면 (실제로 데이터 베이스 서버에서는 필요 없는 사항임), 여러분이 사용하는 파일 시스템을 -o noatime 옵션을 사용해서 마운트 한다. 이렇게 하면 파일 시스템에 있는 아이노드 (inode)에 최종 접속 시간을 업데이트 하지 않게 되며, 이에 따라서 디스크 검색 시간을 절약 시킬 수가 있다.
대부분의 OS에서, 여러분은 파일 시스템을 -o async 옵션과 함께 마운트 시킴으로써 비 동기적인 업데이트가 되도록 만들 수가 있다. 이렇게 하면, 보다 개선된 성능을 얻어낼 수가 있다. (리눅스에서는 이 플래그가 디폴트임)