WorkaHolic

Full Text 검색 최적화 팁

2008. 12. 17. 23:03
반응형

출처 : 블로그

원문 : 그는 무슨생각을 하는가?

 

Full Text 검색 최적화 팁

 

저자: Alexander Chigrik

 

이 기사에서는 Full Text 검색을 사용할때 성능에 관련된 14가지의 팁에 대해서 다루고자 한다.

 

가상 메모리를 적어도 물리적 메모리의 3배 이상으로 설정하고 SQL Server의 "Max Server Memory" 설정을 가상 메모리의 절반 정도로 한다. (물리적 메모리의 1.5배)
Full Text 검색은 자원 집약적 요소가 강하기 때문에 충분한 물리적 메모리와 가상 메모리를 확보할 필요가 있다.

 

 

서버최적화에서 "네트워크 응용 프로그램을 위해 데이터 처리량 최대화"로 설정한다.
이렇게 하면 서버가 File 캐쉬에 비해 SQL Server에 램을 더 할당하기 때문에 Full Text 검색 성능이 향상된다. 이를 설정하기 위해서는 다음과 같이 한다.

1. 제어판에서 네트워크 및 전화접속 연결을 더블클릭 한다.
2. 작동중인 연결의 등록정보를 누르고 Microsoft 네트워크용 파일 및 프린터 공유를 선택하고 등록정보를 누른다.
3. 네트워크 응용 프로그램을 위해 데이터 처리량 최대화를 선택하고 확인을 누른다.

 

 

데이터베이스 사용량이 적을 때 채우기를 실행한다.
Full Text의 채우기 작업은 시간이 꽤 걸리기 때문에 CPU가 한가할 때나 데이터베이스 사용량이 적을 때 자동화 작업을 이용하여 수행한다.

 

 

크기가 큰 테이블의 경우(100만 건 이상) 그 테이블만의 Full Text 카탈로그를 할당한다.
성능향상과 관리면 에서도 좋다.

 

 

Full Text 검색 서비스의 프로세스 우선 순위를 높인다.
작업관리자에서 mssearch 프로세스를 선택하고 마우스 우클릭해서 프로세스의 우선순위를 높여준다. 하지만 실시간 수준으로는 설정하지 말기 바란다. 이렇게 하면 SQL Server의 성능에 부정적인 영향을 미친다.

 

 

Full Text의 키 사이즈의 크기를 줄인다.
Full Text 인덱스를 생성할 때 테이블에 유니크 인덱스가 꼭 있어야 한다. 채우기 속도의 향상을 위해서 유니크 키는 숫자형식인 컬럼을 지정하기 바란다. 만약 숫자형식의 컬럼이 없다면 대리키로 생성하는 것을 고려해본다.

 

 

여러개의 물리적 디스크가 있다면 각각의 디스크에 Page 파일을 생성한다.
여러개의 디스크가 있다면 Input/Output을 동시에 처리할 수 있기 때문에 성능이 향상된다.

 

 

SQL Server 2000을 사용한다면 증분 채우기 대신에 예약된 변경 추적이나 인덱스 백그라운드 업데이트 옵션을 사용한다.
데이터 변경 시점과 시간이 차이가 어느 정도 허용되면 예약된 변경 추적을 사용하고 업데이트된 데이터가 많다면 백그라운드 업데이트 옵션을 사용한다.

 

 

대다수의 데이터가 변경되었다면 전체 채우기를 사용한다.

 

 

SQL Server 7.0을 사용한다면 많은 수의 데이터가 변경된 것이 아니라면 증분 채우기를 사용한다.
전체 채우기 대신에 증분 채우기를 하면 채우기에 드는 시간을 줄일 수 있고 좋은 성능을 낼 수 있다.

 

 

여러개의 물리적 디스크를 사용한다면 데이터베이스 파일과 Full Text 카탈로그 파일을 별도의 위치에 분리시킨다.
역시 Input/Output을 동시에 처리할 수 있으므로 Full Text 쿼리의 속도를 향상시킬 수 있다.

 

 

클러스터 환경에서 Full Text의 향상된 검색이 필요하다면 SQL Server 2000으로 업그레이드를 한다.
Full Text 검색은 SQL Server 7.0의 클러스터 환경에서 사용할 수 없다.

 

 

SQL Server 2000을 사용한다면 CONTAINSTABLE 이나 FREETEXTTABLE에서 top_n_by_rank 파라미터를 같이 사용한다.
반환되는 로우의 갯수를 제한할 수 있다. top_n_by_rank를 명시하면 n개 만큼 높은 적중률을 보이는 순서대로 반환한다.

 

 

가능하면 CONTAINSTABLE 이나 FREETEXTTABLE 대신에 CONTAINS 나 FREETEXT를 사용한다.
CONTAINSTABLE 이나 FREETEXTTABLE을 사용하였을 경우 조건에 부합하는지가 분명한 경우에도 원래의 SQL Server 테이블과 조인을 하게 된다. 따라서 CONTAINS 와 FREETEXT에 비해 좀 더 복잡한 처리를 하게 된다.

반응형