SOS_WORK_DISPATCHER については、What is the SOS_WORK_DISPATCHER Wait Type? で解説が行われていますが、SOS_WORKER との比較を把握しておきたかったのでメモとして。
Archive for the ‘SQL Server’ Category
SQL Server 2022 を従量課金で利用する際の参考情報
SQL Server 2022 の新機能として、SQL Server の従量課金での利用があります。
「インストール」または「エディションのアップグレード」を実施する際に「Microsoft Azure を通じて従量課金制の課金を使用します」 (AZUREBILLEDEDITION オプション) を選択することで、従来からの永続化ライセンスではなく、SQL Server のデータベースエンジンを従量課金で利用することができます。(SQL Server のソフトウェアライセンスについてとなり、OS のライセンスは別途考慮する必要があります / データベースエンジンの利用に限定されていそうです。)
この従量課金での利用については、SQL Server 2022 で初めて導入されたインストール形態となり、オンプレミスやそれ以外の環境にインストールした SQL Server 2022 を従量課金で利用することができます。
従量課金での利用は「Azure サブスクリプションへの課金」となるため、Azure サブスクリプションが必要 / SQL Server の利用料金は Azure の利用料金として発生することになりますが、様々な場所で実行している SQL Server 2022 を従量課金で利用することができるようになります。
従量課金での利用については、Azure Arc の SQL Server 用 Azure 拡張機能 により実現されているため、機能の詳細については SQL Server だけでなく Azure Arc の観点でも確認する必要があります。
使用する際に疑問に思う点は よく寄せられる質問 でまとめられているので、こちらも確認するとよいかと。
関連情報する情報を整理していたのですが、一通り情報が出てきたようなのでまとめておきたいと思います。
PASS Data Community SUMMIT 2022 で SQL Server 2022 の一般提供開始がアナウンスされました
本日から PASS Data Community SUMMIT 2022 が開催されています。
1 日目のキーノートは Microsoft の Rohan Kumar 氏 のセッションとなっていました。
この動画も面白かったですw
Really looking forward to meeting the Data community at the #PASS Summit this week! We’ll share big news on the latest innovations across SQL Server and the Microsoft Intelligent Data Platform.#MicrosoftIntelligentDataPlatform #Azure #Data #SQL pic.twitter.com/sMnxjKzeyW
— Rohan Kumar (@RohanKData) November 14, 2022
このキーノートの中で SQL Server 2022 の一般提供開始 (GA: General Availability) がアナウンスされました!!
CTP 2.0 による Public Preview が開始されたのが、2022/05/20 なので、半年の Public Preview 期間を経て一般提供が開始されましたね。
製品ページ も SQL Server 2022 に対応したものとなり、SQL Server 2022 の製品ページ も GA 版に変わっています。
ライセンス についても情報が公開されています。
評価版のダウンロード
評価版については こちら からダウンロードすることができます。SSRS はこちら から。
SQL Server 2022 の評価版ソフトウェアは以下からダウンロードすることができます。
Visual Studio サブスクリプションにも SQL Server 2022 の Developer Edition が追加されており、評価版については、そちらから入手も可能です。
ライセンス関連の情報
投稿点では 2019 のドキュメントもありますが、以下のライセンスドキュメントも 2022 に対応され始めています。
- SQL Server 2022 pricing and licensing
- SQL Server 2019 pricing (旧バージョンとの比較用)
- SQL Server 製品条項
- SQL Server Licensing
- 投稿時点では 2019 ベースの内容となっています
- SQL Server ライセンスドキュメント
SQL Server 2022 の情報となるわけではありませんが、従来まで SA を購入している場合であった特典の、Free DR replica in Azure の構成が、PAYG の Azure VM でも適用されるということが General availability: DR secondary free with SQL Server on Azure Virtual Machines でアナウンスされました。
コンピューティングについてはコストは発生しますが、完全なスタンバイであれば、 SQL Server のライセンスコストを抑えることができるようになりますので、以下のドキュメントも確認しておくとよいかと思います。(投稿時点ではアップデートがされていませんが、今後アップデートされると思います)
SQL Server 関連のアナウンス
PASS 開催に合わせて発表された SQL Server Blog のアナウンスはこちら。
- Link feature for Azure SQL Managed Instance: Connecting SQL Server 2022 to the cloud, reimagined
- SQL Server 2022 is now generally available
- New SQL Server on Azure Virtual Machines and Azure SQL Managed Instance DR benefits
- 従来は SA (SA に含まれる AHUB) で提供されていた HA / DR 用の SQL Server ライセンスの無料化が Azure 上で SA なしでも利用することができるようになります。
Visual Studio パフォーマンス プロファイラーを使用した SQL Server のスタックトレースの確認
先日、一時テーブルとテーブル変数のパフォーマンスについて調査をしていた際に、次の情報が見つかりました。
この中で Visual Studio の パフォーマンス プロファイラー (Performance Profiler) を使用してスタックトレース (コールスタック) を取得した内容について紹介がされていました。
最近、SQL Server のスタックトレース確認をすることが多く、次の方法を使用して確認を行っていました。
- 拡張イベントの callstack フィールド
Visual Studio からの確認であればクエリを実行しながらスタックトレースを確認することができて便利そうなので、試してみました。
今回は Visual Studio を起動している環境上で起動している SQL Server を移用しています。
SQL Server 2022 on Azure VM の Azure Active Directory 認証について
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 認証 (プレビュー) として公開されていたので、実際に試してみました。
SQL Server の基数推定 (CE: Cardinality Estimation) について把握する際に必要となる情報
SQL Server では実行プランを生成する際には、統計情報を基にして、処理対象となるデータの推定 (基数推定) が行われます。
SQL Server の統計情報は、
- データ件数
- 最大 200 に分割されたデータ分布 (ヒストグラム) により構成される
- 分割の上限値 / 分割範囲の行数 / 分割の上限と同一値の行数 / 個別の値を持つ行数 / 重複する値を持つ行数の平均
- ヒストグラムは統計情報の先頭列のみで構成され、複数列統計を作成した場合でも複数列のヒストグラムは作成されない
- どの程度ユニークな値で構成されているか (密度が 1 になっている場合は、すべてのデータが同一の値となる)
- 複数列統計の場合、密度は列の組み合わせによって作成される
- SQL Server 2008 との互換性維持となる情報については、統計ヘッダーの密度であり、最新の SQL Server でも列単位の密度は使われている
が基本的な情報となり、この情報は以前の SQL Server から変化していないという認識です。
統計情報については、STATS_STREAM (STATS_BLOB) が実際の情報となりますが、次の情報からユーザーが視認できる形で確認を行うことができます。
与えられたクエリのステートメントに対して、この統計情報を使用して行数を推定することで、クエリの実行プランが組み立てられ、この時の処理対象となる行数の推定が基数推定 (カーディナリティ推定: Cardinality Estimation: CE) となります。
本投稿では、この行数の推定である基数推定がどのように判断されているかを確認する際に参照する必要のある情報をまとめておきたいと思います。
調査のために意図的に Non-yielding scheduler の状態を作り出す
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
SQL Server 2022 RC1 + SSMS 19.0 Preview 3 環境で ostress を実行する際の注意点
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 接続文字列の属性が正しくありません。
今まで見たことがないエラーだったので、なぜ発生しているのかを調べてみました。