コンピュータ・ユニオン

労働者供給事業 / 加入のご相談・お問い合わせ

folderブログ / folderしごと情報

←いまどきの挙動のアプリを作る

SQLの性能問題の解決

SQLの性能問題は、どこでも発生しやすいものです。

SQLを改修したら、SQLが遅くなったというクレームがあり、通常数時間で終わるバッチ処理が、1日たっても終わらないといったことがかつてありました。

SQLの性能問題が発生した場合は、データベースのパフォーマンス統計やSQL文の実行計画、ER図を見せてもらったり、状況についてヒアリングを行うのですが、よくあるパターンはだいだい決まっています。

なお、以下のパターンは一例です。

(1) レコードによる問題

①そもそもレコード件数が非常に大きい

過去のデータを削除せず、10億件もある巨大なテーブルになっていることが多々あります。

②開発環境で処理時間を計測した場合のレコード数が圧倒的に少ない

本番環境のレコード数では想定以上の時間がかかってしまう。

③特定の列のデータに極端な偏りがある

WHERE句の条件で指定する列のデータに極端な偏りがある場合、探索量が非常に大きくなり、性能劣化となる場合があります。

(2) SQLによる問題

①テーブル間のリレーションが多対多になっている

distinct句やgroup by句を多用することで、性能劣化につながる場合があります。

②WHERE句の絞りこみの条件が不足している

不要なデータも検索してしまい、性能劣化となる場合があります。

③インラインビューを多数使用している。

ヒント句でSQL文の挙動を制御している場合、インラインビュー内ではヒント句が有効にならないため、想定した挙動にならないケースがあります。

④ビューを多用している

複雑な条件をもつビューを多用している場合、ビューを検索する度に、ビューを定義するSQL文が毎実行されるため、性能劣化となる場合があります。

(3) データベース環境による問題

①統計情報が正しくない

適切なデータへのアクセスが行われず性能劣化となる場合があります

②インデックスが不足している、またはインデックスが不適切

インデックスが使用されず、テーブルの全件検索となり、大幅な性能劣化となる場合があります。また、適当でないインデックスが使用された場合、インデックスの探索量が非常に大きくなり、性能劣化となる場合があります。

こういうときに限って、メモリ不足とかディスクの性能不足とかの問題が露呈するので油断ならないのですが、SQL文の改修をするか、テーブルやインデックスの見直し、統計情報の再取得などで、大抵の性能問題は解決します。

SQL文の修正はできないし、データベースの構造はいじりたくないので、インフラだけで解決してほしい、と言われることもあります。

その場合は、こちらでは対応はできないので、メモリのチューニングぐらいしかできないですね、と煙に巻くことにしています。SQLの性能問題が発生した場合の参考にどうぞ。

■ コンピュータ・ユニオン ソフトウェアセクション機関紙 ACCSESS 2022年4月 No.414 より


投稿日

2022年4月1日

カテゴリー:

ブログ
【’22/5埼玉県:Java】インターネット販売→

労働者供給事業 の案件の内容・条件の例は しごと情報 をご参照ください。全案件の詳細な情報は加入後に共有いたします。

live_help加入のご相談・お問い合わせ

print労働者供給事業のご案内(PDF)

mailinfo@computer-union.jp
phone03-5603-4572
fax03-5603-7265

〒 110-0003
東京都台東区根岸3-25-6
タブレット根岸2F

directions_walkJR東日本 鴬谷駅北口下車 三河島方面へ徒歩5分
placeGoogle Maps

関西事務所
〒 532-0011
大阪市淀川区西中島3-16-17
丸善西中島ビル4階2号室

directions_walk阪急京都本線 南方駅下車徒歩1分
directions_walk大阪メトロ御堂筋線 西中島南方駅下車徒歩2分
placeGoogle Maps

Twitter MastodonMisskey.io Bluesky Threads Instagram

プライバシーポリシー

©︎ コンピュータ・ユニオン

ヘッダの写真は ENIAC です。