Share via


쿼리 성능 향상을 위한 파티션 디자인

테이블이나 인덱스를 분할하면 자주 실행하는 쿼리 유형과 사용 중인 하드웨어 구성에 따라 쿼리 성능이 향상될 수 있습니다.

조인 쿼리를 위한 분할

두 개 이상의 분할된 테이블 간의 동등 조인을 수반하는 쿼리를 자주 실행할 경우 해당 분할 열과 테이블이 조인되는 열이 같아야 합니다. 또한 테이블이나 해당 인덱스를 콜러케이션해야 합니다. 즉, 같은 이름의 파티션 함수를 사용하거나 다음과 같이 본질적으로 동일한 다른 함수를 사용합니다.

  • 분할에 사용되는 매개 변수 수가 같고 해당 매개 변수의 데이터 형식이 같습니다.

  • 같은 수의 파티션을 정의합니다.

  • 파티션에 대해 같은 경계 값을 정의합니다.

이러한 방식을 통해 파티션 자체를 조인할 수 있기 때문에 SQL Server 쿼리 최적화 프로그램에서 조인을 보다 빠르게 처리할 수 있습니다. 쿼리가 조인하는 두 테이블이 콜러케이션되지 않았거나 조인 필드에서 분할되지 않았으면 파티션으로 인해 쿼리 처리가 빨라지는 대신 실제로 느려질 수 있습니다.

여러 디스크 드라이브 활용

I/O 성능 향상을 위해 각각 다른 실제 디스크 드라이브에 액세스하는 여러 파일 그룹에 파티션을 매핑하는 것을 고려해 볼 수 있습니다. SQL Server가 I/O 작업을 위해 데이터를 정렬할 때 먼저 파티션을 기준으로 데이터가 정렬됩니다. 이 시나리오에서는 SQL Server가 한 번에 한 드라이브에 액세스하므로 성능이 저하될 수 있습니다. 성능 면에서 더 나은 솔루션은 RAID를 설정하여 두 개 이상의 디스크 간에 파티션의 데이터 파일을 스트라이프하는 것입니다. 이렇게 하면 SQL Server가 여전히 파티션을 기준으로 데이터를 정렬하지만 동시에 각 파티션의 모든 드라이브에 액세스할 수 있습니다. 모든 파티션이 한 파일 그룹에 있는지 또는 여러 파일 그룹에 있는지에 관계없이 이러한 구성을 디자인할 수 있습니다. SQL Server에서 여러 RAID 수준을 사용하는 방법은 RAID 수준 및 SQL Server를 참조하십시오.

잠금 에스컬레이션 동작 제어

테이블을 분할하면 전체 테이블이 아니라 단일 파티션에 대한 잠금 에스컬레이션을 설정하여 성능을 향상시킬 수 있습니다. 파티션에 잠금 에스컬레이션을 허용하여 잠금 경합을 줄이려면 ALTER TABLE 문의 LOCK_ESCALATION 옵션을 사용하십시오.