スロークエリとは?実行が遅くサイトを詰まらせる問い合わせをやさしく解説

「サイトが重い」と言われ、原因がなかなか見つからないとき

ある時間帯だけ、サイトがやけに重い。サーバーを増やしたわけでもアクセスが激増したわけでもない。 ログを見ても明確なエラーはない。「どこが遅いんだろう」と途方に暮れる——。

そんなときの有力な容疑者が、スロークエリです。

スロークエリとは?ひとことで言うと

スロークエリとは、データベースへの問い合わせ(クエリ)のうち、実行にとても時間がかかるもののことです。

ざっくり言うと、「データの取り出しに時間がかかりすぎて、後ろの処理を待たせてしまう重い注文」です。 サイトは多くの場合、データベースに「この条件のデータをちょうだい」とお願いして動きます。その一つひとつが速ければ快適ですが、一部に極端に遅いものがあると、そこが詰まってサイト全体が重くなります。

飲食店の厨房で、一つだけ手間のかかる重い注文の調理に時間がかかり、その後ろに次々と注文の伝票がたまって行列ができ、店全体の提供が遅れている様子のイラスト
スロークエリは「一つの重い注文で全体が詰まる」状態。遅い問い合わせが後続を待たせる

現場ではどこで使う?

保守運用の現場では、こんな場面で関わります。

サーバーやネットワークに問題が見当たらないとき、データベース側を疑う入り口になるのがスロークエリです。

なぜ大事なのか

スロークエリを見つけられると、「サイトが重い」の原因を的確に絞れます。 体感の遅さは、サーバー・ネットワーク・データベースなど、いろいろな場所で起こります。そのなかでも、データが増えるほど遅くなるのがクエリの特徴で、最初は問題なくても、運用が長くなるにつれて表面化します。遅いクエリを特定できれば、対策(後述の改善)も具体的になり、サーバー増強のような大きな手を打つ前に、ピンポイントで直せることがあります。

具体例で見る

たとえば、注文一覧のページだけが極端に遅いとします。

データが少ないうちは一瞬で表示できても、件数が何十万件に増えると、毎回すべてを順番に探すような問い合わせは時間がかかります。 多くのデータベースには「実行に時間がかかったクエリを記録する」仕組み(スロークエリログ)があり、これを見ると犯人が分かります。改善の方法はデータベースごとに違うので、具体的な確認・設定手順は使っている製品の公式ドキュメントで確認しましょう。

つまり現場では?

スロークエリと向き合うということは、「どの問い合わせが、どれくらい遅いか」を記録から見つけ、影響の大きいものから手を入れていく作業です。やみくもに全体を速くしようとするより、いちばん詰まっている一点を見つけるほうが、効率よく改善できます。

知らないとどう困る?

スロークエリの存在を知らないと、「サイトが重い=サーバーが非力」と思い込み、増強にお金をかけても改善しない、ということが起きます。 原因が一部の遅い問い合わせなら、サーバーを増やしても詰まりは残るからです。さらに、遅いクエリが重なると処理が待たされ続け、最終的にタイムアウトやエラーにつながることもあります。

よくある勘違い

明日やるならこれ

自分の担当サービスで「いちばん遅いと感じるページ」をひとつ思い浮かべ、そのページが裏でデータベースに何を問い合わせているかを調べてみましょう。あわせて、使っているデータベースに遅いクエリを記録する設定があるかを確認すると、改善の入り口が見つかります。

ひとことで言うと

スロークエリとは、実行に時間がかかりすぎて、サイト全体を詰まらせてしまう問い合わせのことです。

関連用語

関連記事