2020/11 の SQL Server 関連の更新情報です。
PASS Summit 2020 がありましたが、Ignite で情報が発信されていましたので、PASS では大きめのアナウンスはなかったような気がします。
明日から Data Platform Summit 2020 がありますが、そちらでの情報も抑え気味かもしれませんね。
SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿
2020/11 の SQL Server 関連の更新情報です。
PASS Summit 2020 がありましたが、Ignite で情報が発信されていましたので、PASS では大きめのアナウンスはなかったような気がします。
明日から Data Platform Summit 2020 がありますが、そちらでの情報も抑え気味かもしれませんね。
今月、PASS Summit 2020 が開催されており、SQL Server ベースのデータベースエンジンに対して追加が予定されている、クエリストアヒント / Ledger という、2 つの機能の紹介が行われていました。
現在、最新バージョンの SQL Server は SQL Server 2019 CU8 ですが、このバージョンではこれらの機能の実装の片鱗を見ることはできません。
しかし、Azure SQL Database / Azure Arc Enabled SQL Managed Instance のクラウドベースの SQL Server のデータベースエンジンでは、これらの機能はまだ使用することはできないのですが、機能の実装が進んでいることが把握できる情報を確認することができるようになっています。
現在利用可能な SQL Server ベースの環境では、Azure Arc Enabled SQL Managed Instance (Azure Arc SQL MI)? が機能をより確認できそうですので、ざっくりと情報を見てみました。
調べ物をしていたところ、SQL Server で最終ページの挿入 PAGELATCH_EX 競合を解決する方法 (How to resolve last-page insert PAGELATCH_EX contention in SQL Server) というドキュメントが公開されていることに気づいたので、少しまとめておこうかと思います。
本投稿は、データベースを遅くするための8つの方法 で解説されている、「シーケンスナンバーに PK を使用する」の Right Growing Index に関してのSQL Server での基本的な考え方になります。
SQL Server / Azure SQL Database (SQL DB) で、データベースのデータファイル (mdf/ndf) に対しての書き込みの発生状況を確認するための方法として「SQL Server: Buffer Manager オブジェクト」の「Page writes/sec」の情報を調べるという手法があります。
Page writes/sec の説明は次のようになっています。
物理的なデータベース ページ書き込みが実行される 1 秒あたりの回数を示します。
SQL Server では、物理的なデータベース ページへの書き込みが発生する一般的な要因としては、次のような内容があります。
クエリストアは少し例外的なパターンですが、基本的には、メモリ上では変更されているが、データファイルには書き込みが行われていないデータを書き込み、ディスクに永続化する際に Page writes/sec が発生します。
ただし、特定の状況下では、非効率な SELECT によっても Page writes/sec が発生するケースがあります。
2020/11/9~13 の期間で開催されていました。
今年は全セッションがオンライン化された Virtual Summit として開催されており、Keynote についても、開催時間に合わせての事前録画の公開となっていました。
仕事の関係でリアルタイムで参加はできていないのですが、録画で内容を確認することができましたので、発表内容をまとめておきたいと思います。
2020/9 に Ignite 2020 があったばかりですので、その時のアナウンスと重複しているものが多いですね。
来週から 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>
この情報から、キャッシュされているパラメーター化クエリの実行プランは、どのようなパラメーターによって、生成されたのかを確認することができます。
Ingite 2020 でアナウンスが行われましたが、「新しく作成した」Azure SQL Managed Instance (MI) に関してはグローバル VNET ピアリングがサポートされるようになります。
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 関連の情報がアップデートされていますのでまとめて。
公式の情報は Microsoft Ignite 2020 Book of News から確認でき、日本語版 も公開されています。
データ関連の全体的なアナウンスについては、次の記事とセッションを見ると良いかと思います。
Making sense of Azure and Azure Arc deployment options for SQL Server で公開されていますが、Azure 上で動作する SQL Server ベースの環境もだいぶ増えましたね。