MT4i に欠陥があると言われて凹む

  • 投稿日:
  • by

まぁ、分からんでもない。

FIVBバレーボールワールドカップ2007」が11月2日より開催されています。予想通り、僕が運営しているバレーボールのブログの PV は急激に伸び、しかしその伸びは予想外に多く、昨年の世界選手権時をしのぐ勢いで、やはりバレーボールと言えばフジテレビなのかなぁ、などとその威力を痛感している次第です。

特に MT4i で構成する携帯版の方の伸びが顕著で、「DBサーバに高負荷をかけている」ということでさくらインターネットにパーミッションを変更されてしまいました。

「高負荷」の原因については、単にアクセスの急増と思っていたのですが、何度かサポートとメールをやり取りしたところ、それ以前にもっと根本的なところで問題があるとのこと。以下、メールより該当部分を引用します。

上記過負荷については、アクセス数の問題ではなく、mt4i の構造上の問題の
ようでございます。データ記事を取得する際に、稀に全ての記事データを取得し
ようとするため、一時的に帯域を占有するほどのトラフィック(最大80Mbps)
が発生し、サーバとデータベースサーバ間の帯域を圧迫し、著しくパフォーマ
ンスを落とす状況となります。

この問題は mt4i のプログラム上の大きな欠陥となり、データベースを快適に
ご利用いただく上で、弊社としてはご利用をお控えいただくことをお勧めしま
す。

まぢですか!Σ( ̄ロ ̄lll)

エントリーのデータを全件取得する箇所というと、非表示カテゴリをしている場合に通るところがあります。しかし、僕のブログでは非表示カテゴリは使っていません。

色々と考えをめぐらせてみると、思い当たったのが、カテゴリでの絞り込みをした際の個別エントリーページの表示。この時、前のエントリーと次のエントリーへリンクを張るわけですが、ここのロジックがかなり地道な作業を行っており、一つエントリーを拾ってきてカテゴリを照会し、異なれば次のエントリーを拾って、ということをやっているんですね。で、コレで何がどうなるのかというと、膨大なエントリーがあるブログで、例えばとあるカテゴリーに1件しかエントリーがない場合、あるはずのない同一カテゴリーに所属するエントリーを求めて、端から端までなめる訳です。

これはまずい。

ひとまず、カテゴリーセレクタの使用を止め、検索エンジン対策として、引数にカテゴリーを指定してきたアクセスは問答無用にシャットアウトするよう、コードを変更して再開しました。この件についてサポートからまだ返答はありませんが、見ている限りではプロセスが延々と滞在するようなことがなくなったようなので、上記推測はビンゴ、だと思われます。

最終的には、カテゴリーでの絞込みをしている際には、個別エントリーページでの前・次エントリーへのリンクを表示しない方向で修正、リリースする必要がありますね。同様の理由で、非表示カテゴリについてもコードを見直し、場合によっては、機能を廃止することも検討しなくてはと思いました。

色々と問題が山積みですな。ううむ。