2009-03-05 20 views
5

Oracle 10gには、長期間実行されたクエリの残りの時間を見積もる機能がありましたが、これがSQL Serverでも可能かどうか(少なくとも2008年?SQL Serverのクエリ時間の見積もり

数千万の行(インデックスなど)の非常に大きなテーブルがあり、特定の行を検索する必要があるとします。私はそれに多くの時間がかかるだろうと私はそれで涼しいが、私はいくつかの種類の進行バーを提示したいと思います。

進捗状況を表示するにはどうすればよいですか?

+0

テーブル(1つ)の索引が整えられていて、特定の行を探している場合は、行をimmediatlyで戻す必要があります。とにかく、いい質問です!;-) – FerranB

+1

DataWarehousesのインデックスが良好であっても、クエリを生成するレポートの中には1分を超えるものがあります。 –

答えて

5

私はそれを忘れて、回転円を置くだけです!

MrTellyのアイデアをさらに深めるためには、特定のクエリの平均実行時間を与える動的管理ビューがあります。おそらく、どこかであなたを得ることができます。

http://msdn.microsoft.com/en-us/library/ms188754.aspx

編集:私はアダムMachanicからsp_whoisactive手順で完全パーセントを見てきました 。多分それは見るべき別の場所です。 SQL 2016には、プランキャッシュ情報を保持するクエリストアがあります。これは、リブート時にクリアされるdmvプランキャッシュの代わりになります。

+0

素晴らしいアイデア。ユーザーのクエリに基づいて推定クエリプランを取得し、次にプランキャッシュをチェックしてそのプランが既に存在するかどうか、および平均期間がどのくらいあるかを確認できます。それは面倒です、そして、それはサーバーに負荷を追加しますが、それはうまくいくでしょう。 –

1

私はこれを自動的に行うツールは認識していませんが、いくつかの選択肢があります。クエリをブロックに分割してください。

select blah from table where IdRange between (1 and 100000) 

select blah from table where IdRange between (100001 and 200000) 

各SQLが完了すると、進行状況バーが更新されます。

あなたの選択ごとにかかる時間の長さを記録し、それらの値をユーザー単位で保存することができます。その後、その情報を使用して進行状況バーの長さを返します。

これらのアプローチは両方ともかなりクルージングです。うまくいけば誰かがより良いアプローチを知っていることを願っています。

もちろん、クエリプランを解読し、それに基づいて判断を下すことはできますが、難しいコードで行うことができます。

2

関連:

今日のデータベースシステムは完了しているどのくらいのSQLクエリの実行の 上のユーザー/ DBAに少しフィードバックを提供します。 クエリが実行されている間、このようなフィードバックは非常に役に立ちます。たとえば、 は、クエリを終了するか、実行するかを決定するのに役立ちます。 を完了します。上記の要件は簡単に表現できますが、 クエリ実行の進行状況の堅牢な指標を開発するのは です。本稿では、上記の問題点を検討し、効果的な進捗推定の基礎をなす技術を提示する。 Microsoft SQL Serverの技術を実験的に検証した結果は有望です。