時代に即したMySQレの新機能:PLEASE句 が面白そうだったので、SQL Server で実装してみました。
SQL Server / SQL Database の行のバージョン管理の基本動作
SQL Server / Azure SQL Database では、行のバージョン管理 (RLV : Row Level Versioning) と呼ばれる機能を使用することができます。
通常、データのアクセス時にはロックが取得され、特定のアクセスパターンでは、検索についても同時実行性の低下につながることがあります。
SQL Server のデフォルトの設定では、検索時にもロックが取得され、更新系の処理が実行されている場合は、ロック競合により、検索がブロックされる動作が行われることがあります。
このような検索時の同時実行性の低下を抑えるため、SQL Server では行のバージョン管理という機能を使用することができます。
これは、MVCC (MultiVersion Concurrency Control) により、読み取り時にはロックを取得しないようにすることで、読み込みと書き込みが同時に行われていても、競合を発生させず、同時実行性の低下を抑えることができる機能となります。
Azure SQL Database では、この機能はデフォルトで有効になっているのですが、SQL Server では 2005 から実装が行われたものとなり、現時点の最新バージョンの SQL Server 2019 でもデフォルトでも無効な状態となっています。
本投稿では、SQL Server ベースの環境で、MVCC を実現するための行のバージョン管理がどのように実装されているのかを見ていきたいと思います。
2021/3 の SQL Server / SQL Database 関連の更新情報
2021/3 の更新です。
Ignite 2021 関連の発表が多いですね。
情報を把握するために本日、一度投稿しましたが、月末にも再度更新しようと思います。
SQL Server のクエリ実行プランのコスト値について
SQL Server のクエリ実行時に取得することができる実行プラン (実行計画) の中には、「コスト」という情報が出力されています。
代表的な項目としては、サブツリーの推定コストや、グラフィカルな実行プラン内のコストのコストの比率の情報となるのではないでしょうか?
本投稿では実行プラン内のコストがどのような情報を表しているものなのかの情報を確認していきたいと思います。
本投稿を書いた理由ですが「Nick’s Machine」という用語を思い出すためだったりしますが。
Microsoft.Data.SqlClient 3.0 Preview 1 で設定可能な再試行ロジックが追加されるようです
本日、次の 2 つのアナウンスがありました。
- Released: Microsoft.Data.SqlClient 3.0 Preview 1
- Introducing Configurable Retry Logic in Microsoft.Data.SqlClient v3.0.0-Preview1
Microsoft.Data.SqlClient 3.0 では、ユーザーが設定可能な再試行ロジックを利用することができるようになるようです。
非クラスター化インデックスのキー項目の変更時の処理オーバーヘッド
非クラスター化インデックスのキー項目を変更した場合、どのようなオーバーヘッドが発生するかについてまとめておきたいと思います。
SQL Server の並列クエリのコスト閾値について
SQL Server には、cost threshold for parallelism という、並列プランを使用するかの閾値のオプションがあります。
クエリのコスト プランが cost threshold for parallelism の現在の値より小さくても、並列プランが選択されることがあります。 並列プランまたは直列プランのどちらを使用するかが、最適化プロセスの初期段階で算出されたコストの推定値に基づいて決定された場合に、このようなことが起こります。 詳細については、「クエリ処理アーキテクチャ ガイド」をご覧ください。
と記載がある通り、この設定よりコストが小さくても並列プランが選択されることがあるようですが、並列プランを使用するかどうかを判断する要因の一つとなります。
本投稿では、並列のコストについてみていきたいと思います。
並列クエリについては 並列クエリ処理 が公式のドキュメントで情報がまとまっているものになるかと。
Power Automate Desktop で Excel に SQL を実行する
先日開催された、緊急開催!Windows 10なら無料で出来るPower Automate Desktop勉強会! に参加させていただいた際に、チャット欄で SQL を使用した Excel の操作というコメントがありました。
Power Automate Desktop (PAD) には、データベースについての次のようなアクションがあります。
SQL Server に対してのデータベース接続は試していたのですが、それ以外のデータベース接続については試したことが無かったので、この機会にデータベースのアクションを使用した Excel の操作について試してみました。
PAD には、Excel を操作するためのアクションがいくつか提供されており、本投稿のように、データベースのアクションを使用しなくても Excel の操作は可能です。
Excel の操作については、Excel がインストールされていないと使用することはできませんが、データベースのアクションを使用した Excel の操作については、Excel がインストールされていない環境でも利用することが可能です。
Power Automate Desktop の無償版のフロー操作時のキャッシュ
Power Automate Desktop (PAD) の無償版を使用する場合、フローの実行 / 編集時には情報がキャッシュされているようなので、ざっくりとまとめておきたいと思います。
(有償版も同じだと思いますが未確認)
Synapse の専用 SQL プールへの移行に活用できる Synapse Pathway を試してみる
Ignite 2021 で、発表された内容の中に Synapse Pathway がありました。
Synapse Pathway は Azure Synapse Analytics の専用 SQL プールに移行するための、SQL のコード変換を行うことができるツールとなっています。
2021/3/10 時点では、次の環境のオブジェクトの変換を行うことができるようになっています。
- IBM Netezza
- Microsoft SQL Server
- Snowflake
今後、Amazon Redshift / Google BigQuery / Teradata のサポートも予定されているようですね。
日本語化されたドキュメントも Azure Synapse Pathway プレビューの概要 で公開されましたので、SQL Server からの変換を使用して、機能を試してみたいと思います。
Synapse Pathway はクラウドサービスではなく、スタンドアロンのツールとして提供されており、実行環境にツールをインストールする必要があります。
モジュールのダウンロード / インストール方法は本投稿では触れていません。
ツールの導入方法については、、Azure Synapse Pathway プレビューのダウンロード を参照してください。
インストーラーをダウンロードしてセットアップをぽちぽちするとインストールされます。