다음을 통해 공유


큰 결과 집합 검색

반환될 결과 집합에 1000개 이상의 항목이 포함될 가능성이 있는 경우 페이징된 검색을 사용해야 합니다. 페이징 없이 수행되는 Active Directory 검색은 처음 1000 레코드의 최대 반환으로 제한됩니다. 페이징된 검색을 사용하면 결과 집합이 개별 페이지로 표시되며, 각 페이지에는 미리 정해진 수의 결과 항목이 포함됩니다. 이 유형의 검색을 사용하면 결과 집합의 끝에 도달할 때까지 결과 항목의 새 페이지가 반환됩니다.

기본적으로 쿼리 요청에 응답하는 서버는 데이터를 반환하기 전에 결과 집합을 완전히 계산합니다. 큰 결과 집합에서는 결과 집합을 획득할 때 서버 메모리가 필요하고, 큰 결과가 반환될 때 네트워크 대역폭이 필요합니다. 페이지 크기를 설정하면 페이지가 빌드될 때 서버가 페이지에 데이터를 보낼 수 있습니다. 그런 다음 클라이언트는 이 데이터를 캐시하고 애플리케이션 수준 코드에 커서를 제공합니다. 페이징은 네트워크를 통해 클라이언트에 데이터가 반환되기 전에 서버에서 계산하는 행 수를 정의하여 설정됩니다.

페이징 검색은 클라이언트와 서버 모두에 이점을 제공합니다. 예를 들어 최종 사용자에게 결과를 표시할 때 클라이언트의 응답성이 더 높아질 수 있습니다. 이는 다른 스레드가 서버에서 더 많은 데이터를 동시에 수신하는 동안 데이터를 표시할 수 있는 그래픽 사용자 인터페이스 도구와 특히 관련이 있습니다.

쿼리를 설정할 때 결과 집합에 대한 정렬 순서를 지정하는 경우 서버는 데이터를 클라이언트로 반환하기 전에 결과 집합을 완전히 계산해야 하며 이는 쿼리의 응답 시간에 영향을 줍니다.

서버 쪽에서 페이징 검색을 통해 작업을 확장할 수 있습니다. 예를 들어 100개의 클라이언트가 동시에 검색 요청을 실행하고 평균적으로 각 클라이언트가 200개의 개체를 반환하는 경우 페이지 크기를 지정하지 않으면 서버에 20,000개의 항목의 전체 결과 집합을 저장할 수 있는 충분한 메모리가 있어야 합니다. 또는 각 클라이언트가 10개의 개체의 페이지 크기를 지정한 경우 서버의 메모리 요구 사항이 20배 감소합니다.

참고

모든 디렉터리 서비스가 페이징 검색을 지원하는 것은 아닙니다. Active Directory는 페이지 크기 아키텍처를 구현합니다.

 

많은 디렉터리 서버는 클라이언트가 페이지 크기를 지정하지 않는 경우 반환할 수 있는 최대 개체 수에 대한 관리 제한을 지정합니다. 관리 제한에 도달하면 ADSI는 win32 오류 ERROR_DS_ADMIN_LIMIT_EXCEEDED 생성합니다.

클라이언트 쪽에서 페이징된 검색을 사용하면 클라이언트가 진행 중인 동안 작업을 중지할 수 있습니다. 반면, 페이징되지 않은 검색에서는 데이터가 완전히 반환되거나 오류가 발생할 때까지 클라이언트가 차단됩니다. 결과 집합이 더 크고 예상보다 많은 시간이 걸리는 경우 네트워크 성능에 영향을 줄 수 있습니다.

ADSI는 클라이언트를 대신하여 페이지 크기를 투명하게 처리합니다. 클라이언트는 진행 중인 개체 수를 계산할 필요가 없습니다. ADSI는 클라이언트에 대한 서버 상호 작용을 캡슐화합니다. 클라이언트 관점에서 검색은 전체 결과 집합을 반환합니다.

특정 검색 인터페이스에서 검색 시간 제한 옵션을 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요.

ADSI가 결과 집합의 끝 또는 설정한 시간 제한의 끝에 도달할 때까지 결과의 추가 페이지를 자동으로 검색하기 때문에 페이징된 검색은 애플리케이션에 투명합니다. 페이징 검색을 사용하는 경우 크기 제한은 페이지 크기를 재정의하지 않습니다. 크기 제한은 1000개 미만의 항목이 포함된 결과 집합을 검색할 때만 사용할 수 있습니다.