SE の雑記

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

Archive for the ‘SQL Server’ Category

SQL Server のフィルター選択されたインデックスの利用について

leave a comment

SQL Server では フィルター選択されたインデックス (フィルター化インデックス) というインデックスを作成することができます。

このインデックスはインデックスの作成を行う際に、以下のクエリのように、インデックス作成時に WHERE 句を指定することで、特定の範囲のデータのみが含まれたインデックスを作成することができます。

CREATE NONCLUSTERED INDEX [NCIX_accesslog2_01] ON [frontdoor].[accesslog2]
(
	[time] ASC
)
WHERE ([time]>='2020-01-01' AND [time]<'2021-01-01')

フィルター選択されたインデックスは、特定のデータ範囲のみがインデックスに含まれますので次のようなメリットがあります。

  • インデックスで使用されるストレージサイズの削減
  • フィルター外のデータを追加 / 変更する場合のインデックス更新コストの削減
  • 該当データ範囲で Index Scan が発生した場合の、Scan コストの削減

特定のデータ範囲の検索向けに作成するインデックスとして便利な機能となるのですが、作成したインデックスが使用されるかどうかについては考慮が必要な点がありますので、本投稿で触れておきたいと思います。

フィルター選択されたインデックスの詳細な情報については次のドキュメントが参考となります。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 25th, 2024 at 10:34 pm

Posted in SQL Server

Tagged with

ストアドプロシージャのリコンパイルを同時実行性の低下を抑えて誘発させる

leave a comment

ストアドプロシージャを明示的にリコンパイルさせる方法として ストアド プロシージャの再コンパイル に記載されている sp_recompile を使用するという方法があります。

ストアドプロシージャはコンパイル時に指定されたパラメーターによって実行プランが生成されるため、コンパイル時に指定されたパラメーターが大多数の実行に対してマイノリティな設定の場合、頻繁に実行するクエリに対しては効率の悪い実行プランが生成されることがあります。

このような場合は、ストアドプロシージャをリコンパイルさせることで新しい実行プランを生成することがあります。

このリコンパイルを同時実行性の低下をできるだけ抑えて実行するにはどのような方法が考えられるでしょうか。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 24th, 2024 at 10:53 pm

Posted in SQL Server

Tagged with

SSMS のクエリ実行時に ARITHABORT を OFF にするだけではアプリケーションから実行しているクエリと同一にならなかった

leave a comment

SSMS からクエリを実行した場合と、アプリケーションからクエリを実行した場合の違いとして、Qiita で書いた アプリから動かすと遅いが SSMS から動かすと速いのは ARITHABORT の違いという情報の動作を理解する というような動作があります。

SET オプションが異なっていると、異なる実行プランとしてキャッシュが行われるため、SSMS とアプリケーションで同一のオプションを使用するというのが記載した内容となります。

この投稿では、「SET ARITHABORT OFF」を SSMS から実行し、アプリケーションと同一の SET オプションの状態とすることで SSMS とアプリケーションで同一のプランキャッシュを使用していました。

クエリの多重実行と SSMS から実行したクエリで同一のプランキャッシュを使用したかったので「SQLQueryStress」と「SET ARITHABORT OFF に設定した SSMS」でクエリを実行したところ、同一のプランキャッシュが使用されないという事象が発生しました。

そこで、同一の SET オプション以外にどのような要因が同一のプランキャッシュが使用されないことにつながっているのかを確認してみました。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 24th, 2024 at 7:44 pm

Posted in SQL Server

Tagged with

SQL Server のコンパイル時間とコンパイルの CPU 時間の関係について

leave a comment

SQL Server ではコンパイル時間を確認する方法としては次のような方法があります。

これらの情報からクエリのコンパイルにかかった時間を確認することができるのですが、値を正しく把握しておかないとコンパイル時間についてミスリードをする可能性があります。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 23rd, 2024 at 9:34 pm

Posted in SQL Server

Tagged with

SQL Server 2022 で SQL Server 構成マネージャーから別名を設定する方法

leave a comment

SQL Server 2022 では、SQL Server Native Client (SNAC) が削除され、SQL Server のインストールを行っても SNAC が含まれなくなりました。

本ブログでも SQL Server 2022 以降で別名を設定する方法 で取り上げましたが SQL Server 2022 で別名を GUI で設定する場合には「cliconfg.exe」を使用する必要があります。

最近知ったのですが、推奨はされないと思いますが SQL Server 2022 でも従来の方法で別名を設定することはできるようです。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 15th, 2024 at 9:54 am

FCI の SQL Server の分散トランザクションで未解決のトランザクションを意図的に作り出す

leave a comment

Always On FCI (フェールオーバークラスターインスタンス) の SQL Server の分散トランザクション (MSDTC) で、意図的に未解決(in-doubt) のトランザクションを作成して検証をしたいケースがあったので意図的に作り出す方法を。

以前は SQL Server の分散トランザクション使用時のインダウトトランザクション (未解決のトランザクション) について で作り出していましたが、FCI であればもう少しシンプルな方法で作り出すことができます。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 11th, 2024 at 11:19 pm

Posted in SQL Server

Tagged with

クラスター環境の SQL Server で MSDTC を利用する際の Windows Firewall の許可設定

leave a comment

クラスター環境 (Always On FCI) の SQL Server で MSDTC を利用した分散トランザクションを実行する際に必要となる Windows Firewall の許可設定についてのメモ。

MSDTC を設定する際の基本的な作業については、次の記事を見ておけば良いかと。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 10th, 2024 at 7:56 pm

Posted in MSDTC,SQL Server

Tagged with ,

SQLBits 2024 のオープニングキーノートで発表のあった内容

leave a comment

2024/03/19~23 の期間で SQLBits 2024 が開催されました。
この期間中は、Azure SQL Update のアナウンスもいくつか行われています。

キーノートの動画公開され、SQL Server ベースの環境について、様々な発表がありましたので関連しそうな内容をまとめておきたいと思います。
(現時点では、キーノートの最初の部分が公開されていなかったので一部キャッチアップできていない内容があるかもしれません)

全体的なアナウンスについては Expand the limits of innovation with Azure data で公開が行われていました。

Read the rest of this entry »

Written by Masayuki.Ozawa

3月 24th, 2024 at 8:34 pm

Posted in Azure SQL,SQL Server

Tagged with ,

SQL Server Management Studio 20.0 の一般提供が開始されました

leave a comment

以下の 3 つの記事で SSMS 20.0 の記事が公開されていました。

Part 1 / Part 2 は Preview リリースの記事となっていたのですが、本日公開された Part 3 で一般提供開始のアナウンスがありました。

現状、英語の URL へのアクセスが必要ですが、以下の URL から SSMS 20.0 のダウンロードと、リリースノートの確認ができます。

Read the rest of this entry »

Written by Masayuki.Ozawa

3月 20th, 2024 at 9:44 pm

Posted in SQL Server

Tagged with

データベースプロジェクトを使用した SQL Server ベースの環境の CI/CD

leave a comment

SQL Server ベースの環境向けの Visual Studio のプロジェクトとして、データベースプロジェクト があります。

このプロジェクトは当初はオフラインデータベース開発向けの機能として実装が行われていましたが、昨今は SQL Server ベースの環境の CI/CDでも活用が行われています。

データベースプロジェクトについては Visual Studio (or SSDT) だけでなく、Azure Data Studio (ADS) の SQL Database プロジェクトの拡張機能でも作成することができます。

最近、データベースプロジェクトを活用した CI/CD について調査を行っていましたので、分かった内容をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

3月 13th, 2024 at 8:52 pm