SE の雑記

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

Author Archive

SQL Server の分散トランザクション使用時のインダウトトランザクション (未解決のトランザクション) について

leave a comment

SQL Server は、MS DTC (Microsoft Distributed Transaction Cordinator) をトランザクションマネージャーとして使用して、分散トランザクションの実行を行うことができます。

分散トランザクションについては、トランザクションのロックおよび行のバージョン管理ガイド で解説が行われています。

フローについては、1.3.1.2.3.2 Transaction Enlistment and Completion になるかと思いますが、コミットを「準備フェーズ」と「コミットフェーズ」の 2 フェーズで管理を行う 2 フェーズコミット (2PC) により、トランザクションの管理が行われます。

image

SQL Server の場合、インスタンス内の複数のデータベースにまたがる処理については、管理ガイドでは次のように記載されています。

数のデータベースにまたがる 1 つのSQL Server データベース エンジン内のトランザクションは実質的には分散トランザクションです。 ただし、SQL Server インスタンスは分散トランザクションを内部で処理するため、ユーザーにはローカル トランザクションとして動作しているように見えます。

実質は分散トランザクションではあるのですが、ローカルトランザクションのように見える処理が行われるため、MS DTC は使用されずに、処理が行われていたかと思います。

リンクサーバー / トランザクションスコープ (Transaction Scope) / BEGIN DISTRIBUTED TRANSACTION 等を使用した場合、実行方法によっては、MS DTC を使用した分散トランザクションとして実行され、分散トランザクションで実行される場合には、インダウト (in-doubt) トランザクション (未解決 / 不確定 / 不定トランザクション) の発生についての考慮が必要なケースが出てきます。

コミット時のインダウトトランザクションとしては、上記の図の xa_commit の部分になるかと思います。

image

分散トランザクションに参加しているトランザクションは最終的には、トランザクションマネージャーからの commit 要求により、各トランザクションのコミットが行われますが、コミットフェーズにおいて、特定のインスタンスでは、コミットが完了しなかったようなケースが発生した場合には、インダウト トランザクションとして、不確定のトランザクションをどのように取り扱うかを決めなくてはいけません。

インダウト トランザクションは 2PC の特定のタイミングでトランザクションを未確定にしなくてはいけないのですが、意図的に発生させる方法について残しておきたいと思います。

なお、windbg を使用して無理やり発生させていますが、本投稿では windbg の使用方法などについては触れませんのでご了承ください。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 14th, 2021 at 10:13 pm

Posted in SQL Server

Tagged with

SQL Call Stack Resolver を使用した SQL Server のコールスタックの分析

one comment

SQL Server のコールスタック (Call Stack) を確認にはいくつかの方法が利用することができます。

一番詳細な確認としては、WinDbg で確認する方法になるのではないでしょうか。
image

それ以外には、Windows Performance Analyzer を使用する方法や、

image

Process Monitor / Process Explorer を使用する方法です。

image

これ以外の一つが「拡張イベントの Call Stack を SQL Call Stack Resolver を使用して確認する」という方法です。
拡張イベントの Call Stack については、他の方法でも確認することができるのですが、SQL Call Stack Resolver を使用する方法が容易かと思います。

本投稿では、SQL Call Stack Resolver を使用すると、どのように Call Stack が確認できるかを紹介したいと思います。
私は Windows の SQL Server でしか使っていないのですが、SQL Server on Linux (Docker 含む) で取得した拡張イベントに対しても、Call Stack の解決はできていそうでした。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 8th, 2021 at 9:57 pm

Posted in SQL Server

Tagged with

Tools and Documents for fault analysis in SQL Server-based environments

leave a comment

Tools and Documents for fault analysis in SQL Server-based environments.

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 7th, 2021 at 11:02 am

Azure Arc Enabled SQL Managed Instance の高可用性構成 (包含可用性グループ)

leave a comment

Azure Hybrid and Multicloud Digital Event で Azure Arc Enabled SQL Managed Instance (MI) の一般提供開始 (General Availability : GA) が、 2021/7/30 と発表がありました。

image

Arc に関連するサービスとしては、

  • Azure Arc Enabled Windows / Linux
  • Azure Arc Enabled Kubernetes
  • Azure Stack HCI
  • AKS on Azure Stack HCI

が既に GA しており、今回 MI が GA となったことで、Arc 上で動作させることができる SQL Server ベースの RDBMS についても SLA がある状態で利用することができるようになりました。

AKS on Azure Stack HCI と組み合わせることで、Windows 環境をホスト OS として使用した Kubernetes を構築することもできますので、Windows ベースで MI を使用することもできます。(と言っても、Hyper-V 上のゲスト OS として Linux を動かして Kubernetes を構築していますので、実際には Linux 上で構築されているのですが)

料金についても、Azure Arc pricing はまだ更新されていないようですが、イベント内で発表がありました。

image

今回 GA として提供されるのは、汎用目的 (General Purpose : GP) となりますが、vCore 単位の課金となるようですね。

7 月に GA となりますが、現在、プレビューとして公開されているすべての機能が GA となるわけではないようで、いくつかの機能については、段階的に GA となるようです。

image

Azure Arc Enabled SQL Managed Instance では、現時点のロードマップでは、7 月に Preview / 10 月に GA となる、AlwaysOn 可用性グループで、高可用性構成をとることができるのですが、今まであまり真面目に調べていませんでしたので、今回 GA するということで、関連情報のキャッチアップを含め調べてみました。

今回発表のあった内容は Bring cloud experiences to data workloads anywhere with Azure SQL enabled by Azure Arc から確認できます。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 4th, 2021 at 11:45 pm

Windows 11 で必須になるかもしれない TPM についてのメモ

one comment

Windows 11 で TPM 2.0 (Trusted Platform Module) が必須になる (初期公開の Insider Preview では CPU / TPM の最小要件が緩和されていますが、一般手開始されたタイミングでどうなるかは現時点では不明です) のではという話があり、TPM についての話題が一瞬ですが上がる機会が多くなってきました。

ということで TPM についてのメモを。

手元に Thinkpad T440s (20AQ0094JP) がありましたのでこちらを例にして。
この Thinkpad は、2014年6月3日 に発売され、2020年7月3日 に保守が終了しており、7 年前のラップトップとなりますので機種として古めです。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 1st, 2021 at 8:03 pm

SQL Database でリージョンで利用可能なエディションを取得する

leave a comment

SQL Database には、DTU / vCore でいくつかのエディション (Standard / Premium / GP / BC 等) が提供されていますが、リージョンのよってはまだ使用できないエディションがあります。

DC シリーズや M シリーズが、現時点では一部のリージョンのみでしか展開ができないものとなります。

自分が使用したいリージョンで展開されているエディション / 使用したいエディションが展開されているリージョンについて、調べる方法について軽くまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

7月 1st, 2021 at 9:42 am

Posted in SQL Database

Tagged with

Next Version Windows (Windows 11 / Windows Server 2022) のドキュメント

leave a comment

今朝、イベントでアナウンスがあり Windows 11 についての発表がありました。
数か月前に、Windows Server 2022 についての発表もあったかと思いますので、これらの OS の公式ドキュメントと Windows 11 のアナウンスのリンクを残しておこうかと。(週末見るようとも言います)

Windows 11

アナウンスやブログ

Windows Server 2022

アナウンスやブログ

Written by Masayuki.Ozawa

6月 25th, 2021 at 8:54 am

SQL Database のクエリストアヒント (プレビュー) について

one comment

Query Store Hints Preview でアナウンスがありましたが、SQL Database でクエリストアヒントがプレビュー機能として使用できるようになりました。

今まで、クエリストアを使用した実行プランの補正としては、プランの強制という機能があり、同一のクエリで複数の実行プランがある場合、特定のプランを使用するようにプランを強制することができました。

image

この機能を実行プランの補正に使うことができたのですが、プランの強制は「強制したい実行プランの情報がクエリストアに格納されている」必要があり、使用したい実行プランの情報がクエリストア上に格納されている必要がありました。

今回使用できるようになった「クエリストアヒント」については、クエリストアに格納されている実行プランのクエリについて「クエリヒントを適用することができる」機能となっており、「強制したいプランがクエリストアに存在していない」状態でも、プランの補正を柔軟に実施することができます。

類似の機能としては「プランガイド」を使用して、クエリヒントをアタッチすることができましたが、クエリストアヒントはプランガイドより容易にクエリヒントを適用することが可能です。(プランガイド、設定するのに少し手間がかかるんですよね…。)

公式のドキュメントは次の内容を確認してください。

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 24th, 2021 at 11:45 pm

日本語版の SQL Server の文字コードの基本

leave a comment

日本語版の SQL Server をインストールした環境の文字コード / 文字コードに関連するドキュメントについてまとめておきたいと思います。
今回はインストールタイプ (Box) の SQL Server を日本語版でインストールした環境をベースに考えていますが、これは、SQL Server のデータベースエンジンをベースとしている環境で共通の考え方になります。

過去のバージョンの情報にはなりますが、次の情報も参考になります。

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 21st, 2021 at 10:53 pm

クエリストアのサイズベースクリーンアップの基本動作について

leave a comment

SQL Server のクエリストアには「サイズベースクリーンアップ」という機能があります。
これについては、クエリ ストアを使用する際のベスト プラクティス に次のように記載が行われています。

重要

[最大サイズ (MB)] の制限は、厳密には適用されません。 ストレージ サイズは、クエリ ストアでディスクにデータが書き込まれる場合にのみ確認されます。 この間隔は、 [データのフラッシュ間隔 (分)] オプションによって設定されます。 クエリ ストアでストレージ サイズの確認の合間に最大サイズの制限を超えた場合は、読み取り専用モードに移行します。 [サイズ ベースのクリーン アップモード] が有効になっている場合は、最大サイズの制限を適用するクリーンアップ メカニズムもトリガーされます。

クエリストアの設定には最大サイズを指定する必要があり、この最大サイズに達した場合に、サイズベースのクリーンアップを行うことができます。(デフォルトはサイズベースクリーンアップが有効)

image

この動作について調べる必要があったので、確認した内容をまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

6月 19th, 2021 at 8:11 pm

Posted in SQL Server

Tagged with