Sql-Server

OPTION (FAST 1) 實際是如何與客戶互動的?

  • May 1, 2013

這是 2 個相關的問題 1OPTION (FAST 1);

我們剛剛將我們的 ERP 數據庫從 SQL 2000 EE 升級到 2008 R2 EE,我們注意到數據庫中的阻塞增加了。我已將其範圍縮小到我認為是供應商程式碼中的違規聲明,即:

SELECT MAX(column)
FROM [table] 
WHERE <condition> 
OPTION (FAST 1);

spid 留下一個打開的事務並在表上鎖定,阻塞所有其他客戶端。但是,呼叫客戶端似乎不再與伺服器互動以告訴伺服器它已收到數據以結束會話。

閱讀有關 Query Hints 的文件,我看到了這個聲明

FAST number_rows

指定查詢已針對第一個 number_rows 的快速檢索進行了優化。這是一個非負整數。返回第一個 number_rows 後,查詢繼續執行並生成完整的結果集。

**這讓我想知道客戶端是否以某種方式中斷了通信,伺服器是否會保持事務打開,在第一n行返回後處理完整的結果集並使事務保持打開狀態?**該流程是一個內部流程,因此我無法真正看到最終使用者執行會話來執行此操作,而且這不是每次內部流程發生時都會發生的事情。但是,它只被內部程序使用。

閱讀了Remus對 SO 的回答後,對於查詢的簡單性來說,這似乎有點過分了。查看查詢,如果他們從未分組的人那裡收到多個結果,MAX那麼有些事情很可疑。

因此,當我準備與供應商合作時,我想知道是否可以開始準確地將我們的阻塞問題歸結為正在使用此查詢提示這一事實。

請隨時編輯/請求編輯,因為我知道這實際上可能不清楚。

如果它是一個返回超過 1 行的查詢,我推測供應商的某個人(回溯到什麼時候,考慮到 SQL Server 的版本)偶然發現查詢優化器在FAST被指定為提示時產生了一個更好的計劃。

由於它只返回 1 行,因此解釋可能與無限猴子定理有更多共同點,而不是理性判斷。一個小輩看到了一個提示,FAST並決定這比他的查詢不快要好。

這讓我想知道客戶端是否以某種方式中斷了通信,伺服器是否會保持事務打開,在返回前 n 行後處理完整的結果集並使事務保持打開狀態?

該查詢返回 1 行,因此沒有進一步的結果集要處理。我傾向於懷疑堆棧中還有其他程式碼會導致問題。

引用自:https://dba.stackexchange.com/questions/41265