我在Oracle 10g中看到了一個估計長時間運行查詢的剩餘時間的功能,我想知道這是否也可以在SQL Server中使用(至少在2008年?)?SQL Server中的查詢持續時間估計
假設我有一個有數千萬行的非常大的表(以及索引等等),我需要搜索一些特定的行。我知道這需要很多時間,我很酷,但我想向用戶展示某種進度條。
如何顯示進度?
我在Oracle 10g中看到了一個估計長時間運行查詢的剩餘時間的功能,我想知道這是否也可以在SQL Server中使用(至少在2008年?)?SQL Server中的查詢持續時間估計
假設我有一個有數千萬行的非常大的表(以及索引等等),我需要搜索一些特定的行。我知道這需要很多時間,我很酷,但我想向用戶展示某種進度條。
如何顯示進度?
我會忘記它,只是把一個旋轉的圓圈!儘管如此,爲了進一步考慮MrTelly的想法,有一些動態管理視圖可以爲某些查詢提供平均執行時間 - 也許這可以讓你在某個地方。
http://msdn.microsoft.com/en-us/library/ms188754.aspx
編輯: 我已經看到了完成百分比從亞當Machanic的sp_whoisactive程序。也許這是另一個需要研究的地方。 SQL 2016具有持久存儲計劃高速緩存信息的查詢存儲 - 替代dmv計劃高速緩存,在重新啓動時將其清除。
我不知道會自動執行此操作的工具,但有一些替代方法。打破你的查詢塊...
select blah from table where IdRange between (1 and 100000)
select blah from table where IdRange between (100001 and 200000)
隨着每個sql完成,所以更新進度條。
或者您可以記錄每個選擇所花費的時間長度,將這些值存儲在每個用戶的基礎上。然後使用該信息返回進度條長度。
這兩種方法都非常糟糕,希望有人知道更好的方法。
當然你可以嘗試破譯查詢計劃並根據這個判斷做出判斷,但是在代碼中很難。
相關:
如今的數據庫系統上 如何在SQL查詢的執行的許多人已完成很少提供反饋給用戶/ DBA。對於長時間運行的查詢, 這樣的反饋可能非常有用,例如 幫助決定查詢是否應該終止或是否允許運行 完成。儘管上述要求很容易表達,但開發查詢執行進度的可靠指標 具有挑戰性。在本文中,我們研究了上述問題,並提出了可以構成有效進度估計基礎的技術。 SQL Server的Microsoft 實驗驗證我們的技術的結果是有希望的。
如果表(一)索引良好,你正在尋找「一些」特定的行(我的意思是少數)它必須立即返回行。無論如何,很好的問題!;-) – FerranB 2009-03-05 23:52:57
即使在DataWarehouses中有良好的索引,一些生成查詢的報告也可能會花費1分鐘以上。 – 2009-03-06 00:11:26