SE の雑記

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

Archive for 4月, 2024

Microsoft Fabric の Synapse Data Warehouse の特性を把握するためのドキュメント

leave a comment

Microsoft Fabric の Synapse Data Warehouse は、OneLake に対して T-SQL のエンドポイントを提供し、T-SQL による既存データの参照 (SELECT) だけでなく、テーブルの作成 (CREATE TABLE) / 更新系 (INSERT / DELETE / UPDATE) を可能とする機能となっています。

Synase Analytics の Dedicated SQL Pool と Serverless SQL Pool と近しい機能がいくつか実装されています。(Data Warehouse に対してエラーが発生した際に「Synapse SQL」というメッセージが返ってくることがあるため、Data Warehouse でも Synapse の Serverless SQL プールの分散クエリのアーキテクチャは採用されているかと思いますが)

大きな変更点として実データを格納するデータストアとして、SQL Server ベースのデータベースではなく、Delta Lake が採用されているという点があるのではないでしょうか。

厳密には SQL Server のクエリエンジンを使用するため SQL Server ベースのデータベース相当のものも一部存在しているとは思いますが。

Fabric の Data Warehouse の特性を把握するために、一読しておく必要があるドキュメントとしてはどのようなものがあるかをまとめておきたい思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 26th, 2024 at 8:41 am

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

Serverless SQL プールで Azure ストレージの診断ログを検索する際の考慮事項

leave a comment

Frontdoor の診断設定で取得した、Azure ストレージ上のアクセスログを Synapse Analytics の Serveless SQL プールで検索する際にいくつかの考慮点があったため、その内容をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 21st, 2024 at 11:28 pm

Posted in Synapse Analytics

Tagged with

Synapse Analytics の Serverless SQL プールの分散処理について

leave a comment

Microsoft Fabric の Lakehouse に対して、ADL Gen2 のショートカットを設定することで、Azure ストレージ上のデータを検索するという方法を昨今の環境ではとることができるようになったかと思います。

T-SQL で検索を行う場合には、マネージドテーブルとしてショートカットを作成することになるかと思いますが、レイクハウス に記載されているように次のような制限があります。

Tables フォルダーでは、最上位レベルでのみショートカットを作成できます。 Tables フォルダーの他のサブディレクトリでは、ショートカットはサポートされません。 ショートカットのターゲットに Delta\Parquet 形式のデータが含まれている場合、レイクハウスはメタデータを自動的に同期し、フォルダーをテーブルとして認識します。

マネージドテーブル (Tables) として、ショートカットを作成する際にはサブディレクトリのサポートが行われていません。

Azure ストレージに出力している Azure リソースの診断情報を検索しようとした場合、診断情報は複数のサブディレクトリから構成されているため、Microsoft Fabric でそのままのディレクトリ構造で検索を行うことは難しく、マネージドテーブルとして認識できるディレクトリ構造に加工をして利用する必要があります。(アンマネージドテーブルとして Files 配下にショートカットを作成して、Spark で検索を行うのであれば Microsoft Fabric でも対応可能です)

Synapse Analytics の Serverless (サーバーレス) SQL プールについては、サブディレクトリが複数の構造でも検索を行うことができ、Azure ストレージに対して、T-SQL で分析を行うという場合には、Serverless SQL プールのほうが容易に活用できるケースがあります。

Synapse Analytics のアーキテクチャについては、Azure Synapse SQL アーキテクチャ に記載されていますが、当ブログで Serverless SQL プールの分散処理について触れたことが無かったため、情報をまとめておきたいと思います。

現状、一番詳細に記載されているのは POLARIS: The Distributed SQL Engine in Azure Synapse になるかと思います。

公式ドキュメントではアーキテクチャの内容と、次のドキュメントが参考になるかと。

 

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 17th, 2024 at 6:14 pm

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

Fabric の Warehouse の Delta Lake ログの発行が 2023/10 から変わっていたんだなという話

leave a comment

Fabric が Public Preview でリリースされた当初は、Warehouse に対しての変更の Delta Lake ログの発行は「Insert Only」となっていました。

そのため Microsoft Fabric のウェアハウスの Delta Lake ログ には次の制限が記載されていました。

Currently, tables with inserts only are supported.

現在、挿入のみを含むテーブルはサポートされています。

Warehouse に対して Insert を実行した場合は、Lakehouse で Warehouse のショートカットとして追加している Warehouse の結果に対しても反映が行われていましたが、Update / Delete を Warehouse に実行した場合、同期が停止されるという動作となっていました。

これにより、Warehouse で Insert 以外の変更を実行すると、以降は Lakehouse で検索を行っても期待した結果が返ってきませんでした。

最近、Fabric を触る機会があったので、このあたりの動作が今はどうなっているのか確認してみたところ、現状、この制限が解消されていたようでした。

ドキュメントの更新履歴を確認したところ 20231025 Kevin Conan – Removed insert only limitation for Delta Log Publishing で Insert のみ、同期がサポートされるという制限は撤廃されていたようです。

実際に今の Fabirc の Warehouse に対して Insert 以外の変更を実施すると Lakehouse に変更が反映されていました。

Written by Masayuki.Ozawa

4月 13th, 2024 at 9:49 pm

Posted in Microsoft Fabric

Tagged with

Azure SQL Database の SLA 未達の調査と返金要求の申請

leave a comment

私が使用している Azure SQL Database で SAL 未達の調査と返金要求の申請をする機会がありましたので、その際に実施した内容をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

4月 13th, 2024 at 6:48 pm

Posted in SQL Database

Tagged with