SQL Server 2019 Standard Edition Feature Limitations Are Out で知ったのですが、SQL Server 2019 のエディションについての情報が公開されているようです。
GA 前の公開情報のため、記載内容が変更されるかもしれませんが、各エディションでどのような機能が使用できるようになるのかの目安になるのではないでしょうか。
Editions and supported features of SQL Server 2019 (15.x)
Read the rest of this entry »
Archive for the ‘SQL Server’ Category
SQL Server 2019 のエディション情報
SQL Server 2019 関連の書籍
SQL Server 2019 も RC1 が提供され、GA (一般提供) に向けて、着々と開発が進められているかと思います。
洋書にはなるのですが、SQL Server 2019 関連のものがいくつかリリース予定となっていますので、備忘録を兼ねて。
洋書はサブスクリプションモデルで閲覧できたり、$10 でセールをしている時があったりしますので、お得な購入方法がいろいろあるかと。
(Safari Books Online のサブスクリプションで見れる書籍の中にも入っていたかと)
Microsoft Press
Apress
- 2019/06/03 : Pro SQL Server 2019 Wait Statistics A Practical Guide to Analyzing Performance in SQL Server
- 2019/10/02 : Query Store for SQL Server 2019 : Identify and Fix Poorly Performing Queries
- 2019/11/03 : Expert T-SQL Window Functions in SQL Server 2019 : The Hidden Secret to Fast Analytic and Reporting Queries
- 2019/11/11 : Pro SQL Server 2019 Administration : A Guide for the Modern DBA
- 2019/12/20 : SQL Server 2019 Revealed : Including Big Data Clusters and Machine Learning
- 2019/12/24 : SQL Server Big Data Clusters : Preview Edition Based on Release Candidate 1
- 2019/12/31 : Expert Performance Indexing in SQL Server 2019 : Toward Faster Results and Lower Maintenance
- 2020/04/08 : PolyBase Revealed : Data Virtualization with SQL Server, Hadoop, Apache Spark, and Beyond
PacktPub
SQL Server のクエリプロファイリングの活用
SQL Server 2016 以降ではクエリプロファイリングにより、実行中のクエリの情報の分析容易性が向上しています。
この機能は、かなり強力であり、実行中のクエリに対して、様々なアプローチが可能となります。
活用の方法として「インデックスの再構築」と組み合わせた方法を紹介したいと思います。
今回は SQL Server 2017 を例としています。
Read the rest of this entry »
SQL Server の Wait Resource から実オブジェクトを判断する
SQL Server の sys.dm_exec_requests や、sys.dm_tran_locks 等の DMV では、どのオブジェクトに起因して待機が発生しているかというリソースの情報が出力されることがあります。
![]()
本投稿では、待機要因となっているリソースの見方について見ていきます。
英語の情報となりますが、Decoding Key and Page WaitResource for Deadlocks and Blocking が詳しいかと思います。
Read the rest of this entry »
待ち事象の情報のカウントアップされるタイミング
SQL Server では、「待ち事象」の情報を確認することでボトルネックの解析の一助とすることができます。
![]()
クエリを実行し、処理を実行する際には、次の状態を推移しながら処理が進められます。
「待機状態」に入っている処理については、何らかの処理の実行を阻害する要因があり、実行効率が低下している状態となっていると考えられます。
(阻害する要因はハードウェアリソースの性能限界や、ロックの競合のような論理的な要因等、様々なものがあります)
SQL Server では、DMV やパフォーマンスモニターで待ち事象 (待機状態に入っていた状態) の情報を取得することができますが、それぞれの情報が「どのようなタイミングでカウントアップされるか」ということを意識しておくことは重要なポイントの一つとなります。
それでは、各情報の取得と、待ち事象がカウントアップされるタイミングについて見ていきたいと思います。
Read the rest of this entry »
db tech showcase 2019 に登壇しました
この投稿が公開されたときには登壇中だと思いますが、セッションで使用した資料については、SlideShare で公開しています。
後日、db tech showcase のサイト でも資料と動画が公開される予定ですので、実施したデモなどに関しては後日公開の動画からご確認ください。
SELECT を NOLOCK で実行しても発生する待ち事象について
先日投稿した SQL Server の「NOLOCK」ヒントは単純なロックを取得しないという動作ではありません の内容に近いものですが。
NOLOCK ロックヒントを設定しても発生する待ち事象について少し書いておきたいと思います。
先日書いた投稿は NOLOCK ロックヒントを使用すると整合性のあるデータへのアクセスが保証されないため、COUNT(*) を実行すると、データの総数が変わっていないが、データの件数が一定しないというものでした。
今回の投稿は「PAGELATCH」による待ちが発生するというものです。
Read the rest of this entry »
HADR_THROTTLE_LOG_RATE_MISMATCHED_SLO によるトランザクションログの書き込み性能の低下について
2019/6 に SQL Database の変更が入り、Geo レプリケーションが有効な環境で異なるサービスレベルを使用している場合に、プライマリサーバーの更新に Geo セカンダリサーバーが追いつけなくなると性能調整が行われるようになりました。
- New Active geo-replication optimization is coming to production soon in Azure SQL DB
- セカンダリ データベースの構成
- HADR_THROTTLE_LOG_RATE_MISMATCHED_SLO
この調整が発生すると、どのような I/O 傾向になるのかを把握しておくことは重要です。
Geo レプリケーションのセカンダリが下に構成されているときに発生しますプライマリよりもサイズ (低い SLO) を計算します。 プライマリ データベースは、遅延のログの使用量のため、セカンダリで調整されます。 これは、セカンダリ データベースの変更率が、プライマリ データベースの遅れが不足しているコンピューティング容量を持つことが原因です。
となっているので、ドキュメント上は、プライマリと Geo セカンダリの性能を変えている (Geo セカンダリの方の性能を下に設定している) 場合に、調整が行われる可能性が出てきます。
本投稿では、調整が発生することで、どのような I/O 性能の低下を招くかを見てみたいと思います。
今回、検証で使用したスクリプトについては https://gist.github.com/MasayukiOzawa/e3a2ff81628d074eacf4664e36d5ecfb に残してありますので、興味のある方はカスタマイズして試していただければ。
Read the rest of this entry »
クエリを使用した SQL Server の CPU 使用率の取得
SQL Server の CPU 使用率を取得する場合、パフォーマンスモニターや Workload Group Stats の情報を使用して、情報の取得を行うことがあります。
パフォーマンスモニターについては、OS 周りの権限が付与されていない (RDS等) 場合は使用することができません。
Workload Group Stats については、Enterprise Edition であれば、Default Pool 等の Internal 以外の Pool の情報を取得することで活用することができますが、Standard Edition では、リソースガバナーが使用できないため、Pool 単位の情報を取得することができません。
また、上記の情報は「現在の値」を取得するため、事前にメトリクスの取得を設定しておかないと、確認できないという課題もあります。
Standard Edition や直近、数時間で構わないので、過去にさかのぼって CPU の使用率を取得する場合、リングバッファーの情報を活用するという方法を使用することができます。
SQL Database では、想定している情報が取得できないようですが、SQL Server であれば、2012 以降では動いていると思いますので、その方法を。
Read the rest of this entry »
SQL Server の「NOLOCK」ヒントは単純なロックを取得しないという動作ではありません
SQL Server には「NOLOCK」というヒント句があります。
基本的な動作については ヒント (Transact-SQL) – Table に記述があり、このドキュメントには次のように記載されています。
READUNCOMMITTED ヒントと NOLOCK ヒントはデータのロックにのみ適用されます。 READUNCOMMITTED ヒントおよび NOLOCK ヒントを含むクエリを含め、すべてのクエリは、コンパイル中と実行中にスキーマ安定度 (Sch-S) ロックを取得します。 このため、同時実行トランザクションがテーブルの Sch-M (スキーマ修正) ロックを保持している場合、クエリはブロックされます。 たとえば、データ定義言語 (DDL) 操作では、テーブルのスキーマ情報を変更する前にスキーマ修正 (Sch-M) ロックを取得します。 READUNCOMMITTED ヒントまたは NOLOCK ヒントを指定して実行しているクエリを含め、すべての同時実行クエリは、スキーマ安定度 (Sch-S) ロックを取得しようとするとブロックされます。 一方、スキーマ安定度 (Sch-S) ロックを保持するクエリによって、スキーマ修正 (Sch-M) ロックを取得しようとする同時実行トランザクションはブロックされます。
ロックについては「Sch-S」のロックが取得され、それ以外のロックについては取られないという動作となる記述がありますが、これ以外の動作として「ダーティーリードを許可する」という動作については意識をしておく必要があります。
これについては、次の記事でも触れられています。
- Previously committed rows might be missed if NOLOCK hint is used
- Using NOLOCK? Here’s How You’ll Get the Wrong Query Results.
- “But NOLOCK Is Okay When The Data Isn’t Changing, Right?”
単純なパターンであれば、「コミット前のデータが読み取られるがロック競合を防ぎながらデータにアクセスができる」という用途で使うケースがありますが、それ以外のダーティーページが読み取られる可能性についても考慮しておく必要があります。
Read the rest of this entry »