비동기 채우기

MicrosoftSQL Server에서는 큰 키 집합 커서나 정적 커서를 비동기적으로 채우는 성능 최적화 기능을 제공합니다. 키 집합 커서와 정적 커서는 tempdb에 내장된 작업 테이블을 사용합니다. 키 집합 커서는 작업 테이블을 사용하여 키 집합과 커서에서 행을 식별하는 키 집합을 저장합니다. 정적 커서는 작업 테이블을 사용하여 커서를 구성하는 행을 저장합니다. SQL Server 쿼리 최적화 프로그램에서 키 집합 커서나 정적 커서에 반환된 행 수가 sp_configure cursor threshold 매개 변수의 값을 초과할 것이라고 예상하면 서버가 별도의 스레드를 시작하여 작업 테이블을 채웁니다. 컨트롤을 즉시 응용 프로그램으로 반환하여 첫 번째 인출을 수행한 후 전체 작업 테이블이 채워질 때까지 기다리지 않고 첫 행 인출을 시작할 수 있습니다.

커서를 비동기식으로 채울 때는 오버헤드가 늘어납니다. 작은 커서는 비동기식으로 채우지 않는 것이 더 효율적이므로 sp_configure cursor threshold 값을 너무 낮게 설정하지 말아야 합니다. 큰 커서에 대해서는 비동기 채우기를 사용합니다.

[!참고]

SQL Server에서는 키 집합 또는 정적 Transact-SQL 커서를 비동기적으로 생성할 수 없습니다. 일반적으로 OPEN 또는 FETCH 등의 Transact-SQL 커서 작업은 일괄 처리되므로 Transact-SQL 커서를 비동기적으로 생성할 필요가 없습니다. SQL Server에서는 각 커서 작업의 클라이언트 왕복 때문에 짧은 대기 시간 OPEN이 문제가 되는 비동기 키 집합 기반 또는 정적 API(응용 프로그래밍 인터페이스) 서버 커서를 계속 지원합니다.

@@CURSOR_ROWS 함수는 커서에 있는 행 수를 보고합니다. 아직 채우기 중인 작업 테이블이 있는 커서에서 @@CURSOR_ROWS를 선택하면 @@CURSOR_ROWS가 음수를 반환합니다. 반환된 수의 절대값이 그 때까지 작업 테이블에서 채워진 행 수입니다. 예를 들어 키 집합 커서의 키 집합이 채워지는 동안 @@CURSOR_ROWS를 선택했지만 1,243개 키가 이미 키 집합에 있으면 @@CURSOR_ROWS가 -1243을 반환합니다.