パフォーマンスチューニング出来る人はかっこいい?
2016/03/20
検索すると固まる画面があって、製造元のベンダーに修正を依頼してパフォーマンスの改善をして貰いました。
(実際はバグを直したってレベルですが・・・)
当時新人だった僕としては、
「3分掛かった画面が2秒で出るようになった!」
「この人すごw」
と、パフォーマンスチューニングが出来る人がもの凄くかっこよく見えました。
スポンサーリンク
検索すると固まる画面
受入テストが終わり、結合テストのフェーズになりました。
主要な画面の受入テストは完了していたのですが、あまり使われなさそうな画面は未だ受入テストが終わっていないという状態でした。
その為、結合テストはリーダーがテストケースの作成から実施まで全て担当し、僕は受入テストのフェーズで終わらせられなかった(マイナーな)画面の受入テストケースを消化していました。
僕(受注残検索画面か。こんな画面あったんだ。)
僕(画面を開いて検索ボタンをポチッと・・・。)
マウスポインタが砂時計になり画面が固まっている。
僕(あれ?固まった?)
僕は一旦タスクマネージャから画面を強制終了させて、もう一度受注残の検索をしてみました。
しかし、やはり検索結果は表示されず、画面は固まってしまいました。
時間が掛かっているだけなのかと思い、1分位待ってみたのですがそれでも状況は変わりませんでした。
僕「すいません。受注残検索画面が使えないんですけど。」
リーダー「どういうこと?」
僕「検索ボタンを押すと、マウスポインタが砂時計になってそのまま固まります。」
リーダー「本当に?w」
僕「ちょっと見に来て下さい。」
と、これじゃテストが出来ないので、状況をリーダーに報告して実際に見てもらうことにしました。
僕「この画面を開いて検索ボタンをポチッとすると・・・。」
僕「こんな風に固まっちゃいます。」
リーダー「本当だ。なんだこりゃ。」
リーダー「ずーっとこのまま?」
僕「はい、しばらく待ってみたのですがこのままでした。」
リーダー「ちょっと、この画面の設計書見せて。ファイルサーバ開いて。」
僕「はい。」
と、僕達はこの画面の設計書を確認することにしました。
そして設計書を見始めて2分後位でしょうか、なんと検索結果が出てきたのですw
僕「あ!出た!」
リーダー「お!」
リーダー「何これ、超遅いじゃんw」
僕「遅かっただけなんですね。」
リーダー「ちょっとこれは酷いね。すぐに原因を調べて直してもらおう。」
ということで、リーダーは直ぐに開発ベンダーの責任者に電話を掛けて、すぐ直しに来るよう求めていました。
検索結果の表示が3分→2秒へ
そして、翌日。
リーダー「この画面、検索すると3分位掛かるんですけど。原因を調査して修正して下さい。出来れば今日中に!(おこ)」
開発ベンダー責任者「はい。分かりました。」
と、その呼び付けられた開発ベンダーの責任者は空いている席のパソコンを使い、調査を始めました。
そして、数時間後・・・。
開発ベンダー責任者「原因は分かりまして、直してみたところ2秒位で表示されるようになりました。」
僕(え?!マジでw)
リーダー「そうですか。」
開発ベンダー責任者「一応、こんな感じです。(検索ボタンをポチッと)」
一瞬で検索結果が表示され、
リーダー&僕「おおw」
リーダー「何が原因だったんですか?」
開発ベンダー責任者「原因は・・・。」
と原因を話し始めました。
どうやら検索結果を取得するときに、SQL一発で取ってくるような作りになっていなくて、1発目のSQL発行後にアプリケーション側でループさせながら行データを取得するSQLを検索結果の行数分発行するという作りになっていたようです。
つまり、検索結果が100行だとしたらDBアクセスが101回発生し、その都度DBアクセスのオーバヘッドが発生する作りだったのです。
それをSQL一発で取得して表示するように直したということのようでした。
当時の僕にとっては内容が難しくて、
- SQLで出来ることをアプリケーション側でやると遅くなる。
- この画面を作った人はSQLが苦手だったんだろう。
位のことしか理解出来ませんでしたw
そして、この開発ベンダーの責任者が物凄くカッコよく見えましたw
今思うこと
この時の僕にとっては3分掛かったものが2秒になったわけですから、とてつもなく凄いことのように思えました。
呼び付けられた開発ベンダーの責任者はプロフェッショナル中のプロフェショナルなんじゃないかとw
この一件があったせいで僕は少しSQLに興味を持ちましたし、今でも
「プログラマはDBのアーキテクチャを最低限知っておく必要がある」
と思っています。
今思えばこんな修正はすぐ出来て当然だと思いますし、
「そもそもソースレビューしてなかったのねw」
って思っちゃいますが、当時は、
「SQLを使いこなせる人=凄い人」
という認識だったのです。