非同步擴展
Microsoft SQL Server 提供非同步擴展大型索引鍵集衍生或靜態資料指標的效能最佳化。索引鍵集衍生及靜態資料指標會使用 tempdb 內建的工作資料表。索引鍵集衍生資料指標會使用工作資料表,來儲存它們的索引鍵集,這是識別資料指標中資料列的索引鍵集。靜態資料指標會使用工作資料表,來儲存構成資料指標的資料列。如果 SQL Server 查詢最佳化工具估計索引鍵集衍生或靜態資料指標中傳回的資料列數目將超出 sp_configure cursor threshold 參數的值,則伺服器會啟動個別的執行緒,擴展工作資料表。控制會立即傳回到應用程式,讓應用程式可以開始提取資料指標中的第一資料列,而不需等到整個工作資料表完成擴展後,再執行第一次提取。
有一些與非同步擴展資料指標相關聯的額外負擔。不要非同步擴展小型資料指標將更有效率,所以 sp_configure cursor threshold 值不應該設定太低。保留對大型資料指標使用非同步擴展。
[!附註]
SQL Server 不支援非同步產生索引鍵集衍生或靜態 Transact-SQL 資料指標。Transact-SQL 資料指標作業 (例如 OPEN 或 FETCH) 一般為批次式,因此,不需要非同步產生 Transact-SQL 資料指標。SQL Server 會繼續支援非同步索引鍵集衍生或靜態應用程式發展介面 (API) 伺服器資料指標,其中低度延遲 OPEN 會是一個顧慮,因為每一個資料指標作業都需要用戶端往返。
@@CURSOR_ROWS 函數會報告資料指標中的資料列數目。如果您於工作資料表仍在擴展的狀況下,在資料指標上選取了 @@CURSOR_ROWS,則 @@CURSOR_ROWS 將傳回負數。所傳回之數目的絕對值是直到那個時間已在工作資料表中擴展的資料列數目。例如,如果於索引鍵集衍生資料指標的索引鍵集仍在擴展時選取了 @@CURSOR_ROWS,但有 1,243 個索引鍵已在索引鍵集中,則 @@CURSOR_ROWS 將傳回 -1243 這個值。