こんにちは、南條です。
前回の投稿からtechsummit2018のセッション、DA08「性能問題を起こしにくい信頼されるクラウドRDBのつくりかた」のレポートを前後編に分けて行ってきました。
前編では、クラウドRDBの性能低下を防ぐために、ストレージシステム構成時にどのようなことができるかについてまとめてきました。
後編では、ストレージシステムを動かし始めてから運用中に起きる性能低下に対して、どのようなことができるかについてまとめていきたいと思います。
セッションのスライドは下記のurlから閲覧できます。
性能問題を起こしにくい 強いDBシステムの作り方(Ver. 2018.9) from Tomoyuki Oota
運用時
パフォーマンスを知る
RDBは、運用を始めてから様々な問題が起こり始めることがあります。
例えば、処理に過剰なコストがかかるようになってくる、処理が性能に対して増えすぎてくる、等々。
そういった問題が起きているかどうかどうかを診断してくれる機能がAzureにはいくつかあります。
任意のタイミングで現在起きている問題を診断するには、Performance Diagnosticsが利用できます。
これは、VMにおける問題を検出して、解決策を示してくれる機能です。
対応しているVMはWindows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016です。
この機能はVMのメニューから拡張機能、Azure Performance Diagnoticsからインストールすることができます。
他に、Intelligent Insightsという機能もあります。
これは、SQL databaseに対する人工知能を用いたパフォーマンス診断、トラブルシューティング機能です。
起きている問題、それが起こっているリソース、そしてその解決法まで示してくれます。
クエリに関する診断機能としては、Query Performance Insightsというものもあります。
これは、過去に送ったクエリの実行統計を取ることができるもので、どんなクエリがCPUやI/Oのリソースを激しく消費しているかを知ることができます。
ただし、ここからクエリプランを見ることはできず、別途SSMSを用いる必要があります。
また、自動で性能改善を行ってくれるAutomatic Tuningという機能もあります。
これは、データベースの性能改善について推奨事項があった場合にそれらを自動で実行してくれるものです。
性能改善は処理の集中しない時間帯に自動で実行されます。
その後で再び性能検証を行い、もしも改善前よりパフォーマンスが落ちていれば、改善前に設定を戻すことまで自動でやってくれます。
統計情報の定期メンテナンス
ここでいう統計情報とは、RDBが自分で処理の効率化を行うために使用する、データベース内のそれぞれのデータを使用する頻度のことです。
こういった目的からも分かるとおり、統計情報はRDBの性能に対して大きな影響を与えています。
RDBを使用していて、急にパフォーマンスが悪くなった場合、この統計情報が現状のデータ分布に対して正しく更新されていないことが原因となっていることもあります。
この統計情報は、本来は一定の条件を満たしたときに自動で作られたり、更新されたりしていきます。
例えば、インデックスが作られたときには自動で統計情報が作られます。
また、一定量のレコードが更新された際には統計情報を自動で更新したりもします。
しかし、統計情報の作成、更新は手動で行うこともできます。
手動で統計情報を更新するべき場合として、セッションでは
- バッチ処理のような大量更新を行う場合
- データの分布の変化を起こすような変更を行う場合
- SELECTで新しいデータのみを参照したい場合
が挙げられていました。
このような場合に統計情報が変化しないでいるとパフォーマンスが急激に落ちてしまいますが、RDBが自動で更新を行う条件には引っかからないので、手動で更新する必要が出てきます。
忘れずにCREATE STATISTICSしましょう!
インデックスのメンテナンス
RDBは使用していると、データを加えたり削除したりを繰り返していくうちに作成したインデックスが断片化を起こす場合があります。
インデックスが断片化しているとクエリのパフォーマンスが悪化してパフォーマンスが低下します。
断片化の状況は、Azureにある各種のパフォーマンスの診断ツールを用いて検知し、定期的にインデックスを作成し直すようにしましょう。
後編のまとめ
本稿では、「性能問題を起こしにくい信頼されるクラウドRDBのつくりかた」のセッションで解説された、RDBの運用時のパフォーマンス低下を防ぐための方法についてまとめました。
運用中にパフォーマンスを監視する方法としてのPerformance Diagnostics、パフォーマンスの問題の自動検出のIntelligent Insights、クエリの問題の診断機能のQuery Performance Insights、そして自動で性能改善を行ってくれるAutomatic TuningといったAzure上のサービス。
これらを利用することで、RDBの運用中に起きてくる問題を見つけて対処することができるようになります。
また、RDBの処理の効率化に必要な統計情報は普段自動で作成されて更新されますが、自動で更新されない場合は手動で更新しましょう。
それから、RDBは運用しているとインデックスが断片化していくので定期的にデフラグを行ってパフォーマンスを良好に保ちましょう。
最後に
今回は、前編後編に分けて、「性能問題を起こしにくい信頼されるクラウドRDBのつくりかた」のセッションについてまとめてきました。
RDB自体の性質やパフォーマンス維持手段だけでなく、AzureでRDBを構築運用する場合に利用することができる様々な機能やサービスまで、幅広く扱っていることが印象的でした。
こういった方法やサービスを、実際の構築や運用に役立てていきたいですね。