SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for 8月, 2020

2020/8/8~8/23 の SQL Server / SQL Database 関連の更新情報

leave a comment

定期的な更新とか、僕には無理だったんだ…。
ということで 2 週間分をまとめておこうかと。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 24th, 2020 at 9:19 am

WAIT_AT_LOW_PRIORITY と RESUMABLE を組み合わせたインデックスのメンテナンス

leave a comment

SQL Server の Enterprise Edition を使用している場合は、「オンラインでのインデックスメンテナンス」を実行することができます。

オンラインインデックスのメンテナンスの動作については オンライン インデックス操作の動作原理 で解説が行われていますが、オンラインのインデックスの最後のフェーズでは、瞬間的ではありますが、「SCH-M」のロックが取得されます。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 19th, 2020 at 10:00 pm

Posted in SQL Server

Tagged with

クエリストアで「Regular (通常実行)」として認識されるクエリ

leave a comment

SQL Server 2016 以降 / SQL Database で利用することができるクエリストアでは、実行されたクエリの種類を、

query_store_runtime_stats から、次のような内容で判断することができます。

image

アプリケーションから実行されたクエリの状態が、クエリストア上で通常実行として認識される状態の理解が少し足りていなくて、調べたので本ブログでもまとめておこうと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 11th, 2020 at 8:49 am

2020/7/27~8/7 の SQL Server / SQL Database 関連の更新情報

leave a comment

2 回目にして毎週更新ができていません (orz) が、前回更新から本日までの更新情報を。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 7th, 2020 at 8:14 am

SQL Server 2019 CU6 でクエリストアの強制 OFF が可能になりました

leave a comment

本日、SQL Server 2019 で Cumulative Update 6 (CU6) がリリースされました。

その中で興味深い改善として次の内容があります。

SQL Server 2019 CU6 から、クエリストアを無効 (OFF) にする際に、同期的なフラッシュを行うことなく、即時にクエリストアを無効化するようにできるようになりました。

How to Turn Off Query Store…in an emergency でも話題に挙げられていますね。

構文としては、次のクエリの実行が可能となるようです。

 <br />ALTER DATABASE SET QUERY_STORE = OFF (FORCED) <br />

 

追記 :

SQL Server 2016 SP2 CU12 でもこの機能がサポートされたようです。

 

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 5th, 2020 at 11:43 am

Posted in SQL Server

Tagged with ,

Azure Functions と Log Analytics による SQL Database のメトリック収集 (EZMonitor)

leave a comment

Azure Functions が PowerShell 7.0 をサポートしたこで、PowerShell をランタイムとして使用した関数で、ForEach-Object の Parallel が使用できるようになり、スクリプトブロックを並列で実行することができるようになりました。

以前は Runspace を作成して、並列処理を自分で組む必要がありましたが、ForEach-Object でシンプルな記述で並列に実行できるようになったのはうれしいですね。

このような並列処理は、DB のメトリックを取得するときの収集処理で活用することができ、メトリック収集用のクエリを一つ順次実行するのではなく、いくつかのクエリを並列で実行することで、処理時間を短縮することができ、鮮度の良い情報の取得を行うことができます。

SQL Database では、標準でいくつかの方法で情報が取得されています。

これらの標準機能を使用しても、情報の収集を行うことも、もちろん可能ですが、特定の状況かで必要となる情報が不足していることがあり、SQL Database の状態を確認するためは、追加でメトリックの収集を行う必要が出るケースがあります。

そのような場合、私は PowerShell で SQL Database に対してクエリ実行を行いメトリックの収集を行い、そのメトリックを Log Analytics に格納することで確認をしているのですが、情報を取得 / 可視化を毎回一から作るのも面倒ですので、ある程度まとまった仕組みを EZMonitor (Easy Monitor) として作成してみました。
(情報収取のクエリについては、ざっくりしたもののみ追加しているため、まだ修正の必要がありますが)

↓ GitHub のリポジトリからも、こちらのアイコンからもデプロイできます。

 

展開時に情報の取得を行う、SQL Database を指定することで、Log Analytics に取得を行ったデータを、次の画像のように可視化することができます。

image

標準では、5 秒間隔で 4 スレッドで情報を取得しており、Basic / S0 のような低い性能のサービスレベルでは、CPU の使用率を上昇させる要因になります。

CPU 使用率を上昇させた場合は、取得間隔や並列度数を調整してください。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 4th, 2020 at 9:08 am