Oracle Database管理システム(DBMS)の概要ドキュメントを読む
Oracle 19cについて学びたいと思って以前の記事で初期パラメータについてまとめたが、概要ドキュメントから読むべきだった。個人のメモとして重要だと思った情報をまとめる。
スキーマ
Oracleのスキーマは論理データ構造またはスキーマ・オブジェクトの集合。
ユーザーによって所有され、ユーザーと同じ名前である。
表
リレーショナル表は一般的な表、オブジェクト表はユーザー定義のデータ型。オブジェクト型を使用しようすると発注書などの実社会のエンティティをデータベース内のオブジェクトとしてモデル化できる。
<オブジェクト型の作り方>
CREATE TYPE 定義表名
<オブジェクト表の作り方>
CREATE TABLE オブジェクト表明 OF 定義表名
リレーショナル表の種類は、ヒープ構成表(最も単純な表、データが特定の順番で格納されない)、索引構成表(主キーによって整列されておりパフォーマンスに期待できる)、外部表(読み取り専用の表、DBの領域を使わず外部ファイルに書き込まれる)
表圧縮
表圧縮により容量の削減、メモリ使用量の削減が可能、場合によっては問合せ速度も速くなる。表領域、表、パーティションまたはサブパーティション・レベルで圧縮を宣言でき、表領域レベルで指定した場合、その表領域に作成されたすべての表はデフォルトで圧縮される。それぞれの特徴は下記の通り。
表圧縮
パルクロード操作で変更されたデータが圧縮される。
ダイレクトパスinsert、alter table、moveにより圧縮が可能。
行優先形式で格納。
行圧縮
すべてのSQLで変更されたデータが圧縮される。
ダイレクトパスinsert、alter table、moveにより圧縮が可能。
行優先形式で格納。
ALTER TABLE oe.orders ROW STORE COMPRESS ADVANCED;
CREATE TABLE sales (
prod_id NUMBER NOT NULL,
cust_id NUMBER NOT NULL, ... )
PCTFREE 5 NOLOGGING NOCOMPRESS
PARTITION BY RANGE (time_id)
( partition sales_2013 VALUES LESS THAN(TO_DATE(...)) ROW STORE COMPRESS BASIC,
partition sales_2014 VALUES LESS THAN (MAXVALUE) ROW STORE COMPRESS ADVANCED );
列圧縮
行グループの同じ列がまとめて格納されることにより圧縮率が大きい。
すべてのSQLで変更されたデータが圧縮されるが、ダイレクト・パス・ロードではより圧縮率が高い。ただし、表全体がロックされるので同時実行性は低い。ウェアハウス圧縮とアーカイブ圧縮という2つのタイプがあり、アーカイブ圧縮は変更されないデータに対し高圧縮にできるタイプ。
Oracle Exadataでは表問合せのパフォーマンスが最大化できる。それ以外だと圧縮率は同様だが、パフォーマンスは期待できない。まれにアクセスするデータには理想的。
行集合を格納するために圧縮ユニット構造が使用される。
ハイブリッド列圧縮が領域節約につながらない場合、データベースではデータがDBMS_COMPRESSION.COMP_BLOCK形式で格納される。この場合、データベースではハイブリッド列圧縮セグメントにあるブロックにOLTP圧縮が適用される。
LONG型が使用されていないことが、ハイブリッド列圧縮の制約。
デフォルトでは、圧縮ユニットのいずれかの行で更新または削除が発生した場合に、データベースによってそのユニットのすべての行がロックされるが、この問題を回避するために、表で行レベルのロックを有効にすることができる。この場合は、更新または削除操作の影響を受ける行のみがデータベースによってロックされる。
★ハイブリッド列圧縮がおすすめみたい
参考
データベースの概念
https://docs.oracle.com/cd/E96517_01/cncpt/tables-and-table-clusters.html#GUID-04AADD81-E5C2-498B-B857-DF2A37DD3520
実践!データ圧縮の効果的な活用テクニック
https://www.oracle.com/jp/a/tech/docs/technical-resources/0315-1100-compression.pdf
→結局このドキュメントがわかりやすい