SE の雑記

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

Archive for the ‘SQL Server’ Category

windbg を使用して WAITFOR DELAY の挙動に関与してみる

leave a comment

SQL Server の特定の待機を意図的に誘発させたり、特定のスレッドを一時的にフリーズさせて挙動を確認させる際に windbg を使用することがあるのですが、windbg で SQL Server を操作する際「WAITFOR DELAY」を題材にしてみると、操作方法を理解するのに役に立つ気がしたので、操作の流れをまとめておこうと思います。

本投稿は、windbg の導入の基本的な操作の把握や、SQL Server に関連するパブリックシンボルの設定については完了している前提となっており、それ以降の操作を記載しています。

Read the rest of this entry »

Written by Masayuki.Ozawa

1月 9th, 2022 at 11:25 am

Posted in SQL Server

Tagged with

SQL Server のクエリオプティマイザを学習する際に確認するドキュメント

leave a comment

あけましておめでとうございます。2022 年最初の投稿ですね。

今年は SQL Server のクエリオプティマイザ周りのスキルを延ばそうと思っているのですが、その中で、どのようなドキュメントを最初に確認したほうが良いのかを軽くまとめてみました。

SQL Server のクエリ実行についてはざっくりと書くと、

  1. Algebrizer によるクエリの解析とクエリプロセッサツリー (論理操作) / クエリハッシュの出力
  2. クエリオプティマイザによる物理操作の選択と最適化
  3. クエリ実行

というようなステップが踏まれると思いますが、これらのクエリ実行の流れの動作を把握するために一読しておいたほうが良いドキュメントを箇条書きでまとめたものとなります。

Read the rest of this entry »

Written by Masayuki.Ozawa

1月 3rd, 2022 at 11:11 pm

Posted in SQL Server

Tagged with

SQL Server の UTF-8 サポートのデータストアへの格納と取得について

leave a comment

SQL Server のクライアント/サーバー間のデータ通信に使用される文字コードについて に書いた内容と近いものとなりますが、自分の中で情報を整理しておきたいと思ったので投稿を遺しておきたいと思います。

SQL Server 2019 で UTF-8 のサポート が追加されており、SQL Server が UTF-8 をどのように取り扱うかについての確認となります。

SQL Server の文字の取り扱いについては、Windows / SQL Server の両観点から情報を確認する必要があるかと思いますので、次の情報も参照するとよいかと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

12月 31st, 2021 at 9:01 pm

Posted in SQL Server

Tagged with

Windows 11 / Windows Server 2022 で NVMe にインストールした OS のシステムドライブに SQL Server のインストール時にエラーが発生する件について

leave a comment

先日公開された 4 KB を超えるシステム ディスク セクター サイズに関連するエラーのトラブルシューティング で解説が行われていますが、Windows 11 / Windows Server 2022 に対して SQL Server をインストールしようとするとエラーが発生するという事象が報告されています。

SQL ServerでのWindows で Windows 11 / Windows Server 2022 でサポートされる SQL Server については記載されていますが、各 OS がサポートする SQL Server をインストールしようとした場合に、サポートされるバージョンの組み合わせでも環境によっては、インストール時にエラーが発生するケースがあるというのが、現在発生している問題となります。

これについては Answers の SQL Server 2019 – Windows 11 でも報告が行われており、どのような事象が発生するかについては、上述の情報だけでなく、こちらのフォーラムの投稿も参考になるのではないでしょうか。

私は気づいておらず、教えていただいた情報となるのですが、日本語のフォーラムでも SQL Server 2012 インストール失敗 FMVF77F3B で話題になっていたようですね。

エラーの内容としては、インストール時に次のような画面のエラーが発生し、SQL Server のバイナリの配置はある程度完了しているのですが、SQL Server のサービスが起動しないという事象が発生します。

のエラーが発生した場合、SQL Server のインストールは完全には完了しておらず、この状態でエラーを回避するように設定しても動作しないため、一度アンインストールをする必要があります

image

SQL Server データベース エンジン サービス インスタンス機能 のインストール エラー
データベース エンジンの復旧ハンドルの待機に失敗しました。考えられる原因については、SQL Server エラー ログを参照してください。

この際、OS のイベントログのアプリケーションには、次のようなエラーが出力されているようです。

同期 IO に戻す必要のある不均衡なログ IO が 256 個あります。現在の IO はファイル C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf にあります。

sqlservr (776,P,98) SoftwareUsageMetrics-Api:  ファイル システムは、C:\Windows\system32\LogFiles\Sum\ のログ ファイルに、サポート対象外のセクターサイズ 32768 があるため、代わりに 4096 のセクター サイズを使用することを報告しました。これにより、トランザクションの持続性が失われる可能性があります。

SQL Server の ERRORLOG には、「同期 IO に戻す~」のメッセージの英語表記の情報が出力されています。

There have been 256 misaligned log IOs which required falling back to synchronous IO.  The current IO is on file C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf.

 

冒頭で紹介したドキュメントに記載されていますが、SQL Server がサポートするのは、512 バイト / 4 KB のネイティブセクターサイズとなっており、次の技術情報で詳細が記載されています。

本エラーは、SQL Server がサポートするネイティブセクターのサイズ以外が指定されたドライブに対して、SQL Server をインストールをしようとしたためにエラーが発生しているというのが根本原因となるようです。

 

Read the rest of this entry »

Written by Masayuki.Ozawa

12月 26th, 2021 at 11:55 pm

SQL Server ベースの環境の各種操作とアクセスの I/O (ブロック) サイズについて

leave a comment

SQL Server ベースの環境で使用するストレージの性能検証をする際ですが、

  • SQL Server をインストールせずに検証を行う場合には、DISKSPD を使用する
  • SQL Server をインストールしてクエリを実行して検証を行う

を組み合わせて計測を行うのが、一般的な方法となるのではないでしょうか。

この方法の中で、DISKSPD を使用して検証を行う場合には、I/O サイズ (ブロックサイズ) をどのように設定をすれば、SQL Server の I/O として妥当な検証となるかを考慮する必要があります。

SQL Server で発生する各種操作の基本的な I/O がまとめれている資料は様々なものがあるのですが、その中の一つとして、What is SQL Server’s IO Block Size? があります。

この記事の中では、次のような記載があり、SQL Server の I/O のブロックサイズについて調査すると同様の情報を探すことができます。

image

DISKSPD で性能検証を実施する際には、これらの I/O サイズを参考にして負荷をかけることで、SQL Server の I/O をエミュレートしてテストを実施することになります。

Read the rest of this entry »

Written by Masayuki.Ozawa

12月 26th, 2021 at 10:23 pm

Posted in SQL Server

Tagged with

SQL Server でトランザクション分離レベルに READ COMMITTED を使用した主キーの検索で、必ずキーの共有ロックがとられるということではないというお話

leave a comment

インストールタイプの SQL Server のトランザクション分離レベルのデフォルトは SNAPSHOT が使用されない、READ COMMITTED が使用されており、データの検索を行った際にはロックが取得されるというのが有名な話だと思います。

N_NATIONKEY が主キーとなっているとき、次のようなクエリを実行した場合、どのようなロックがとられるでしょうか?

SELECT * FROM NATION WHERE N_NATIONKEY = '0'

 

READ COMMITTED が使用されているので「主キーに対しての検索なので主キーまたは検索対象のレコードに対して共有ロックが取得される」と考えることがあるのではないでしょうか?

実際には、「取得されるロックは状態によって変わるため、主キーによる検索でも、共有ロックが取得されないケースがある」というのが正解となります。

本投稿ではこの動作についてまとめてみたいと思います

Read the rest of this entry »

Written by Masayuki.Ozawa

12月 19th, 2021 at 9:07 pm

Posted in SQL Server

Tagged with

Data Migration Assistant (DMA) によるデータベース アップグレード / マイグレーション評価の応用方法

leave a comment

SQL Server のアップグレード / マイグレーションを実施する際には、SQL Server の互換性を考慮する必要があります。

SQL Server の互換性についてのドキュメントについては次のような情報があります。

SQL Server のドキュメントは 2016 以降とそれより前のバージョンでドキュメントが分かれており、バージョンによって記載されている互換性レベルのバージョンが異なっているため、いくつかのバージョンのドキュメントを組み合わせる必要があります。(SQL Server 2019 のドキュメントには、SQL Server 2016 以降の情報が含まれています)

  • 互換性レベル
  • 機能互換性
  • 現時点で非推奨とさている機能を使用しているかについては、パフォーマンスモニターのオブジェクトとしても情報が提供されており、次のカウンターの情報から使用状況を把握することもできるようになっています。

    様々な情報が公開されていますが、「自分が使用している環境でどのような非互換となる情報が該当するか」を一つ一つチェックして影響度を把握することは工数を積んで人海戦術で対応をしようとしても、抜けなく各項目の対応状況を網羅することは現実的には難しいのではないでしょうか?

    アップグレード / マイグレーションによる影響を確認するためのツールとして、SQL Server では、Data Migration Assistant (DMA) というツールが提供されています。このツールは SQL Server Upgrade Advisor の後継となり、現在の SQL Server 環境のアップグレード / マイグレーションについては、DMA が使用されます。

    このツールをアップグレード対象の SQL Server に対して実行することで、環境を変更することの影響度を評価 (アセスメント) することができ、上述した各種ドキュメントで記載されている内容に対して、どの項目が該当する可能性があるかをツールの実行で機械的に判断することができ、環境の移行に伴う問題の評価を容易に実施することができます。

    バージョンの変更 / 互換性レベルの変更についての影響度を評価することができ、新しい環境の SQL Server を使用する際の問題の把握 / 設定の変更の影響度を確認するためには、DMA の利用が推奨されています。

    本投稿では、DMA を使用した評価の応用方法についてまとめたいと思います。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    12月 8th, 2021 at 8:58 pm

    Posted in SQL Server

    Tagged with

    Ignite 2021 / PASS Data Community Summit 2021 で発表された SQL Server ベースの環境のアップデート

    leave a comment

    2021/11/3~4 に開催されていて Ignite 2021、2021/11/10~12 で開催されていた PASS Data Community Summit 2021 で SQL Server ベースのアップデートが多数発表されました。

    これらのイベントで発表されたアップデートについて一通り確認ができ、次の投稿に情報を反映しました。

    各投稿の目次が次になりますが、大小合わせると様々なアップデートがのアナウンスが行われていますね。

    Read the rest of this entry »

    PASS Data Community SUMMIT 2021 で SQL Server 2022 関連の情報の公開が行われています

    leave a comment

    2021/11/10 から開催されている PASS Data Community SUMMIT 2021 で Ignite 2021 に続き、SQL Server 2022 関連のセッションが実施され様々な情報が公開されています。

    今回が、Redgate が PASS のコミュニティオーナーになってからの初めての開催ですね。
    今回はオンライン開催で無料で参加 / 登録ができますので、興味のある方は参加してみてはいかがでしょうか。

    PASS のキーノートでは様々な新しい発表があるのですが、今回は、Ignite 2021 からの間隔が短いので、Day 1 Keynote — Bridge to a new universe: the end-to-end Azure Data Platform については、Ignite 2021 と同等の発表となっていたように思えます。

     

    PASS Data Community Summit 2021 では、Ignite 2021 内でアナウンスのあったように、SQL Server 2022 に特化している個別セッションが開催されています。

    Ignite 前後で発表された内容については Ignite 2021 で SQL Server 2022 がアナウンスされました でまとめていますので、本投稿は PASS 開催以降に新しく発表された内容に注目していきたいと思います。

    なお、PASS 2021 の各セッションのスライドについては、各セッションの URL 内の他に、 Bob Ward の One Drive で公開されているようです。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    11月 11th, 2021 at 8:55 am

    Ignite 2021 で発表のあった SQL Server / SQL Database 関連のアップデート

    leave a comment

    SQL Server 2022 については、Ignite 2021 で SQL Server 2022 がアナウンスされました で公開されている内容をまとめました。

    SQL Server 関連の情報については、これ以外にも多数のアップデートがありましたので、どのような内容が発表されたのかをまとめておきたいと思います。

    Azure 関連のアップデートについては、https://azure.microsoft.com/en-us/updates/ からも項目単位で情報を確認することができるかと。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    11月 3rd, 2021 at 9:30 am