使用して複数のクエリを実行するスクリプトを作ってみました。Invoke-ParallelQuery.ps1「複数のセッションからクエリ実行したときの、あの動き、どうだったっけ?」というのを確認するために、ざっくり作ったものなので、時間のある時に清書しようかと。数ミリ秒で終わってしまうものですと、実行タイミングがかぶることが無く、あまりこのスクリプトを使う必要はないのですが、「数秒以上かかるメンテナンスのクエリが実行されている最中に、他のクエリを実行するとどうなるか?」というような用途での利用を想定したものです。同一のクエリを複数セッションで実行する方式となり、異なるクエリを同時に実行するためには、複数ツールを起動した状態にしなくてはいけないので、その部分を簡易的に埋める目的もあったりしますが。専用となっているところもどこかで対応したいですねぇ。使用の例ですが、次のような実行をすることができます。@Paramこの指定で実施している内容ですが、次のような内容となります。するようになっています)これは、オフラインのインデックスメンテナンスを実施した場合の、ロック競合の状況を取得するようなクエリパターンですね。秒でタイムアウト」というような設定も可能です。次のような内容が表示されます。66」は、インデックスの再構築をオフラインで実行しているセッションのロックになるのですが、この際には「Sch-M」のロックが取得されているため、それ以外のセッションで実行されたクエリのロックの状態が「WAIT」になっていますので、「オフラインの非クラスター化インデックスの再構築中にはロック競合が発生し、他の処理の同時実行性に影響を与えている」ことが確認できますね。実行時間については、次のような順になっています。ことが確認できますね。実行のタイミングによっては、次のような処理実行順になることもありますが、インデックスの再構築が、同時実行性を低下させているという状況に変わりはありません。(ONLINE=ON)」に変更すると、処理時間が次のように変わります。実行については、先ほどより短い実行時間で完了していることが確認できますね。実行時間については、先ほどより処理時間が増加していることが確認できます。クエリのパターンはほかにもありますが、このように複数のクエリを数ミリ秒違いで前のクエリが完了する前に連続的に実行することができますので、メンテナンス系の処理による影響や、同時実行をした場合の処理の動作確認に簡易的に利用することができます。他の実行パターンとしては、次のような実行もできます。クエリ登録しています。これを実行すると、次のような処理結果になります。クエリはエラーになっています。今回、実行に時間のかかるクエリを実行しているのですが、「MaxPoolSize」はデフォルトから変更していないため、「100」が利用されています。接続についてはクエリを実行することができずにエラーとなっています。$true;」のスイッチを設定することで、コネクションプールを無効にすることができますので、この場合は接続のコストと引き換えにすべての処理を完了させることもできたりはします。他のパターンとしては、「UniqueAppName」というスイッチを使用することもできます。指定されますので、各実行で異なる接続文字列が使用されることになります。回繰り返すことになります)、新しい接続が作成されていることが確認できるかと。直近で自分が説明する機会がありそうなものを実装したものとなりますが、パターンを考えることでいろいろな利用ができるかと。チューニング等をメインにしていますが、本ブログで情報発信している内容に関することでしたら対応できます。お仕事のご相談がありましたらTwitterfacebookやブログのコメントでご連絡いただけると幸いです。ブログにコメント頂いた内容は私が承認しない限り表示されません。受賞させていただきました。本ブログの内容は個人的に検証したものとなり、検証結果を含め記載している内容を保証するものではありません。体験記の連載をさせていただきました。最後まで飲み切れず...。