質問
Oracle 10gで長時間実行されるクエリの残り時間を推定する機能を見たことがありますが、これがSQL Serverでも可能かどうか(少なくとも2008年か?)
数千万の行(インデックス付きなど)を含む非常に大きなテーブルがあり、特定の行を検索する必要があるとします。時間がかかることはわかっていますし、それでいいのですが、ユーザーに何らかのプログレスバーを提示したいと思います。
進捗状況を表示するにはどうすればよいですか
解決
私はそれを忘れて、回転する円を置くだけです!
ただし、MrTellyのアイデアをさらに進めるために、特定のクエリの平均実行時間を示すことができる動的な管理ビューがあります。
http://msdn.microsoft.com/en-us/library /ms188754.aspx
編集: Adam Machanicのsp_whoisactiveプロシージャの完了率を確認しました。たぶんそれはもう一つの検討すべき場所です。 SQL 2016には、プランキャッシュ情報を保持するクエリストアがあります。これは、再起動時にクリアされるdmvプランキャッシュの代わりです。
他のヒント
関連:
今日のデータベースシステムは、ユーザー/ DBAにほとんどフィードバックを提供しません。 SQLクエリの実行がどれだけ完了したか。長い間 クエリを実行すると、そのようなフィードバックは非常に役立ちます。たとえば、 クエリを終了するか、実行を許可するかを決定するのに役立ちます 完了まで。上記の要件は簡単に表現できますが、 クエリ実行の進行状況の堅牢なインジケータの開発は 挑戦。この論文では、上記の問題を研究し、現在の 効果的な進捗推定の基礎を形成できる技術。 Microsoftの手法を実験的に検証した結果 SQL Serverは有望です。
これを自動的に行うツールは知りませんが、いくつかの選択肢があります。クエリをブロックに分割します...
select blah from table where IdRange between (1 and 100000)
select blah from table where IdRange between (100001 and 200000)
各SQLが完了すると、進行状況バーを更新します。
または、選択ごとにかかった時間を記録し、それらの値をユーザーごとに保存することもできます。次に、その情報を使用してプログレスバーの長さを返します。
これらのアプローチはどちらもかなり気味が悪く、誰かがより良いアプローチを知っていることを願っています。
もちろん、クエリプランを解読し、それに基づいて判断を下すことはできますが、コードでは困難です。