幸せは金で買えない。しかし・・・

 ようやく春の嵐が過ぎ去り、無事 4/1 にシステムのカットオーバーを迎えることができました。まだしばらく集中監視期間が続くので、完全に安心はできませんが、とりあえずプロジェクトに尽力いただいた皆さん、お疲れ様でした。

 今回、私は最終フェーズでのパフォーマンス・チューニングという、ある意味でプロジェクトが貯めてきた全てのツケを払う役回りで1ヶ月だけ参加したのですが、その体験で感じたことをまとめてみたいと思います。けっこう普遍性のある話だと思います。

 まず、パフォーマンス・チューニングというのは、仕事としては面白いし、やり甲斐のあるものです。私は DB が専門(今回は Oracle だった)なので NW や OS についてはそれほど詳しくないのですが、それでも性能問題というのは、原因を突き詰めていく過程で非常にシステムの内部ロジックに詳しくなれる。というか、詳しくならないと解決できないので、嫌でも詳しくなります。

 また、システムのパフォーマンスが上がる瞬間というのは、純粋に悦楽的です。それまで1日かかっていた処理が瞬殺で終わると、マシンルームで「おぉー!」という歓声が上がり、ハイタッチが出る。たぶん、スポーツカーをチューニングして最高速度でぶっ飛ばしたときの爽快感は、こんな感じなのでしょう。映像でカーレースを見ると、F1 のメカニックというのは世界で一番で楽しく仕事をしている人たちに見えるけど、その理由が少し分かる。

 でも一方で、私はパフォーマンス・チューニングという仕事は消えてなくなるべきだと思っています。これは私の持論なので、前も書いたことがありますが、今回もその思いを強くした。

 その理由は、端的に言ってしまえば、システムのチューニングが不毛な退却戦だからです。この仕事の目的はいかに出血を少なく敗北するか、その方法を考えるものなので、基本的な思考の枠組みからして後ろ向きなのです。性能問題に関わっていると、新しい価値を生み出したり、プロジェクトをうまく切り盛りしたり、そういう前向きな仕事は一切できない。消防車には火事を消すことはできても、火事を未然に防ぐことができないのと同じです。

 もちろん、退却戦は戦いの中で一番難しいものですから、それを経験するとメンバーは物凄く鍛えられて、高い経験値を得ます。かの前田慶次も負け戦の中で自らを鍛え上げたというではありませんか。

 今回、最も大きなボトルネックだったのは、性能問題の定番、ストレージのディスク I/O でした。しかも BI ツールのパッケージが吐く SQL を改変することができず、ヒント句も入れられないというきつい条件下だったため、参加したメンバーは、私を含め非常に勉強になりました。でもメンバーの教育のために火事を起こすというのも、倒錯した話です。それならもっと効率的な学習方法がある。

 一緒にプロジェクトに入った同僚の一人が「こんなの、メモリ 100G 積んで片端からテーブルやインデックスを KEEP バッファに載せてしまえば、全て解決するのに」と漏らしていた。彼は冗談のつもりで笑っていたけど、これはとても重要なポイントを指摘した言葉です。実際、性能問題はハードに金を積みさえすれば大半が解決するのです。しかも、別に大金が欲しいというのではありません。100万円、たった100万円分のメモリを積んでくれさえすればいいのです。それでディスク I/O は綺麗に消えてなくなる。10人の人間を1ヶ月はりつけて人力でゴリゴリ解決しようとするよりずっと安上がりかつ短期間で、効果も確実です。メモリなんて今では安い買い物なんだから、湯水のように使えばいいのです。

 こんな合理的な解決策があるのに、なぜ人はハードによる解決を拒み、人力で何とかしようとするのか? その理由は私には分かりません(だって私なら絶対ハードで解決しようとするから)。ハードが高価だった昔の感覚が、今でも呪いのように思考を縛っているのかもしれません。あるいは、下流工程になってからハードの増強をすることは、自分たちの設計が間違っていたことを認めることになるので、心理的な障壁が高いのかもしれない。「認めたくないものだな、若さゆえの過ちというものは」というやつです。または、別の理由でフィージビリティに問題があるのかもしれない(今回一緒に仕事をした Oracle コンサルさんが「ベンダー系の場合は、メモリが足りないと呟くと次の日にはもうサーバに新しいメモリがささっている」と言っていたから、そういう環境の違いは、確かにあるのでしょう)。

 でも、いずれにせよ人力によるパフォーマンス・チューニングは、長期的なトレンドで見れば絶対に減っていくし、また減っていくべきだと思います。遠くない将来、パフォーマンスは金で買う時代が来る。もう DB サーバはメモリ 50G を最小構成とするよう国会で法案通してもいいぐらいだと思う。

 金を積んでも、決してそれだけでプロジェクトを成功させることはできません。しかし、無用の不幸を追い払うことはできる。金はそういう用途にこそ使うべきだと私は思うのですが、皆さんはどう考えるでしょうか。