
SQLチューニングの方法例。クエリを最適化してパフォーマンスを向上させるには
Webサービスや業務用ソフトウェアの稼働を安定させるには、データベースチューニングが欠かせません。さまざまな角度からデータベースのパフォーマンスを最適化させることで、データベースを用いたWebサービスやソフトウェアが安定して効率的に稼働するようになります。
SQLチューニングは、データベースチューニングにおける手法の一つです。SQLチューニングを行うことにより、SQLの実行を効率化できます。
この記事では、SQLチューニングの概要や流れ、方法例について解説します。
\情シス担当者が知っておきたい、データベース運用の効率化はこちら/
目次[非表示]
- 1.SQLチューニングとは
- 2.SQLチューニングの流れ
- 2.1.①SQLの選定
- 2.2.②方針の策定
- 2.3.③チューニング作業の実施
- 3.SQLクエリを最適化させるチューニングの方法例
- 3.1.①インデックスを利用する構文を使う
- 3.2.②できるだけ少ないデータの読み込みで処理できるようにする
- 3.3.③サブクエリを多用しない
- 3.4.④“Hint句”などを利用し、適切な検索順序を制御する
- 4.まとめ
SQLチューニングとは
SQLチューニングとは、データベースにおける命令文となるSQLクエリの実行に問題が生じている場合に、処理を分析して問題の解決に向けた調整を行うことです。
これにより、SQLが最適な動作を行えるようになり、データベースの応答速度をはじめとするパフォーマンスの向上が期待できます。
また、SQLの実行効率がよくない場合、CPUやメモリを大量に使用するケースが見られ、増設したCPU・メモリなども使い尽くしてしまう可能性があります。SQLチューニングを行うことで、CPU・メモリに関する使用率の改善も図れます。
SQLチューニングの流れ
SQLチューニングは、SQLの選定から始まって、方針の策定、チューニング作業の順で実施します。
▼SQLチューニングの流れ
工程 |
概要 |
1.SQLの選定 |
チューニング対象にするSQLを選定する |
2.方針の策定 |
選定したSQLの何をチューニングするのかを定める |
3.チューニング作業の実施 |
チューニングの実アクションを実施する |
①SQLの選定
まず、チューニングを行うSQLの選定が必要です。データベース上でボトルネックとなっているSQLを確認したうえで、個々に検討を行ってチューニングするSQLを選定します。
SQLの選定においては、待機イベント(※)のチェックが有効です。待機イベントを確認することで、データベース内におけるボトルネックの箇所と程度が把握できます。
※データベースの種類によって名称は異なる場合があります。
②方針の策定
次に、選定したSQLの何をチューニングするのかという方針を定めます。
待機イベントで把握したボトルネックの種類によって、必要なチューニングの内容は異なります。加えて、実行計画の内容についても確認と分析が必要です。
実行計画とは、データベースがSQLクエリを効率的に実行するために統計情報を基に選択した実行手順を指します。実行計画を確認することで、SQLクエリの実行においてどの処理にどの程度コストがかかっているかを把握できます。
③チューニング作業の実施
ボトルネックの種類やコストの高い処理を把握したら、その改善に向けたチューニングを実施します。具体的なアクションとしては、インデックスやSQLクエリの構造の見直しがあります。
▼チューニング作業のアクション
- インデックスの設定・見直し
- SQLクエリの構造見直し
インデックスは、SQLがデータを読み込む処理の順番を制御する仕組みです。インデックスを見直すことで、データベースから必要な情報を効率的に探しやすくなり、処理の高速化につながります。
また、SQLクエリの構造が非効率になっている場合、リソースの過剰な消費やコストの増加を起こす原因となります。実行効率を向上させるためには、SQLクエリの最適化が欠かせません。
また、チューニング作業は一度で完了するとは限りません。検証して適切な動作にならなかった場合には、改めて別のチューニングを行う必要があります。
SQLクエリを最適化させるチューニングの方法例
SQLクエリの構造を見直して最適化させるチューニングの方法は、多岐にわたります。ここでは4つの方法をピックアップして解説します。
なお、SQLチューニングについてはこちらの連載で詳しく解説しています。併せてご確認ください。
①インデックスを利用する構文を使う
データベースからの検索で期待する性能を発揮するためには、インデックスを最大限に利用することが必要です。
一方で、SQLの構文のなかには、インデックスを使わなくなるものがあります。例えば、「<>」「exist」「or」などです。加えて、SQLクエリの左辺で演算を行っている場合、データベースによるインデックスの利用を妨げてしまいます。
インデックスを適切に活用できる構文かどうかを意識して、SQLを作成します。
②できるだけ少ないデータの読み込みで処理できるようにする
SQLを効率的に実行するには、必要なデータのみを読み込む必要があります。データベース内の膨大なデータを端から端まで読み込むことが求められるようなSQLクエリにしてしまうと、パフォーマンスの低下につながります。
例えば、10,000件のテーブルと10,000件のテーブルを掛けあわせるような読み込みをすると、100,000,000件のデータを読み込むことになり、すべてのデータを読み込むまでに時間がかかってしまいます。
特定の条件を満たす行と列のみを読み込むようにすることで、SQL実行の効率化が図れます。
③サブクエリを多用しない
サブクエリの多用を避けることで、SQL実行の遅延を防げます。
サブクエリとは、SQLクエリのなかで使用されるクエリのことです。サブクエリは複雑な条件を簡潔に指定するために役に立ちますが、多用すると処理速度が遅くなるケースがあります。
また、サブクエリの多用はSQLクエリ全体が読みにくくなる要因にもなります。
④“Hint句”などを利用し、適切な検索順序を制御する
データベースの性能を維持するには、“Hint句”による検索順序の制御が有効な場合があります。
SQLの内容によっては、データベースにデータの読み込みを任せた際に、適切な順序でデータを読み込めないケースが見られます。結果として大量のデータ領域を読み込むことになり、性能が劣化する要因となります。
Hint句を利用することで、データを読み込む順番の制御ができます。これにより、最適な順序でデータを読めるようになり、性能の維持につながります。
なお、基本的にはHint句を用いずにデータベースの機能に任せる方が適切です。どうしても想定したとおりにデータベースが動作しない場合のみ、Hint句を利用することをおすすめめします。
また、長文のSQLの場合、適切にデータベースが判断できなくなる可能性が高くなるため、できるだけ簡潔にSQLを構成することも重要です。
まとめ
この記事では、SQLチューニングについて以下の内容を解説しました。
- SQLチューニングの概要
- SQLチューニングの流れ
- SQLクエリを最適化させるチューニングの方法例
SQLチューニングとは、SQLクエリの実行における問題について、処理の分析と調整によって解決を図ることです。
チューニングするSQLの選定と方針の策定を行ったうえで、インデックスやSQLクエリなどの見直しを行います。
SQLチューニングにおいてはその原因に応じた適切な対応を行う必要があるため、効率的に実施するには、データベースの可視化が欠かせません。
日本エクセムでは、データベースの可視化を実現するツール『MaxGauge』を提供しています。待機イベントに加えて、処理量が多く時間のかかっているSQLをピックアップして可視化できます。これにより、的確なSQLチューニングの実現が可能です。
詳しいサービス内容は、こちらの資料からご確認いただけます。