Archive for the ‘SQL Database’ Category
2020/10 の SQL Server / SQL Database 関連の更新情報
来週から PASS Summit 2020 が開催されますが、その前に、先月の更新情報を確認しておかないとなと思いチェックしてみましたとさ。
更新情報のまとめは、毎週は無理なので月次でやろうと思いました(遠い目)
「実行中のクエリ」で実行時のパラメーターを取得する
SQL Server でパラメーター化クエリ (パラメータークエリ) を使用した場合、「クエリコンパイル時のパラメーター」を意識することがあるかと思います。(パラメーター化クエリだけでなく、ストアドプロシージャも同様ですが)
これは、「パラメーター スニッフィング」という、クエリのコンパイルが発生した際に、コンパイル時に使用されたクエリのパラメーターを傍受し、オプティマイザーがクエリの最適化を行うためです。
次のクエリを実行したタイミングでコンパイルが発生したとします。
sp_executesql N'SELECT * FROM LINEITEM WHERE L_ORDERKEY >= @orderkey', N'@orderkey int', @orderkey = 300000000
この場合、パラメーター スニッフィングにより、「@orderkey = 300000000」というパラメーターによって最適化されたクエリとしてコンパイルが行われます。。
今回は上記のクエリのハッシュ値がわかっているため、キャッシュされているクエリの情報を取得してみます。
SELECT qp.query_plan FROM sys.dm_exec_query_stats AS qs OUTER APPLY sys.dm_exec_query_plan(plan_handle) AS qp WHERE query_hash = 0x3B2744F6B4DC1A74
キャッシュされているクエリの実行プランには、「パラメーター リスト」という情報が含まれています。
実行プランの XML で確認した場合には、次のような情報です。
<parameterlist> <columnreference Column="@orderkey" ParameterDataType="int" ParameterCompiledValue="(300000000)"></columnreference> </parameterlist>
この情報から、キャッシュされているパラメーター化クエリの実行プランは、どのようなパラメーターによって、生成されたのかを確認することができます。
「新しい仮想クラスターで作成された」Azure SQL Managed Instance でグローバル VNET ピアリングがサポートされました
Ingite 2020 でアナウンスが行われましたが、「新しく作成した」Azure SQL Managed Instance (MI) に関してはグローバル VNET ピアリングがサポートされるようになります。
Ignite 2020 の SQL Server / SQL Database のセッション
Ignite 2020 で発表された SQL Server / SQL Database 関連の更新情報 はアナウンスのあった情報ですが、セッションについても確認できた内容から、少しずつまとめていこうかと。
Azure SQL Family の更新情報については、Azure SQL: What to use when and updates from the Product Group のセッションでまとめられており、最新のアップデートについて紹介が行われています。
Ignite 2020 で発表された SQL Server / SQL Database 関連の更新情報
Ignite 2020 に合わせて SQL Server / SQL Database 関連の情報がアップデートされていますのでまとめて。
公式の情報は Microsoft Ignite 2020 Book of News から確認でき、日本語版 も公開されています。
データ関連の全体的なアナウンスについては、次の記事とセッションを見ると良いかと思います。
Making sense of Azure and Azure Arc deployment options for SQL Server で公開されていますが、Azure 上で動作する SQL Server ベースの環境もだいぶ増えましたね。
検証目的で UPDATE STATISTICS で統計情報を手動で書き換える (update_stats_stream_option)
本投稿の内容を使用すると、クエリの実行プランに大きく影響を与えますので、検証目的でクエリの実行プランを変更する場合以外、本投稿の内容は使用しないでください。
ドキュメントにも「サポートされていない」ことが明記されており、本番環境で実行して、クエリの実行に大きく影響を与えても一切の責任は取りません。
クエリの実行に影響があると、本業務に影響を与える環境に対して実施する場合は自己責任で実施してください。
ということで、検証以外では、本投稿の内容は使用しないでください。
この投稿の内容は、クエリの実行プランが大きく変わり、性能にダイレクトに影響を与えます。
本来の目的はクローンデータベースを作成する際に、検証目的で統計情報の復元を行うためのものですので、統計情報の固定に使おうとすると、予期せぬ動作を引き起こす可能性が十分にあります。
非クラスター化インデックス作成時の処理状況 (進行状況) を確認する
以前書いた、SQL Server のクエリプロファイリングの活用 の応用ではありますが、この方法は、非クラスター化インデックスを新規に作成するときにも活用することができます。
Enterprise Edition であれば、オンラインのインデックス操作でインデックスを作成することもできますが、データ量が大きい場合、実際のインデックス作成の状況がどこまで進んでいるのかを確認したいということはあると思います。(クエリの処理状況がわかると、メンテナンス作業を実行している最中の心理的安定性にもつながりますので)
クエリ プロファイリング インフラストラクチャ の機能を使用しており、SQL Server 2016 SP1 / Azure SQL Database であれば、オーバーヘッドを抑えて使用することができるかと。