DB Magazine SEP,2006

OTNの特典につられて,DBマガジンの年間購読をした.余り期待していなかったが,まぁ,他のDBの概要,あるいは宣伝文句くらいを吸収するのはいいかもしれない.

(特集1)チューニングポイントベスト10

Oracle, SQL Server, DB2, MySQLについて,チューニングポイントを簡単に触れている.このDBMSの選択からも,この雑誌のターゲットがどういう人たちに向けられているかがよくわかる.
まず,チューニング全般のお話について述べているが,内容が概論的で基礎的な内容.初心者向け?
Oracle編は索引については先述のBツリー索引のみの解説.DWHを担当する私には他の索引の内容が知りたかった.そのほか

  • マテリアライズドビューを設定しておくと,元の表への検索でもうまく使えればクエリーをリライトするらしい
  • SGA_TARGETを設定すると,メモリ割り当て系のチューニングが自動化されるらしい(いいねぇ!)
  • 表のパーティションはDWHでも検討すべきだろう.効果は歴然のようだ・・・.(この辺は宣伝文句として受け取るべきかも〜)
  • Oracle10gよりフラグメンテーションの解除がSQLでできる.(これは,大きい)

SQL-Serverは知らない事が多いが,面白かった点は,

  • アーキテクチャはそれほど他のDBMSとの違いは少ない.名前がちがうけど.
  • Oracleでいうところの索引構成表のような表であるクラスタ化インデックスによるチューニングがポピュラー.また,クエリーをカバーできるようにインデックス自体を構成することで,データ列にアクセスしないというチューニングもメジャーらしい
  • SQL-ServerはDB2と同様に共有ロックが必要なRDBMSだったが,2005から,ついにMVCCが導入され,行バージョン管理を利用した読み取り一貫性のサポートが行われている.でも,記事では機能の紹介のみで,どのような場合にどう使用するかというような指針は示されず.残念.こういうときこそ,「筆者はこういうシステムのトランザクションでこれをつかうと,パフォーマンスが改善した」的な内容を書いて欲しかった・・・.
  • インデックスの再編成と再構築がオンラインで可能

DB2でおもしろかったのは,表の定義の見直しで,NOT NULL制約はできる限り付ける,VARCHARでなくCHARを付ける,必要な制約を付ける,というもの.とくにCHARにするメリットがDB2では大きい.NOT NULLはともかく,必要な制約を付けるというのは,設計指針としてはいいが,チューニングとしては特に関係ないような気もする.
MySQLはストレージエンジンという優れた概念があり,さあざまなフォーマットでストレージに格納できる.一般的にはInnoDBを使うことが多いと思うが,DWHではむしろMyISAMのほうが使い勝手がよい.このストレージエンジンによってチューニングの方針もずいぶんちがう.そのほか

  • InnoDBは主キーにクラスタ索引を使用している.これは,SQLServerクラスタ化インデックスに近い.SQL-Serverのときもそうだが,主キーに対する値の変更はしないようにしないと,格納構造と主キーが密接に関係しているので,処理が重い.そのため,単純な一連の番号を主キーにする代理キーの導入が有効だろう.
  • MyISAMは表全体の件数を返す処理は一瞬で終わる
  • InnoDBで件数を返すときは大きなクラスタ索引を検索するのではなく,小さな二次索引を検索するようにする
  • InnoDBでは,文字列型は常に可変長を使うべき.MyISAMは逆に常に固定長を使うべき.

(特集2)データ型を極める

データ型を極める,といってJDBCがでてくるあたりが,この雑誌の性質をよく表している(しつこい).先ほどの特集の4つのDBについて型の扱いがちがう,ということを述べている.型に限らず,SQLの関数も違うので,SQLを直書きするJDBCにDBの透過性があるわけがない.なお,JDBCJavaのデータ型をSQL標準のデータ型に割り当てているらしいので,結局こういう感じになる(雑誌の図3は微妙に違うような)

  1. Javaのデータ型(プリミティブ型,参照型含む)
  2. SQL標準データ型
  3. DBMS固有データ型

あとは,数値,文字列,日付などの各型についての各データベースの違いについて述べられている.DB間の移行を行うときは便利かもしれないが,型以外にも考えなければいけないことが多いので,もう一度マニュアルを読み直すくらい必要かもしれない.