shin'nosuke さんのアレグロモデラート

アレグロモデラート(Allegro moderato)は、速さを示す演奏記号で「穏やかに速く」

データベースは生き物だ

 新人のころ、ネットワークスペシャリスト(国家資格)を目指していた同期が「ネットワークは生きている」と言っていたことがあったが、TCP/IP以降のネットワークは、インフラが安定したせいもあってか比較的素直で、たとえば、DHCPサーバーが同一セグメント内に重複していたときに生きているような素振りを見せるが、正直なところ、生きていると感じたことはなかった。
 とある顧客のシステム切り替えで、Oracleを9iから10gにした。データベースオブジェクトをクリエイトして、データベース内容をEXP→IMPして移行したわけだが、十分なパフォーマンスが得られない、というか確実に前より遅い。ハードウェアは移行前より格段にグレードアップしている。2CPUの4コアだ。メモリもじゅうぶん。各家庭にまで光ファイバーが来ている21世紀の昨今、企業の基幹ネットワークが遅いということはありえない。SQL*PLUS上で実行したSQLが遅いわけで、問題は確実にOracleエンジンにある。(まだお目にかかったことはないが)マイナーバージョンにありがちな不具合か?との結論に至りそうになったが、一緒に切り替えに参加していたメンバー(僕から見ればお客さん)が「Oraclef夜10時にデータベースの最適化を行う」という、あるインターネット上での記述を見つけた。OEM上でも、最適化時刻が入っていないオブジェクトがいくつかある。OiCSでも「昨日まで快適に動いていたクエリーが遅くなった」というトピックがあり、「夜10時にデータベースの分析が行われ、もっとも早くクエリーが実行できるようにシステムディクショナリに最適化内容が記録される」とあった。ようするにOracleは自分自身でパフォーマンスを(向上させるというよりは)コントロールする機構を持っているということなのだ。クエリは夜10時を過ぎて快適に動き出した。
 サーバーソフトウェアとしてのOracleは優秀で、かゆいところにも比較的容易に手が届く、どちらかというと正直なヤツだ。偏屈なのは、5.0以前IIS(設定がすぐに反映されない。設定項目が非常に少ない。)とか、R5以前のNotes/Domino(よく落ちる、デフォルトで変なバッチがいっぱい動く、設定がすぐ反映されない。)思ったとおりに動かないサーバーソフトウェアはたくさんあるのだが、Oracleは正直であるという経験上、Oracleに夜バッチがあるなんて、そんなことは思いもしなかった!
 ソフトウェアとは、結局のところ、0と1の羅列でしかないのだが、それらが数10億(数百MB)に及ぶと、羅列は意味を為し、Oracleの30年近くの歴史のなかで、コードは成長し続けてきた。今回のように、自律型のアルゴリズムが搭載されていると痛感したときに(知っているか知らないかの違いではあるのだが)「データベースは生き物だ」と発言させられた。まだまだ知らないことはたくさんありそうだ。とくにRDBMSについては。