SE の雑記

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

Archive for the ‘SQL Server’ tag

SQL Server のベストプラクティスについて公開されているドキュメント

leave a comment

Read the rest of this entry »

Written by Masayuki.Ozawa

11月 15th, 2022 at 9:14 am

Posted in SQL Server

Tagged with

Visual Studio パフォーマンス プロファイラーを使用した SQL Server のスタックトレースの確認

leave a comment

先日、一時テーブルとテーブル変数のパフォーマンスについて調査をしていた際に、次の情報が見つかりました。

この中で Visual Studio の パフォーマンス プロファイラー (Performance Profiler) を使用してスタックトレース (コールスタック) を取得した内容について紹介がされていました。

最近、SQL Server のスタックトレース確認をすることが多く、次の方法を使用して確認を行っていました。

  • 拡張イベントの callstack フィールド
  • WinDbg
  • xperf + WPA
  • PerfView
  • Visual Studio からの確認であればクエリを実行しながらスタックトレースを確認することができて便利そうなので、試してみました。

    今回は Visual Studio を起動している環境上で起動している SQL Server を移用しています。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    11月 14th, 2022 at 9:43 am

    Posted in SQL Server

    Tagged with

    SQL Server 2022 on Azure VM の Azure Active Directory 認証について

    leave a comment

    SQL Server 2022 の新機能として Azure Active Directory 認証 があります。

    オンプレミスの SQL Server であれば、Azure Arc 対応サーバーをインストールすることで使用できる機能なのですが、Azure VM では、Azure Arc 対応サーバーはサポートされておらず、評価目的でのみ使用することができます。

    Azure VM で SQL Server 2022 を実行した場合、SQL Server IaaS Agent 拡張機能 経由で、Azure Arctive Directory 認証をサポートする予定という話は以前から出ていたのですが、当時は具体的な設定方法は公開されていませんでした。

    今月 SQL Server 2022 Revealed が出版され読み進めているところなのですが、この書籍の中でも Azure Active Directory 認証について解説が行われています。

    最新の状況についてどうなっているのかを Azure Active Directory 認証 で改めて確認してみたところ、ドキュメントが更新されており、「または Windows Azure VM 上の SQL Server 2022) のみがサポートされています。」の記載が追記されていました。

    SQL Server 2022 on Azure VM の Azure Active Directory 認証についての情報が Azure AD 認証 (プレビュー) として公開されていたので、実際に試してみました。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    11月 13th, 2022 at 10:44 pm

    SQL Server の基数推定 (CE: Cardinality Estimation) について把握する際に必要となる情報

    leave a comment

    SQL Server では実行プランを生成する際には、統計情報を基にして、処理対象となるデータの推定 (基数推定) が行われます。

    SQL Server の統計情報は、

    • データ件数
    • 最大 200 に分割されたデータ分布 (ヒストグラム) により構成される
    • 分割の上限値 / 分割範囲の行数 / 分割の上限と同一値の行数 / 個別の値を持つ行数 / 重複する値を持つ行数の平均
    • ヒストグラムは統計情報の先頭列のみで構成され、複数列統計を作成した場合でも複数列のヒストグラムは作成されない
  • データの密度
    • どの程度ユニークな値で構成されているか (密度が 1 になっている場合は、すべてのデータが同一の値となる)
    • 複数列統計の場合、密度は列の組み合わせによって作成される
    • SQL Server 2008 との互換性維持となる情報については、統計ヘッダーの密度であり、最新の SQL Server でも列単位の密度は使われている

    が基本的な情報となり、この情報は以前の SQL Server から変化していないという認識です。

    統計情報については、STATS_STREAM (STATS_BLOB) が実際の情報となりますが、次の情報からユーザーが視認できる形で確認を行うことができます。

    与えられたクエリのステートメントに対して、この統計情報を使用して行数を推定することで、クエリの実行プランが組み立てられ、この時の処理対象となる行数の推定が基数推定 (カーディナリティ推定: Cardinality Estimation: CE) となります。

    本投稿では、この行数の推定である基数推定がどのように判断されているかを確認する際に参照する必要のある情報をまとめておきたいと思います。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    11月 6th, 2022 at 11:03 pm

    Posted in SQL Server

    Tagged with

    調査のために意図的に Non-yielding scheduler の状態を作り出す

    leave a comment

    Non-yielding scheduler エラーの調査を実施する際の参考情報 の続きの投稿となるのですが、SQL Server で Non-yielding scheduler となる状態を作り出すため、スレッドと強制的に中断状態にして

    • リングバッファーに RING_BUFFER_NONYIELD_COPIEDSTACK を出力
    • 拡張イベントに scheduler_monitor_non_yielding_ring_buffer_recorded を出力

    させるための方法のメモです。

    本来は、スケジューラーモニターで次の状態を検知させ、ダンプを出力させるところまで再現したかったのですが、私の理解度が低く、そこまでは再現できていません。

     # Child-SP          RetAddr           Call Site
    00 00000006`b2ddbc28 00007ffd`db9185c3 ntdll!NtWaitForSingleObject+0x14
    01 00000006`b2ddbc30 00007ff6`cb98bb2e KERNELBASE!WaitForSingleObjectEx+0x93
    02 00000006`b2ddbcd0 00007ff6`cb98b8a3 sqlservr!CDmpDump::InvokeSqlDumper+0x1ee
    03 00000006`b2ddbdd0 00007ff6`cb98b5a4 sqlservr!CDmpDump::DumpInternal+0x1b3
    04 00000006`b2ddbe80 00007ffd`c356e743 sqlservr!CDmpDump::Dump+0x24
    05 00000006`b2ddbec0 00007ffd`c420d1b5 sqllang!SQLDumperLibraryInvoke+0x1f3
    06 00000006`b2ddbf00 00007ffd`c420e046 sqllang!SQLLangDumperLibraryInvoke+0x185
    07 00000006`b2ddbfc0 00007ffd`c41d8c42 sqllang!CImageHelper::DoMiniDump+0x6f6
    08 00000006`b2ddc1e0 00007ff6`cb963eb5 sqllang!stackTrace+0xa42
    09 00000006`b2dddc00 00007ffd`c5956840 sqlservr!SQL_SOSNonYieldSchedulerCallback+0x465
    0a 00000006`b2dfdea0 00007ffd`c592e59b sqldk!SOS_OS::ExecuteNonYieldSchedulerCallbacks+0xe0
    0b 00000006`b2dfe150 00007ffd`c58c54ef sqldk!SOS_Scheduler::ExecuteNonYieldSchedulerCallbacks+0x1ab
    0c 00000006`b2dfe330 00007ffd`c58c47b2 sqldk!SchedulerMonitor::CheckScheduler+0x25e
    0d 00000006`b2dfe4d0 00007ffd`c58c3d72 sqldk!SchedulerMonitor::CheckSchedulers+0x1ea
    0e 00000006`b2dfee40 00007ffd`c59c47c9 sqldk!SchedulerMonitor::Run+0xc2
    0f 00000006`b2dfef40 00007ffd`c58b9e53 sqldk!SchedulerMonitor::EntryPoint+0x9
    10 00000006`b2dfef70 00007ffd`c58ba28f sqldk!SOS_Task::Param::Execute+0x232
    11 00000006`b2dff570 00007ffd`c58ba05e sqldk!SOS_Scheduler::RunTask+0xbf
    12 00000006`b2dff5e0 00007ffd`c58d79a2 sqldk!SOS_Scheduler::ProcessTasks+0x39d
    13 00000006`b2dff700 00007ffd`c58d7b9f sqldk!SchedulerManager::WorkerEntryPoint+0x2a1
    14 00000006`b2dff7d0 00007ffd`c58d83fa sqldk!SystemThreadDispatcher::ProcessWorker+0x42a
    15 00000006`b2dffad0 00007ffd`df0c7974 sqldk!SchedulerManager::ThreadEntryPoint+0x406
    16 00000006`b2dffbc0 00007ffd`df7ea2f1 kernel32!BaseThreadInitThunk+0x14
    17 00000006`b2dffbf0 00000000`00000000 ntdll!RtlUserThreadStart+0x21
    

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    10月 30th, 2022 at 10:29 pm

    Posted in SQL Server

    Tagged with

    SQL Server 2022 RC1 + SSMS 19.0 Preview 3 環境で ostress を実行する際の注意点

    leave a comment

    Windows Server 2022 + SQL Server 2022 RC1 + SSMS 19.0 Preview 3 の環境で、ローカルの SQL Server に対して ostress.exe を実行した場合に、次のエラーが発生し、負荷をかけることができませんでした。

    10/27/22 09:20:01.124 [0x00000D2C] SQLState: 08001, Native Error: 18
    [DBNETLIB]SSL セキュリティ エラー
    
    10/27/22 09:20:01.125 [0x00000D2C] SQLState: 01S00, Native Error: 0
    接続文字列の属性が正しくありません。
    

     

    今まで見たことがないエラーだったので、なぜ発生しているのかを調べてみました。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    10月 27th, 2022 at 9:39 am

    Non-yielding scheduler エラーの調査を実施する際の参考情報

    leave a comment

    自分のメモとなるのですが SQL Server で Non-yielding scheduler のエラーが発生した場合に必要となる情報をまとめておきたいと思います。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    10月 21st, 2022 at 9:21 pm

    Posted in SQL Server

    Tagged with

    Ignite 2022 で発表された SQL Server ベースのアップデート

    leave a comment

    Ignite 2022 が開催されています。更新内容については、Book of News から確認することができます。

    SQL Server ベースの環境に関連するアップデートとしてどのようなものがあったかまとめておきたいと思います。

    Data Platform 関連のキーノートセッションは次のようなものがあるようです。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    10月 13th, 2022 at 7:12 am

    SQL Server 2022 New Features: Intel QAT を使用したバックアップの高速化

    leave a comment

    SQL Server 2022 RC 1 時点の情報となり、今後の Preview / 一般提供開始時には変更されている可能性もあります。

    SQL Server 2022 の新機能として、Intel QAT (Quick Assist Technology) を使用した、バックアップの高速化とバックアップの負荷をハードウェアにオフロードするという機能があります。

    Intel QAT を使用する場合、Intel® QuickAssist Adapter Family for Servers のようなハードウェアを使用しなくてはいけないのかと思っていたのですが、この機能はソフトウェアモードでも使用することができ、ハードウェア圧縮が使用できない場合でもソフトウェアで処理ができるようになっていました。

    この機能を使用した場合の処理特性についてまとめておきたいと思います。

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    10月 10th, 2022 at 9:00 pm

    2022年9月下旬の Azure SQL Database Update と SQL Server Update

    leave a comment

    2022年9月下旬の Azure SQL Database Update の情報がアナウンスされたのでまとめておこうと思います。

    アップデートには含まれていないが、当月更新されたものもなりますので、それらも追記しています。

     

    Read the rest of this entry »

    Written by Masayuki.Ozawa

    9月 29th, 2022 at 10:23 am