Oracle新人のRACインストール その14

投稿日: 2006年8月02日

<Oracle新人のRACインストール その14>
ペンネーム: world famous beagle

今週は、先週の続きからです。
印旛くんは、岸田さんの衝撃発言により、CRS、DBの再インストール中です。

それでは、早速スタート!

スムーズにインストール作業は進んでるな。
色々知ってればこんなにスムーズにできるものなのか。
って、感心してる場合じゃない!
マルチタスク、マルチタスク。

データウェアハウスとトランザクション処理の違いを調べてみよう。

データウェアハウスは、データの倉庫って訳せるよね。
データベースよりもなんだか大きそうな感じはするけど・・・。
ビル・インモンっていう人が初めて定義したみたいだな。
この人の定義によると・・・
「意思決定のために、目的別ごとに編成され、統合化された時系列で、更新処
理をしないデータの集まり」
「定義」っていつもわかりにくいよなぁ。
みんなにわかんなかったら定義してる意味がないような気がするのは、僕だけ
だろうか。

トランザクション処理は、トランザクションを処理するんだから、やっぱりオ
ンラインショッピングのデータベースみたいなのを指してるんじゃないかな。

うーん。やっぱり1人で考えててもわかんないな。

「印旛くん、君今なにやってんの?」
「あ、今インストールの待ち時間なので、データウェアハウスとトランザクシ
ョン処理の違いを調べてました。マルチタスクです」
「そんなの調べなくていいから、初期パラを調べて」
「はい・・・」

初期パラ???

「富樫さん、初期パラっていうのは、Oracleの設定ファイルのことですよね?」
「そうだよ。けど、その口ぶりだとなんのことだかわかってないでしょ?」
「あ、よくわかりますね」
「初期パラっていうのは、確かにOracleの設定ファイルのことだけど、これは、
Oracleが起動するときに、このパラメータの値を読み込んで起動するんだよ」
「・・・・・」
「例えば、SGAは知ってるよね?Oracleが使うメモリ空間のサイズは、どうや
って決まってると思う?それを初期パラで決めてるんだよ」
「あーなるほど」
「他にも、ブロックサイズとか色々あるけど、
それは岸田さんが作った設計書を見れば書いてあるはずだよ」
「はい、それは見ました」

「あの、今思ったんですけど、DBCAの始めの画面で、
データベーステンプレートを選択しますよね?そこで、データウェアハウスと
かトランザクション処理っていうのがあるんですけど、そのテンプレートって
いうのは、初期化パラメータが違うって事ですか?」
「うーん。そうだね。そんなこと考えたことなかったな。
あともしかしたらデータファイルのサイズが違うかもしれないけど。見てみれば」
「見れるんですか?」
「見れるでしょ」

$ cd $ORACLE_HOME/assistants/dbca/templates
$ ls
Data_Warehouse.dbc   New_Database.dbt
Seed_Database.dfb    example.dmp
General_Purpose.dbc  Seed_Database.ctl
Transaction_Processing.dbc  example01.dfb

「この中の、データウェアハウスとトランザクションっていうのを比較すれば
いいんじゃない?」

$ diff Data_Warehouse.dbc Transaction_Processing.dbc
2c2
<
---
>
32c32
<
---
>
35d34
<
52c51
<
---
>

「pga_aggregate_targetとdb_file_multiblock_read_countっていうパラメー
タの値が違うみたいだね。あとは、star_transformation_enabledかな」
「うわぁー、さすが富樫さん」
「DWHは、分析処理に使われることが多いから、データの検索、加工、結合み
たいな処理が多いのは、なんとなくわかるよね?逆に、トランザクション処理
は、データの入力、変更、削除が多い。
この辺で、初期パラに少しだけ差があるんだと思うよ」
「うーん。PGAのサイズが大きいのは、ソートエリアが大きい方が分析処理には
よさそうですもんね。なるほどな」
「もう1つのdb_file_multiblock_read_countっていうのは、Oracleが全表検
索するときに、読み込むブロック数なんだけど、これも、DWHの方が値が大き
いのは、その方が効率よく、検索できるからなんだよ。勉強していけば理由が
わかるようになるよ」
「はい。これから勉強してみます」
「それぞれのパラメータが何かとか、
なぜその値で設定するのかとかを勉強した方がいいね」
「そういうことですか。わかりました。ありがとうございます」
「うん。まずは、db_block_sizeあたりから調べてみるといいよ」
「はい。そうします」

よし、早速、db_block_sizeを調べてみよう。
db_block_sizeっていうのは、SGAにキャッシュされるブロックサイズ。
2k~32k(2,4,8,16,32k)で設定できて、10gR2のデフォルトのサイズは、8kか。
どういうサイズなんだろう。
富樫さんの話だと、これが小さい時とか、大きい時の違いがわかればいいんだ
よね。

あ、このパラメータは後から変更できない、って書いてあるな。
これは、注意しなきゃいけないぞ。
岸田さんの設計書では、4kになってるな。
デフォルトより小さいのか。うーーん。
なんのためか、が重要なのはわかるけど・・・。

「斉藤くん、db_block_sizeは何のために大きくしたり、小さくしたりするの?」
「Disk I/Oの回数を減らすためですよ」
「え?」
「Diskへのアクセスが多いと、どうしてもOracleは遅くなってしまいますから、
なるべくI/Oの回数が少ない方がいいんです」
「うん。それと、db_block_sizeはどう関係あるの?」
「単純に言うと、32kのデータを取ってくる場合、db_block_sizeが2kだと、
16回のI/Oが必要ですよね。それが、db_block_sizeが32kだと1回ですみます」
「あーーー。なるほど」
「実際は、そのデータベースのアクセスパターンなども関係ありますから、
そんなに単純ではないです」
「うん。ありがと」

「岸田さん、db_block_sizeが岸田さんの設計書だと4kになってるんですけど、
なんで4kにしたんですか?」
「なんでだろうね」
「あの、あまり大きなレコードが入っていない、とかその方が、I/Oの回数が、
少なくてすむ、とかそういう理由ですよね?」
「32kにする時は、どんなシステムだと思う?」
「バッチ処理のシステムだと、全表検索が多いから、32kの方がいいですよね?」
「それじゃ、うすいな。
例えば、あるスーパーマーケットがあって、その店には3000種類位の製品があ
って、ある地域に20店舗位あるとして、その店舗の売上げの集計を夜中にバッ
チ処理でやる場合は、32kの方が早いよね。
けど、同じ店の同じシステムで、レジでお客さんが何か買った時に、すぐに売
上表に売上げが書き込まれるような時は、2kで十分だよね。じゃあ、このシス
テムは、32kと2kのどっちを選択すると思う?」
「・・・・・」
「うん。そんな単純に決められるパラメータじゃないことはわかった?」
「はい」
「しっかり、そのシステムのアクセスパターンや用途をお客さんに聞いて、
決める必要があるんだよ」
「はい」
「まだ、君にはそこまで求めてないから、大体そのくらいわかってればいいよ」
「わかりました。ありがとうございました」

岸田さんの言うことは、説得力あるよなぁ。

———————————————————————–
ついに、梅雨が明けたみたいですが、
全然暑くなってきませんね。
なんだか年々、気候が変わっている気がしますが・・・。
地球が温暖化してるっていうのも、本当ですかね。
子供のときの方が夏は暑かったような。