オラクルサミット行ってきました。オラクル30周年&Oracle11gということで気合いの入ったイベントでした。
因みにOracle11はRealCustomerReleaseということでお客様のバリューを一番に考えたリリースらしい。
大規模データウエアハウスにおけるチューニングノウハウ
DWHのチューニングには大きく2つある
- 設計段階でのチューニング
- テスト段階でのチューニング
それに対しOracle11gでは機能拡張として以下機能を提供している (★は個人的なスゴイ度レベル)
パーティショニングメソッドの拡張
今までレンジ×リスト/ハッシュしか使えなかったコンポジットパーティショニングがフルサポートに
レンジ | リスト | ハッシュ | |
---|---|---|---|
レンジ | 11g | 9i | 9i |
リスト | 11g | 11g | 11g |
これで不連続だろうが何だろうがパーティションしまくりウマー
バーチャルカラムパーティショニング
これは凄い!!!マジで
今までパーティション化キーには実際にテーブルに存在する物しか指定できなかったが、11gからテーブルに存在しないカラムでもパーティション化できるようになった。
バーチャルカラムはファンクションにて定義され領域を取られず使用できる。
CREATE TABLE GARA ( C1 NUMBER, C2 NUMBER, C3 AS (C1 + C2) VIRTUAL ) PARTITION BY LIST (C3)
バーチャルカラムはもちろんパーティションキーとしてでなくそのまま使用できる。
- データ型はスカラーのみ。LOB等は作れない
- ヒープ表のみに使用可能(索引構成表とかはだめ)
- インデックス張れる(ファンクションインデックスと同意)
- UPDATE、DELETE、SELECTのWHEREに指定できる
これは便利すぐるwwww
リファレンスパーティショニング
表に親子関係が有る場合(売上と売上明細みたいな)子表にパーティション化キーが無くても親表に合わせて自動的にパーティションしてくれる。
地味に便利。パーティションの為だけに子表にキーを持たせたりする必要無し!これでいつでもパーティションワイズジョインしまくり。
マテリアライズドビューの拡張
Mviewのベース表に更新がかかってリライト出来なくて重くなるのを回避できるようになった。(正直よくわからんwwww)
インラインビューでもクエリーリライト出来るようになった。
OLAPキューブ(多次元データベース)に対する透過的なSQLリライトが可能になりキューブマテリアライズドビューの構築が容易に
リザルトキャッシュ
従来ののバッファキャッシュはIOに対するキャッシュでありソート等の処理が有った場合は処理は早くなっていなかった。
それに対しリザルトキャッシュはクエリの実結果をキャッシュする(キャッシュ先はSGA)。そのため超高速。またキャッシュはサーバーセッション間で共有されクエリ、クエリブロックで透過的に利用される。
つまり誰かが社員テーブルから男性を検索する結果ををキャッシュしておいたとすると他の人がインラインビューに社員テーブルから男性を検索するものを含むクエリを発行した場合そのキャッシュがしようされちゃう!
PLSQLのファンクション実行結果もキャッシュ出来る。バインド変数、ファンクション引数毎にキャッシュされるのでバッチなどは相当高速化できそう。
もちろんキャシュは読み取り一貫性を保証。(データ更新時は自動的にキャシュ無効化)
これ凄すぎだろ。
これ以外にもConsistentClientCasheというOCIのクライアントでクエリ結果をキャッシュする機能とかもある。
固定的なテーブルを何度も検索する場合はOCIのネットワークコストすら回避できる!!うほwwww