SE の雑記

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

Archive for the ‘SQL Server’ Category

SQL Server の互換性レベル変更に伴う構文解析ツールを作成しました

leave a comment

SQL Server では 互換性レベル という概念があります。

新しいバージョンで廃止された機能については新しいバージョンで継続して利用することはできませんが、T-SQL の構文の差異であれば互換性レベルを調整することで、新しいバージョンの SQL Server でも古いバージョンの T-SQL の構文解析で動作させることが可能となります。

今回、互換性レベルの変更に伴う構文解析ツールを Codex で作成して、MSSQLCompatibilityLevelQueryChecker として公開しました。

image

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 17th, 2026 at 7:33 am

Posted in SQL Server

Tagged with

SQL Server のレプリケーションで最後のサブスクライバーを削除する際の挙動の違い

leave a comment

SQL Server のレプリケーションで、パブリケーション内の最後のサブスクライバーを削除する場合、それまでのサブスクライバーを削除するときとは異なる挙動がありましたので、調査した内容や方法をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 6th, 2026 at 9:34 pm

Posted in SQL Server

Tagged with

SQL Server の変更の追跡のクリーンアップの挙動を確認する際の参考情報

leave a comment

SQL Server では、変更の追跡 (Change Tracking: CT) の機能を使用することで、変更があった行のトラッキングを行うことができます。

CT では行の変更は次のテーブル (サイドテーブル) で管理が行われています。

  • sys.syscommittab
  • sys.change_tracking_<Object Id>

これらのテーブルは クリーンアップ により、定期的にデータの削除が行われます。

クリーンアップは、上述のリンクと Change Tracking の自動クリーンアップに関する問題のトラブルシューティング から挙動を確認することができます。

更新頻度が高いテーブルでは、サイドテーブルに格納されている行数が膨大になり、これらのクリーンアップのドキュメントに記載されている内容だけではトラブルシューティングが難しいことがあります。

本投稿では、変更の追跡のクリーンアップについてドキュメント外の情報について、参考情報をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

8月 2nd, 2026 at 8:36 pm

Posted in SQL Server

Tagged with

SQLServer 2019 CU19 / 2022 CU1 で追加された変更の追跡のクリーンアップ用トレースフラグによるクエリの変化

leave a comment

SQL Server の 変更の追跡 では、クリーンアップ プロセス で変更の内容を記録するサイドテーブル (syscommittab / change_tracking_<オブジェクト ID>) のクリーンアップが実行されます。

このクリーンアップはバックグラウンド タスクとして実行されるため、ユーザー側では実行されるクエリの制御ができないのですが、トレースフラグ TF8286 / 8287 を有効にすることでヒント句を追加することができます。

image

このトレースフラグを有効化することで、クリーンアップで実行されるクエリがどのように変化をするのかを確認してみました。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 20th, 2026 at 9:56 pm

Posted in SQL Server

SQL Server のメモリサイズによるロックエスカレーションについて

leave a comment

SQL Server でロックエスカレーションが発生する要因としては次の 2 種類があります。

  1. ロックのメモリが閾値に達した場合
  2. ロック数が閾値に達した場合

閾値については、ロックのエスカレーションのしきい値 に記載されています。

それぞれの閾値に達した場合に、ロックエスカレーションが発生し、ロックの粒度がテーブルにエスカレーションされ確保されます。

この動作により、取得されているロックの数を最小限にすることで、ロックで過剰なメモリが使用されないようにします。

TF1211 を有効にすることで、「1.」「2.」の両方のロックエスカレーションを無効にし、TF1224 を有効にすることで「2.」についてのロックエスカレーションを無効にします。

これが、ロックエスカレーションの基本的な考え方となりますが、「1.」のケースについて、きちんと理解できていなかったことが分かったので、情報をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 2nd, 2026 at 8:56 pm

Posted in SQL Server

Tagged with

sys.dm_tran_locks を参照せずに取得されているロック数を把握できるかを検証する

leave a comment

SQL Server で取得されているロック数を把握する際には、sys.dm_tran_locks を参照することが多いかと思います。

ロック数が数 10 万 / 数 100 万となっている環境では、この DMV を参照して COUNT(*) をするだけでも数分かかってしまい、定期的にロック数を取得して推移を把握するということが難しいケースがあります。

この DMV を使用せず、類似のロック数を把握することができるかを検証してみました。

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 26th, 2026 at 8:30 am

Posted in SQL Server

Tagged with

SQL Server の実行プラン解析用ツール MSSQLPlanViewer を公開しました

leave a comment

Vibe Coding (Codex) で作成したツールとなりますが、SQL Server の実行プランを解析するツールとして MSSQLPlanViewer を公開しました。

.NET で作成されている Web アプリケーションとなります。

MSSQL Plan Viewer showing the graphical plan, table view, and operator details

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 15th, 2026 at 10:03 pm

Posted in SQL Server

Tagged with

Build 2026 のタイミングでアナウンスのあった SQL Server 関連のアップデート

leave a comment

Build 2026 のタイミングでアナウンスのあった SQL Server 関連のアップデートについてまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 10th, 2026 at 8:24 am

SQL Server 2025 CU5 でロックマネージャーキャッシュメモリの制御が可能となりました

leave a comment

先日、SQL Server 2025 CU5 がリリースされました。

この中に次の対応が含まれていしたので、情報をまとめておきたいと思います。

image

Read the rest of this entry »

Written by Masayuki.Ozawa

5月 29th, 2026 at 8:33 am

SQL Server の統計情報更新でテーブル内の全統計情報を更新する際の考慮点

leave a comment

SQL Server では UPDATE STATISTICS を実行することでテーブルの統計情報を更新することができます。

UPDATE STATISTICS は次のクエリのようにテーブル名のみを指定することでテーブル内の全統計情報を更新することが可能です。

UPDATE STATISTICS LINEITEM

 

このような指定をした統計情報の更新を実行する場合、「列レベルの統計」が作成されている場合には考慮点があります。

Read the rest of this entry »

Written by Masayuki.Ozawa

5月 1st, 2026 at 8:31 am

Posted in SQL Server

Tagged with