見えないボトルネック
テーブルに手が入ることになってから、一覧側の条件も一緒に見直す流れになった。
それ自体は、ある意味当然だった。
結城のバッチが夜のうちに整理して登録する先が変わるのなら、翌朝それを拾って表示する画面側も、その前提に合わせなければならない。
問題は、その修正が一箇所で終わらないことだった。
件数が少ないうちは、動く。
普通に見れば、そこまでおかしくは見えない。
だが、本番を想定した件数に近づけると、また遅くなる。
しかも取得条件を変えたせいで、一覧に出る結果そのものまで少し変わってしまった。
「……またズレた」
水瀬は画面を見ながら、小さく呟いた。
表示件数。
並び順。
拾われるデータの条件。
一つ直すと、一つ進む。
けれどその横で、別の何かがずれる。
その繰り返しだった。
手戻りが多い。
いや、手戻りというより、進んでいるのか戻っているのかも分からなくなる感じに近かった。
結城はバッチ側を見直している。
黒川は負荷試験の条件を変えながら、どこで急に重くなるかを追っている。
水瀬は画面側で、その結果の受け方を修正している。
同じ障害を見ているはずなのに、触っている場所はそれぞれ違った。
だからこそ、簡単には揃わない。
日付が変わる頃には、フロアの会話もかなり減っていた。
残っているのは、キーボードの音と、時々交わされる短い確認だけだった。
黒川が画面から目を離さずに言う。
「少しマシにはなってる」
「まだ遅い?」
水瀬が聞く。
「遅い。さっきよりマシってだけ」
その言い方が、妙に正確だった。
良くなっていないわけではない。
でも、まだ使える速さではない。
水瀬は自分の一覧画面を見直す。
取得条件を変え、表示する項目を合わせ、並び順も調整した。
それでも、根っこの重さが残っている感じがした。
深夜二時を過ぎたころ、村瀬がこちらへ様子を見に来た。
「どう?」
その一言に、水瀬は少しだけ困った顔になる。
「正直、前よりひどくなってる気もします」
村瀬は水瀬の画面を見て、それから黒川のログ画面、結城のSQLが開かれたディスプレイを順に見た。
少しだけ黙ってから、低い声で言う。
「まず、取得してるSQLをちゃんと見直そう」
「SQL……」
「うん。実行計画、見てみよう」
実行計画。
初めて聞く言葉だった。
水瀬は自分の端末でも調べてみた。
検索すれば解説はいくらでも出てくる。
けれど、正直よく分からなかった。
表のようなものが並んでいて、数字や処理名がいくつも出ている。
何をどう見れば、「だから遅い」に繋がるのかがいまいち掴めない。
「……わかんないな」
思わず本音が漏れると、隣の藤堂がこちらを見た。
「実行計画?」
「はい。見方調べてるんですけど、いまいち……」
藤堂は自分の椅子を少しだけ寄せた。
「ざっくり言うとね」
そう言って、水瀬の画面を指す。
「DBが、どこからどういう順番でデータを拾い始めてるかを見るものかな」
「順番……」
「うん。で、こういうのって、最初に拾う件数を減らせるなら減らした方がいいんだよね」
「最初に……」
「最初から広い範囲を見に行くと、それだけで重くなりやすいから。先に件数を絞れる形にできるなら、その方がだいぶ違う」
その説明で、少しだけ頭の中の霧が晴れた。
全部は分からない。
でも、“最初に見る量を減らす”のが大事なのだということは何となく分かる。
藤堂はさらに続けた。
「あと、索引を使えるようにすると変わることもあるよ」
「索引……?」
「うん。本で言うと、後ろについてる一覧みたいなものかな。欲しい情報を探すときに、最初から全部めくるんじゃなくて、先に当たりをつけるためのやつ」
索引。
それもまた、普段は意識しない言葉だった。
けれど、本の後ろについているあの一覧を思い浮かべると、少しだけイメージしやすくなる。
「探したいものに近い索引が使えれば、遠回りしなくて済む」
藤堂は言う。
「逆に、その索引が使いにくい形だと、結局ぐるっと回ることになるんだよね」
水瀬は画面の実行計画を見ながら、小さく息を吐いた。
意味は少し分かった。
でも、じゃあどう直せばその順番を変えられるのかまでは、まだ全然見えない。
「じゃあ……最初に拾う件数が減るように、条件の置き方を変えてみる感じですか」
そう聞くと、藤堂は少しだけ笑った。
「うん、まずはそこから試してみるのがいいかも」
「……難しいですね」
「難しいよ」
藤堂はあっさり頷いた。
「だから、ひとつずつ変えて、ちゃんと実行計画がどう変わるかを見た方がいい」
そうして、手探りの作業が始まった。
結城がSQLの書き方を少し変える。
黒川が負荷条件をかけ直す。
水瀬は表示結果と速度を見る。
また戻る。
また直す。
また見る。
一つ変えるたびに、何かが少し変わる。
でも、どれが決定打なのかはまだ掴めない。
気がつけば、部屋がやけに明るかった。
最初はディスプレイの白さかと思った。
だが違った。
執務室の窓の向こうから、朝の光が差し込んでいた。
「……朝か」
誰が言ったのか分からない。
たぶん、誰かが小さく漏らしたのだと思う。
今日はまだ、みんないた。
黒川は机に突っ伏して寝ていた。
結城も、その隣で腕を枕にして目を閉じている。
佐伯も同じように伏せていて、時々肩だけが小さく動いた。
藤堂は起きていたが、さすがに眠そうだった。
三浦は椅子を三つ繋げて、少し窮屈そうに横になっている。
それでも、高橋と村瀬だけはまだ起きていた。
さすがに顔には疲れが見える。
けれど、二人とも妙に姿勢が崩れていなかった。
水瀬も、もちろん眠かった。
頭の奥がじんわり重い。
目も乾いている。
それでも、ここできちんと直さないと、という妙な使命感だけは残っていた。
しばらくすると、執務室の入り口が開き、他の人たちが出社し始めた。
それに合わせるように、寝ていた四人も少しずつ起き始める。
黒川が顔を上げて、目をこする。
結城は無言で姿勢を戻し、すぐにディスプレイへ視線を戻した。
佐伯は小さく伸びをし、三浦は椅子を元に戻す。
水瀬は頭がぼうっとしていた。
けれど、何となく、どうすればいいかが見えてきていた。
さっきまで完全に見えなかったものが、少しだけ輪郭を持ち始めている。
どこを先に見に行かせるか。
どの条件から絞らせるか。
どうすると遠回りを減らせるか。
理屈を全部説明できるわけではない。
でも、感覚として少し掴みかけているものがあった。
(この設定ならいけるんじゃないか……?)
水瀬はそう思った条件を入れて、もう一度確認した。
実行計画が変わる。
そして、表示速度もかなり改善された。
「……あ」
思わず小さく声が漏れる。
黒川がすぐにこちらを見る。
「どうした?」
「速くなった」
「え?」
「かなりマシになったと思う」
黒川がすぐに席を寄せる。
ログを見て、もう一度条件を変えて試し、それから小さく息を吐いた。
「……ほんとだ」
水瀬は画面を見たまま、胸の奥で何かが繋がるのを感じていた。
ああ、こういうことか。
取得しに行く順番。
索引の使われ方。
どこから絞って、どこを後に回すか。
はっきりと「こうすれば正解だ」と言い切れるわけではない。
それでも、どう触ると流れが変わるのか、その感覚だけは少しずつ体に入ってきていた。
徹夜二日目の夕方。
ようやく、見えないボトルネックの輪郭が少しだけ見え始めていた。




