SE の雑記

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

Archive for the ‘SQL Server’ Category

NOT NULL の列が含まれている場合に、bcp ユーティリティのネイティブ型を使用したエクスポートファイルがインポートできないケースについて

leave a comment

SQL Server でデータのエクスポート / インポートを行う場合、bcp ユーティリティ を使用しますが、ネイティブ型 (-n オプション) を使用したファイルをインポートしようとした際に、特定の条件下でエクスポートされたデータをインポートすることができず、理由を理解するのに時間がかかりました…。

その時の調査内容を残しておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

1月 27th, 2022 at 9:20 pm

Posted in SQL Server

Tagged with

SQL Server の勉強の仕方というセッションの資料を公開しました

leave a comment

先日、How to learn SQL Server という SQL Server の勉強の仕方についてのセッションを担当させていただきました。

その際のセッション資料を How to learn SQL Server として PDF を公開させていただきました。

SQL Server の勉強をする際の参考になれば幸いです。

Written by Masayuki.Ozawa

1月 23rd, 2022 at 9:15 pm

Posted in SQL Server

Tagged with

SQL Server の VSS Writer の技術情報について

leave a comment

SQL Server のインストールを行うと、SQL Server VSS Writer (SQLWriter) サービスが合わせてインストールされ、Windows OS の Windows VSS インフラストラクチャと連携して、データベースのバックアップを行うことができます。

SQL Server 標準の BACKUP DATABASE を使用している場合は、VSS Writer との連携は意識しませんが、それ以外の方法、OS のバックアップ (Windows Server バックアップ) や、バックアップソフトのようなものを使用した場合は、SQL Server VSS Writer が透過的に使用されていることもあります。(SQL Server VSS Writer を使用したバックアップについては、BACKUP ステートメントを WITH SNAPSHOT オプションで実行しているケースがあり、厳密には BACKUP ステートメントと関連性はありますが)

この SQL Server の VSS Writer について確認する必要が出た場合、どのような技術情報が公開されているのかをまとめておきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

1月 20th, 2022 at 11:49 pm

Posted in SQL Server

Tagged with

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