SE の雑記

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

Archive for the ‘SQL Database’ tag

SQL Server のスレッドおよびタスクのアーキテクチャ

leave a comment

スレッドおよびタスクのアーキテクチャ ガイド というドキュメントがあります。

このドキュメントでは SQL Server のスレッドやタスクについての解説が行われています。
この投稿では、DMV を使用しながらこのドキュメントに記載されている内容を見ていきたいと思います。

Read the rest of this entry »

Written by masayuki.ozawa

2月 29th, 2020 at 10:01 pm

SQL Server / SQL Database に対してのクエリのベンチマークをどのような情報で比較するか

leave a comment

設定を変更しながら、設定変更の効果がクエリにどのような影響を与えるかを調査するための、簡単なベンチマークを行うためのスクリプトを最近作成していました。

クエリのベンチマークを行う際には、「どのように設定前後の処理効率の変化を比較するか?」という点を考慮しなくてはいけません。

今回はスクリプトを作成する中でどのような方法で、設定前後のクエリの実行効率の変化を確認していったかをまとめてみたいと思います。

ちなみにスクリプトは PowerShell 7.0 RC2 で作成しています。
(ForEach-Object -Parallel を使用したかったため、PowerShell 7.0 を使用しています)

Read the rest of this entry »

Written by masayuki.ozawa

2月 9th, 2020 at 4:57 pm

Posted in SQL Server

Tagged with ,

SQL Server の統計情報の手動メンテナンスについて

one comment

最近、SQL Server の基本動作をいろいろと再勉強しているのですが、その中で統計情報のドキュメントを一通り読み直していました。

TPC-H の LINEITEM を使用して、いくつかのパターンで統計情報のメンテナンスを手動で実施しながら動作の確認を行った際のメモを。

Read the rest of this entry »

Written by masayuki.ozawa

2月 2nd, 2020 at 10:31 pm

SQL Server へのクエリ実行の「コマンドタイムアウト」の情報取得について考えてみる

leave a comment

アプリケーションから SQL Server / SQL Database にコマンド (クエリ) を実行する際には、「コマンドタイムアウト」(クエリタイムアウト) について考慮をしておく必要があります。

ADO.NET の SQL Server 向けのドライバーではデフォルトでは 30 秒に設定されています。

コマンドタイムアウトの時間に達すると「Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.」「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」のエラーが発生し、クエリの実行がキャンセルされます。

アプリケーション側で Exception をキャッチして、その時に実行されていたクエリなどをロギングするようになっていれば、「どのようなクエリによりタイムアウトが発生したか?」を確認することができますが、そのようなロギングの仕組みがない or 情報が不足している場合に、サーバー側観点だけでどのような情報取得の対応ができるか、考えてみました。

Read the rest of this entry »

Written by masayuki.ozawa

1月 16th, 2020 at 8:51 pm

SQL Databaese の Ring Buffer の Time Stamp を日付に変換してみる

leave a comment

SQL Server / SQL Database では、「sys.dm_os_ring_buffers」という Ring Buffer の情報を確認することができます。

Using sys.dm_os_ring_buffers To Diagnose Memory Issues in SQL Server」 等で解説をされているのですが、SQL Server の様々な情報をメモリ上に確保している DMV となります。

この DMV では timestamp という値を持っているのですが、この値を加工するためには、sys.dm_os_sys_info の ms_ticks を元にして、コンピューターを起動してからの経過時間を使用していつのイベントなのかを確認するのが一般的です。

しかし、sys.dm_os_sys_info については、SQL Database では使用することができず、この DMV では、コンピューターを起動してからの経過時間を取得することができません。

SQL Database で timestamp を実際の時間に直す方法が何かないか考えてみたのですが、sys.dm_os_memory_cache_clock_hands の round_start_time の最大値で代替できそうでした。

Read the rest of this entry »

Written by masayuki.ozawa

1月 13th, 2020 at 8:51 pm

Posted in SQL Database

Tagged with

tempdb のロギング最適化による最小のログ記録の動作を確認してみる

leave a comment

SQL Server の tempdb では、ロギング最適化という動作により、トランザクションログの書き込みを最小限にするようにされています。

最近は、「SQL Server を使いこなす」という観点での勉強を進めており、その中でトランザクションログの書き込み内容の解析も多少できるようになってきましたので、tempdb のロギング最適化による、最小のログ記録の動作についても、実際のトランザクションログの書き込み内容を元にしてみていきたいと思います。
(本投稿の最小のログ記録については、一括挿入を実行する際等の最小ログ記録とは別の動作です)

Read the rest of this entry »

Written by masayuki.ozawa

1月 5th, 2020 at 4:47 pm

SQL Database のリソース割り当てについてのドキュメントが公開されています

one comment

先日、SQL Database Hyperscale のパフォーマンスについては SQL Hyperscale のパフォーマンスのトラブルシューティング診断 で公開されていることを書きました。

通常の SQL Database についてもパフォーマンスの調査時に重要となるリソース割り当てについてのドキュメントが、いくつか公開されていたようです。

Read the rest of this entry »

Written by masayuki.ozawa

1月 4th, 2020 at 5:02 pm

Posted in SQL Database

Tagged with

INSERT を例にしたトランザクションログの内容の確認

leave a comment

SQL Server のトランザクションログの内容を確認する際のアプローチとして「DBCC LOG 」や「sys.fn_dblog」を利用して内容を確認するという方法があります。

これらの DBCC や関数はアンドキュメントとなっており、詳細な情報は公開されていません。

Read the rest of this entry »

Written by masayuki.ozawa

12月 26th, 2019 at 12:02 am

CPU 使用率 / バッチ実行数との対比による Batch Resp Statistics の活用

one comment

SQL Server のパフォーマンスモニターとして、SQL Batch Resp Statistics という項目があります。
この項目は、SQL のクエリをバッチという単位で集計した際の次のような観点の情報を確認することができます。

  • 特定の実行時間 (Elapsed Time) の範囲のバッチ実行回数とバッチ実行時間の合計
  • 特定の CPU 使用時間 (CPU Time) の範囲のバッチ実行回数とバッチ実行時間の合計

この項目は「インスタンス内でどのような時間を消費しているクエリが実行されているか?」を把握するのに役に立つ情報となっており、単体でも便利なのですが、他の情報と組み合わせることでさらに活用の幅が広がります。

本投稿では、「CPU 使用時間の範囲のバッチ情報」を活用した方法についてまとめてみたいと思います。

Read the rest of this entry »

Written by masayuki.ozawa

12月 8th, 2019 at 10:00 pm

Posted in SQL Server

Tagged with ,

RaspberryPi 4B で Docker と IoT Edge ランタイムを起動するための準備

one comment

Azure SQL Database Edge は、x64 ならびに ARM64 のデバイス上で動作させることができる、コンテナーの SQL Server となります。

SQL Database Edge を稼働させるための準備として、RaspberryPi 4B (ラズベリーパイ4 / ラズパイ4) を購入したので下準備として Docker と IoT Edge ランタイムを動作させるまでの方法をメモとして残しておきたいと思います。

IoT 関連は全く触ってきておらず、ラズパイを使うのも初めてに近いので、そもそもとして間違っていることがあるかもしれません (

Read the rest of this entry »

Written by masayuki.ozawa

12月 7th, 2019 at 12:40 am