MySQLデータベースの最適化は簡単なプロセスではありませんが、アプリケーションのパフォーマンスとサービス・デリバリーを維持するためには不可欠です。ここでは、ワークロードの把握から Database Performance Analyzer (DPA) やDatabase Performance Monitor (DPM) などのソフトウェアの導入まで、MySQLデータベースのパフォーマンスを最適化するための10のヒントについて説明します。
MySQLデータベースのパフォーマンスを最適化するためのヒントはいくつかあります。以下は、これは「最大限の効果を得るための」アプローチですが、これ以外にも多くの小さな最適化方法があると考えます。
目次
ヒント1:ワークロードを理解する
まず、MySQLデータベースがどのように動作しているかを理解し、現在対処している内容のベースラインとプロファイルを作成することが重要です。正確なベースラインとワークロードのプロファイリングがなければ、最適化策を採用できる箇所を正確に特定することは困難です。現在のワークロードを見ることで、どのクエリが最もコストが高いかを知ることができます。
データベースパフォーマンスのプロファイリングやベースラインを作成する最も簡単な方法は、ヒント10で説明するようなツールを使用することです。
ヒント2:クエリを最適化する
次に必要なことは、SQLクエリーの最適化です。先に述べたように、1つの不正なSQLクエリは、すぐに命取りになり、業務全体に大きな影響を与える可能性があります。クエリーを最適化するためにまずできることの一つは、インデックスの作成に注力することです。
インデックスとは、データベース内に格納されたテーブルから、オペレーションがより迅速にデータを見つけるために使用されるものです。WHERE句、JOIN句、ORDER BY句、GROUP BY句によってすべての述語にインデックスを付けることで、インデックスをより効率的にすることができます。これにより、誰かが情報を見つけたいときに、より迅速にインデックスを移動させることができます。
ヒント3:MySQLをキューとして使用しない
次に、MySQLをキューとして使用していないか確認します。キューとは、操作を次々に実行するように設定することです。これは、並列に処理を実行できる状況であれば、処理速度を低下させる可能性があります。また、例えば、あるタスクが他のタスクの完了を待っている場合、進行中のタスクと完了したタスクや履歴データが混在したテーブルが作成され、処理速度が低下する可能性が十分あります。これはデータベースの効率を低下させます。
ヒント4:基本的なリソースを監視する
データベースがうまく機能するためには、その運用に不可欠な4つのリソースを監視する必要があります。
●CPU
●メモリ
●ディスク
●ネットワーク
メモリが不足したり、ディスクが一杯になると、どんなに最適化されていても、データベースに影響が出ます。
ヒント5:フィルタ結果
何か特定のものを探していたり、ある種のデータを処理したい場合、まずコストのかからない精密な作業を行い、後からより精密なクエリに掘り下げていくのが良い方法です。こうすることで、不必要なときに大量のデータに対して高価な関数を実行することがなくなります。
ヒント6:サブクエリを最適化する
サブクエリの最適化については、可能な限りjoinを選択することです。新しいバージョンのMySQLでは、サブクエリがすでに最適化されている場合がありますので、必要であるかどうかは確認してください。
ヒント7:スケーラビリティの問題を認識する
システムには、拡張性に優れたものとそうでないものがあります。直列化されたプロセスがある場合、他のプロセスを待たなければならないプロセスが増えるだけで、スケーラビリティが制限されます。また、クロストークを避けるようにする必要があります。可能な限り、すべてを並列化し、ロックを解除してください。
ヒント8:キャッシュをクエリする
キャッシュは、データを保存してより速くアクセスできるようにすることでパフォーマンスを向上させることができますが、MySQLのクエリ・キャッシュも例外ではありません。クエリを保存しておき、将来同じクエリを受信した場合、より高速に結果を返すことができます。コンテンツをキャッシュすることで、MySQLキャッシュの最適化を最大化することができます。
ヒント9:ページネーション・クエリをチェックする
ページングを行うアプリケーションを使用している場合、インデックスを使用しない、または使用できない方法でグループ化およびソートすることがあります。これは、サーバーに多くの作業を発生させます。利用可能なすべてのページへのリンクではなく、次のページへのリンクのみを表示することで、最適化を図ることができます。
ヒント10: 設定の自動化
MySQLデータベースのパフォーマンスと構成のチューニングを自動化するために、私が推奨する2つの主要なツールがあります。 Database Performance Analyzer (DPA)とDatabase Performance Monitor (DPM)です。どちらもMySQLデータベースのパフォーマンスと構成の変更に対応するのに便利で、パフォーマンスチューニングプロセスの大部分を自動化できるため、他のことに時間を割くことができるようになります。
DPAは、クロスプラットフォームのデータベースをサポートするオンプレミス型のソリューションです。SQLクエリのパフォーマンス監視、分析、チューニングが可能で、機械学習による異常検知機能も備えています。また、前述の4つの基本リソースなど、データベースリソースの使用状況を追跡し、ワークロードの傾向や最適化の変化を追跡することが可能です。これにより、何らかの変更が問題を引き起こしていないかどうかを確認することができます。
一方、DPMは、WebベースのUIを持つSaaS型プラットフォームです。管理者がパフォーマンスを監視し、データベースの問題を発見するのに役立ちます。一貫してデータを収集することで、問題の根本原因がどこにあるのかを容易に把握することができます。DPAには、堅牢なパフォーマンス最適化ツールや設定ツールも含まれており、SQL、待ち時間、アプリケーション、クライアントマシン、ユーザーなどを監視することができます。
パフォーマンスチューニングによるMySQLの最適化
パフォーマンスチューニングは、MySQL データベースを維持する上で重要な部分です。データベースを熟知し、パフォーマンスを最適化するために手動で行うことに加え、必要なプロセスを自動化するツールを使用することは大きな利点となります。オンプレミス型のソフトウェアをお探しの管理者にはSolarWinds DPAを、SaaS型のソリューションをお探しの管理者には DPMをお勧めします。
上記のステップを踏むことで、MySQLデータベースのパフォーマンスを最適化し、より効率的に仕事をこなし、ビジネスサービスやアプリケーションの可用性を維持することが可能になります。
関連したトピックス
- Database Performance Monitor :データベースの監視と効率化を行うSaaS型ソリューション
- データベースのトラブルシュートを加速化させる方法について
- Oracle View(ビュー)のパフォーマンスを高速化する – Database Performance Analyzer (DPA)によるチューニング
- Database Performance Analyzer [DPA] でSQL Serverのパフォーマンスを見つけ、分析し、最適化へ
- なぜデータベースにインデックスが必要なのか? [Database Performance Analyzer :DPA]
- MySQLスロー・クエリログ・アナライザ [DPA]
- 仮想化されたデータベース:パフォーマンス監視の考慮事項
- データベースシステムの性能監視によるチューニングとボトルネックの特定 [DPM]
- メモリとインスタンスのパフォーマンス監視のためのAmazon AWS EC2 Monitor [DPA]
- SQLパフォーマンスチューニングとは何か? その重要性
MySQLとJavaチャート・ツール「EspresChart」との高いマッチング性
https://www.climb.co.jp/blog_espress/archives/2349