Oracle 10gで、長時間実行されるクエリの残り時間を推定する機能を見てきましたが、これがSQL Serverでも可能かどうか疑問に思っていました(少なくとも2008年は?)。
数千万行(適切にインデックス付けされているなど)の非常に大きなテーブルがあり、特定の行を検索する必要があるとします。かなり時間がかかることは承知しており、それでかっこいいですが、ユーザーに何らかのプログレスバーを提示したいと思います。
どうすれば進捗状況を表示できますか?
Oracle 10gで、長時間実行されるクエリの残り時間を推定する機能を見てきましたが、これがSQL Serverでも可能かどうか疑問に思っていました(少なくとも2008年は?)。
数千万行(適切にインデックス付けされているなど)の非常に大きなテーブルがあり、特定の行を検索する必要があるとします。かなり時間がかかることは承知しており、それでかっこいいですが、ユーザーに何らかのプログレスバーを提示したいと思います。
どうすれば進捗状況を表示できますか?
私はそれを忘れて、回転する円を置きます!
真剣に、MrTelly のアイデアをさらに進めるために、特定のクエリの平均実行時間を表示できる動的管理ビューがあります。
http://msdn.microsoft.com/en-us/library/ms188754.aspx
編集: Adam 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が完了すると、進行状況バーが更新されます。
または、選択したものごとにかかった時間を記録し、それらの値をユーザーごとに保存することもできます。次に、その情報を使用してプログレスバーの長さを返します。
これらのアプローチはどちらもかなり厄介です。うまくいけば、誰かがより良いアプローチを知っています。
もちろん、クエリプランを解読し、それに基づいて判断を下すこともできますが、コードでは難しいでしょう。