実践!パーティションの基本から実装例まで -...

80
実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト セールスコンサルタント 鈴木悠也

Upload: others

Post on 12-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

実践!パーティションの基本から実装例まで

日本オラクル株式会社 オラクルダイレクト セールスコンサルタント 鈴木悠也

Page 2: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

2

Page 3: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

3

Page 4: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

800 Exabytes

2009年

35,000 ExaBytes

2020年

150 Exabytes

~2009年(累計)

175 Exabytes

2010年(単年)

新規デジタルデータ

ネットワーク・トラフィック

情報爆発 大量のデータの管理

4

Page 5: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブル運用時の課題

障害やメンテナンスの際、表の全てのデータにアクセスができない

データ量が増えると検索が遅くなる

バックアップやデータのローディング、統計情報の取得に時間がかかる

5

Page 6: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブル運用の問題点 問題点①パフォーマンスの低下

• データ量が少ない場合

結果

売上表

第4四半期の合計売上高が見たい

比較的短い時間で検索結果を取得

1.パフォーマンス

2.運用・管理

3.可用性

6

Page 7: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブル運用の問題点 問題点①パフォーマンスの低下

結果

売上表

全く同じSelect文を投げたとしても、

データ量によって結果が返ってくる時間が著しく異なる

第4四半期の合計売上高が見たい

• データ量が増えてくると・・・

1.パフォーマンス

2.運用・管理

3.可用性

7

Page 8: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブル運用の問題点 問題点①パフォーマンスの低下

• 物理的に表を分割することも可能だが…

2008年売上表 SELECT ・・・ FROM 2008年売上表;

2009年売上表

2010年売上表

アプリケーションの変更作業が発生

1.パフォーマンス

2.運用・管理

3.可用性

8

Page 9: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 一定の周期でデータの入れ替えを行う ローリングウィンドウ操作の場合・・・

大規模テーブル運用の問題点 問題点②運用・管理作業の負荷が増大

売上表

データの入れ替え、 索引の再作成、統計情報の再取得に時間がかかる!!

1.パフォーマンス

2.運用・管理

3.可用性

2011年 データ

2001年 データ

9

Page 10: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブル運用の問題点 問題点③可用性の低下

破損範囲がごく一部でも表全体をオフラインにして

メンテナンスを行う必要がある

売上表 • 表の一部分に障害が起きると・・・

1.パフォーマンス

2.運用・管理

3.可用性

10

Page 11: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

11

Page 12: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションとは?

通常の1つの表 パーティション化された表

大きな表や索引をデータベース内部で

複数の領域に分割して管理する

内部的に表を分割

ユーザやアプリケーションからは

ひとつの表に見える

1-3月 4-6月

7-9月 10-12月

Enterprise Edition

Partitioning Option

12

Page 13: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

表分割の仕組み

売上日 製品 支店 売上

丸の内

丸の内

・・・・・・・・・・ ・・・・・・・・・ ・・・・・・ ・・・・・・・・

腕時計 神奈川

・・・・・・・・・・ ・・・・・・・・・ ・・・・・・ ・・・・・・・・

新潟

【売上表を4半期単位で分割する場合:】

売上日 製品 支店 売上

丸の内

丸の内

売上日 製品 支店 売上

腕時計 神奈川

2010年Q1

2010年Q2

2010年Q4 ・・・・・・・・・

売上日 製品 支店 売上

新潟

売上日をパーティション化キーとして分割

• パーティション化キー:表を分割する基準となる列を指定

複数列をパーティション化キーとして指定可 (例:年、月、日、3つの列で成り立っている表を分割する場合)

13

Page 14: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

14

Page 15: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションのメリット

1. パフォーマンスの低下 データ量が増えると検索が遅くなる

2. 管理作業が大変 バックアップやデータのローディングに時間がかかる

3. 可用性の低下 障害やメンテナンスの際、表の全てのデータにアクセスができない

15

Page 16: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション・プルーニング

• 対象のデータが格納されているパーティションだけに アクセスし、不要なパーティションを読み飛ばす機能

オプティマイザ

SELECT SUM(amount_sold) FROM sales WHERE sales_date BETWEEN 10 AND 12;

Oracle

データベース Q1

パーティション

Q2 パーティション

Q3 パーティション

Q4 パーティション

売上表

第4四半期の 合計売上高を集計したい

16

Page 17: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション・プルーニング 注意事項

• パーティション・プルーニングが機能するには、 WHERE句の条件にパーティション化キーを含める必要があります

• パーティション化キーに対して関数が実行されているSQL文は パーティション・プルーニングの対象にはなりません

SELECT SUM(amount_sold) FROM sales WHERE TO_CHAR( time_id,'DDMMYY')=‘110101’;

SELECT SUM(amount_sold) FROM sales WHERE time_id=TO_DATE(‘110101’,’DDMMYY’);

17

Page 18: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション・プルーニングの効果 テーブル・サイズ : 3GB ※ パーティション・テーブルの1件検索処理時間を

10msecとした場合の相対処理時間 ( 実際の処理時間に任意の数を掛けています )

0 10 20 30 40 50 60 70

1日

1ケ月分

1年分

全データ

一ヶ月ごと 1年毎 非パーティション 処理時間

取得データ量

(5000万件)

(1000万件)

(100万件)

(2万件)

18

Page 19: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

Demonstration

パーティションプルーニングの効果

19

Page 20: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションのメリット

1. パフォーマンスの低下 データ量が増えると検索が遅くなる

2. 管理作業が大変 バックアップやデータのローディングに時間がかかる

3. 可用性の低下 障害やメンテナンスの際、表の全てのデータにアクセスができない

20

Page 21: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

2012年Q1 パーティション

2011年Q1 パーティション

2011年Q2 パーティション

2011年Q3 パーティション

2011年Q4 パーティション

売上表

• データの大量挿入・削除はシステム全体のパフォーマンスに悪影響

• 大規模なテーブルで時間がかかっていた、データの更新・削除などをパーティション単位で行うことが可能

管理作業もパーティション単位

ALTER TABLE sales DROP PARTITION 2011_Q1;

ALTER TABLE sales ADD PARTITION 2012_Q1;

21

Page 22: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

管理作業もパーティション単位

Q1 パーティション

Q2 パーティション

Q3 パーティション

Q4 パーティション

売上表

• 統計情報の取得もパーティション単位

• 作業中は他のパーティションは影響を受けない

BEGIN DBMS_STATS.GATHER_TABLE_STATS (‘sh,’sales’,’2011_q1’); END; /

22

Page 23: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

ローリングウィンドウ操作の処理時間比較

0.00 5.00 10.00 15.00 20.00 25.00 30.00 35.00 40.00

非パーティション

パーティション

データを削除 新パーティション作成 データ挿入

索引作成 統計情報取得

• 100万件(2年間)のデータが入った表から最も古い4半期(10万)件のデータを削除し新しい4半期(10万件)のデータと入れ替え

• パーティション単位での索引の作成、統計情報の取得による高速化

23

Page 24: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションのメリット 1. パフォーマンスの低下

データ量が増えると検索が遅くなる

2. 管理作業が大変 バックアップやデータのローディングに時間がかかる

3. 可用性の低下 障害やメンテナンスの際、表の全てのデータにアクセスができない

24

Page 25: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション単位で障害の影響を限定 • 特定のパーティションに障害が発生しても、

他のパーティションは影響を受けない

• パーティション単位でリカバリを行えるので、障害から短時間で復旧できる

パーティション単位 でリカバリ実行

売上表

2011年Q4 パーティション

Q1~Q3のデータは、 リカバリ中でも

通常通りアクセス可

2011年Q1 パーティション

2011年Q2 パーティション

2011年Q3 パーティション

2011年Q4 パーティション

25

Page 26: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

26

Page 27: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションの種類

• 単一レベル・パーティション レンジ・パーティション 8i~

リスト・パーティション 9i~

ハッシュ・パーティション 8i~

• コンポジット・パーティション

• パーティション化の拡張 インターバル・パーティション 11g~

リファレンス・パーティション 11g~

バーチャルカラム・パーティション 11g~

サブ

レンジ リスト ハッシュ

メイン

レンジ 11g~ 9i~ 8i~

リスト 11g~ 11g~ 11g~

27

Page 28: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 値の範囲でデータを分割する 特定の連続するデータ(売上日、顧客ID etc)の範囲によって分割

売上表

Q1 パーティション

Q2 パーティション

Q3 パーティション

2011年 4~6月 売上日

2011年 7~9月 売上日

2011年 10~12月 売上日

2011年 1~3月 売上日

Q4 パーティション

売上表

レンジ・パーティション

28

Page 29: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

CREATE TABLE sales

(product_id NUMBER(4) NOT NULL,

sales_date DATE,

Customer_id VARCHAR2(40))

PARTITION BY RANGE(sales_date)

(PARTITION sales_p1 VALUES LESS THAN(TO_DATE(' 2011/04/01 ','YYYY/MM/DD')) TABLESPACE Q1,

PARTITION sales_p2 VALUES LESS THAN(TO_DATE(' 2011/07/01 ','YYYY/MM/DD')) TABLESPACE Q2,

PARTITION sales_p3 VALUES LESS THAN(TO_DATE(' 2011/10/01 ','YYYY/MM/DD')) TABLESPACE Q3,

PARTITION sales_p4 VALUES LESS THAN(TO_DATE(' 2012/01/01 ','YYYY/MM/DD')) TABLESPACE Q4);

レンジ・パーティション作成方法

• CREATE TABLE・・・・・・PARTITION句を使用して作成

• レンジパーティションの場合 VALUES LESS THANキーワードを使用し、分割する範囲を決定

2011年 1~3月

(”売上日”)

2011年 4~6月

(”売上日”)

2011年 7~9月

(”売上日”)

sales_p1

sales_p2

sales_p3

VALUES LESS THAN (2011/04/01)

VALUES LESS THAN (2011/7/01)

VALUES LESS THAN (2011/10/01)

2011年 10~12月

(”売上日”)

sales_p4 VALUES LESS THAN (2012/01/01)

パーティション化するキー列を指定

VALUES LESS THANキーワードを使用

売上表

29

Page 30: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

表分割の注意点

2011年 1~3月

(”売上日”)

2011年 4~6月

(”売上日”)

2011年 7~9月

(”売上日”)

sales_p1

sales_p2

sales_p3

VALUES LESS THAN (2011/04/01)

VALUES LESS THAN (2011/07/01)

VALUES LESS THAN (2011/10/01)

2011年 10~12月

(”売上日”)

sales_p4 VALUES LESS THAN (2012/01/01)

売上表

2012年1月のデータを挿入

• 2012年1月1日以降のデータは格納先のパーティション表が定義されていないのでエラーになる

30

【2011年のデータを格納するレンジ・パーティションの場合】

ORA-14400:

挿入されたパーティション・キーはどのパーティションにもマップされません。

Page 31: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

表分割の注意点

• ADD PARTITION句を利用し、随時DB管理者が パーティションを追加

2012年 1~3月

(”売上日”) sales_p5 VALUES LESS THAN (2012/04/01)

ALTER TABLE sales ADD PARTITION sales_p5 VALUES LESS THAN (TO_DATE('2012/04/01','YYYY/MM/DD'));

31

【2011年のデータを格納するレンジ・パーティションの場合】

2011年 1~3月

(”売上日”)

2011年 4~6月

(”売上日”)

2011年 7~9月

(”売上日”)

sales_p1

sales_p2

sales_p3

VALUES LESS THAN (2011/04/01)

VALUES LESS THAN (2011/07/01)

VALUES LESS THAN (2011/10/01)

2011年 10~12月

(”売上日”)

sales_p4 VALUES LESS THAN (2012/01/01)

売上表

2012年1月のデータを挿入

Page 32: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

表分割の注意点

• MAXVALUE句で指定されたパーティション表に、 定義されている値を超えるデータが全て格納される(NULL値も含む)

ALTER TABLE sales ADD PARTITION sales_p5 VALUES LESS THAN (MAXVALUE);

32

2012年 1~3月

(MAXVALUE) sales_p5 VALUES LESS THAN (MAXVALUE)

2011年 1~3月

(”売上日”)

2011年 4~6月

(”売上日”)

2011年 7~9月

(”売上日”)

sales_p1

sales_p2

sales_p3

VALUES LESS THAN (2011/04/01)

VALUES LESS THAN (2011/07/01)

VALUES LESS THAN (2011/10/01)

2011年 10~12月

(”売上日”)

sales_p4 VALUES LESS THAN (2012/01/01)

売上表

2012年1月のデータを挿入

【2011年のデータを格納するレンジ・パーティションの場合】

Page 33: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

インターバルパーティション

• 定義したインターバル期間に従い、レコードの挿入時に 必要に応じて自動的にパーティションが追加される DBAの管理業務コストを軽減することが可能

• レンジ・パーティションから変更することも可能

売上表 2011年11月

・・・ DBA

USER

自動で追加 ZZZ

○ CREATE TABLE sales(sales_date DATE, ・・・)

PARTITION BY RANGE(sales_date)

INTERVAL(NUMTOYMINTERVAL(1, ‘MONTH’)) STORE IN (TS1, TS2, TS3)

(PARTITION p201101 VALUES LESS THAN(TO_DATE('2011/04/01','YYYY/MM/DD')));

通常のレンジ・パーティションにINTERVAL句を追加。キーには、

NUMBER型、DATE型のみ指定可能

※11g新機能

ALTER TABLE テーブル名 SET INTERVAL(インターバル期間);

2011年12月

33

2011年1月

Page 34: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

Demonstration

インターバルパーティションを利用した パーティションの自動管理

34

Page 35: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• パーティションにデータを均等に配分する 内部的に生成されるハッシュ値を使って、データを分割する

ハッシュ・パーティション

ハッシュ値1

ハッシュ値2

ハッシュ値3

ハッシュ値4

商品表

35

• ハッシュ値を基にパーティション・プルーニングの利用が可能

• パーティションキー列はなるべく一意の列を含めるようにする

SELECT * FROM products WHERE product_id =10;

ハッシュ関数 3 (ハッシュ値)

Page 36: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

ハッシュ・パーティション

• ハッシュ・パーティションのメリット

レンジ、リストパーティション Partitio

n S

ize

データ量に差があるため、 各パーティションサイズが均等ではない

ハッシュパーティション

Partitio

n S

ize

各パーティションサイズがほぼ均等になる

パラレル プロセス

パラレル プロセス

パラレル プロセス

パラレル プロセス

パラレルDMLなどのパフォーマンスを

最適化

P1 P2 P3 P4

P1 P2 P3 P4

36

Page 37: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

コンポジット・パーティションの種類

• 単一レベル・パーティションを組み合わせて使う

• 11gではコンポジットパーティション(組み合わせ)の 選択肢が拡張

サブ

レンジ リスト ハッシュ

メイン

レンジ 11g 9i 8i

リスト 11g 11g 11g

37

Page 38: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• レンジ・パーティションをさらにハッシュ・パーティションに分割 例えば、売上表を「期間」(レンジ)に分割後、データ量を均等に分割する

ハッシュ値①

ハッシュ値②

ハッシュ値③

ハッシュ値④

2011年 1月 パーティション

2011年 2月 パーティション

2011年 3月 パーティション

2011年 4月 パーティション

レンジ・パーティション

ハッシュ・サブパーティション

毎日、OLTPで大量の更新処理が行われる

レンジ-ハッシュ・コンポジット・パーティション

38

Page 39: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• レンジパーティション 日付でデータを管理したい

特定の連続するデータ(売上日、商品ID etc)の範囲によって分割

• インターバルパーティション パーティションの管理を簡素化したい

自動でパーティション表を追加

• ハッシュパーティション パーティション表を使ってバッチ処理を高速化させたい

一意となるデータ(社員ID、商品ID etc)でデータを分散させて分割

• コンポジットパーティション 日付でデータを管理しつつ、データを均等に分散させたい

パーティションを組み合わせてより細かい単位で表を分割

まとめ:パーティションの種類

39

Page 40: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

40

Page 41: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション・アドバイザ

• SQLアドバイザ機能の一部

• ワークロード(システムで実行されるSQL文)を解析し、 適切なパーティション構成を推奨する機能

性能向上のための、パーティション構成がアドバイスされる

※1 Oracle Database11g 新機能

※2 Diagnostics Option、Tuning Optionが必要

SQL アクセス・アドバイザが アクセスパターンや

列の使用を分析

41

Page 42: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

空のパーティション表 ”仮売上表”

• INSERT ... SELECTによる移行 空のパーティション表を作り、非パーティション表からデータを

INSERT … SELECTによって挿入し、その後RENAMEする

既存の表からパーティション表への移行

非パーティション表 ”売上表” × 非パーティション表

”売上表”

②DROP

空のパーティション表 ”仮売上表”

パーティション表 “売上表”

③RENAME

• 表の再定義による移行 表の可用性に影響を与えずに表の構造を変更できる機能

再定義中も、問合せおよびDMLを使用してその表にアクセス可能

非パーティション表 ”売上表”

パーティション表 ”仮売上表”

①INSERT

①再定義

42

Page 43: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション表の更新

• パーティションキーの値を変更する場合は 行移動を有効化にする必要がある

SQL>UPDATE customers_partition SET id=11WHERE prod_id=1;

行1でエラーが発生しました。:

ORA-14402: パーティション・キー列を更新するとパーティションが変更されます。

SQL>ALTER TABLE sales_partition ENABLE ROW MOVEMENT;

ID Name

1 SCOTT

5 ALEX

ID Name

11 SCOTT

12 SUM

Partition_1 Partition_2

43

顧客表

Page 44: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション表に行えるメンテナンス作業 • 通常の表と同様、パーティション表に対しても

メンテナンス作業を行う事が可能 パーティションの追加

ADD PARTITION

パーティションの削除

DROP PARTITION

パーティションの分割

SPLIT PARTITION

パーティションのマージ

MERGE PARTITIONS

パーティションの結合

COALESCE PARTITION

パーティションの移動

MOVE PARTITION

パーティションの交換

EXCHANGE PARTITION

ADD PARTITION

DROP PARTITION

Q1 Q1

Q2

Q3

Q4

44

Page 45: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

2012年Q1 パーティション

売上表

• データの入れ替えを行うローリング・ウィンドウ操作を高速化

• 非パーティション表とパーティション表間で交換が可能

パーティションの交換 2010年Q1 テーブル

ALTER TABLE “売上表” EXCHANGE PARTITION 2010_Q1 WITH TABLE 2011_Q1;

2011年Q2 パーティション

2011年Q3 パーティション

2011年Q4 パーティション

パーティションの交換

非パーティション表

個別に バックアップ

45

Page 46: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved. 46

参考:メンテナンス対応表一覧

※「Oracle Database VLDBおよびパーティショニング・ガイド 11gリリース2(11.2)」 http://download.oracle.com/docs/cd/E16338_01/server.112/b56316/part_admin002.htm#i1006820

メンテナンス操作 レンジ インターバル ハッシュ リスト 参照

パーティション追加 ○ ○ ○ ○ ×

パーティション削除 ○ ○ × ○ ×

パーティション移動 ○ ○ ○ ○ ○

パーティション切捨て ○ ○ ○ ○ ○

パーティションマージ ○ ○ × ○ ×

パーティション結合 × × ○ × ×

パーティション分割 ○ ○ × ○ ×

パーティション交換 ○ ○ ○ ○ ○

• パーティションの種類によって、実行可能なメンテナンス操作が異なります

Page 47: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

47

Page 48: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション単位での結合処理 パーティション・ワイズ・ジョイン

• パーティション表同士をパーティション化キーによって、 パーティション単位で結合処理を行うことができる

• パラレルで結合を実行する場合にジョイン作業の回数が少なくなり、レスポンス時間・結合に必要なメモリー量を減少

48

読み込み& 結合処理

読み込み& 結合処理

読み込み& 結合処理

読み込み& 結合処理

顧客表 売上表

パラレル プロセス

パラレル プロセス

パラレル プロセス

パラレル プロセス

クエリー・ コーディネータ

Page 49: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

Demonstration

パーティション・ワイズ・ジョインの効果

49

Page 50: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• 大規模テーブル運用の課題

• パーティションとは

• パーティションのメリット

• パーティションの種類

• パーティションの運用管理

• その他パーティション機能 パーティション結合

索引パーティション

• Appendix

Agenda

※ 資料中に掲載されている検証内容は、特定の環境における検証結果についての報告であり、 すべての環境において同様の動作を保証するものではありませんので予めご了承下さい。

50

Page 51: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション索引

• 表と同様に索引もパーティション化が可能 パーティション表に対し、通常の索引も作成可能

通常の表に対し、パーティション索引も作成可能

• 2種類のパーティション索引 ローカル索引

グローバル索引

索引 パーティション索引

51

Page 52: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

ローカル索引

• 表パーティションと同一のキーでパーティション化する索引

• 2種類のローカル索引 ローカル同一キー索引

ローカル非同一キー索引

• 基礎となるパーティション表に変更があった場合、 索引パーティションも自動でメンテナンスが行われる

52

”注文番号” 1~99

”注文番号” 100~199

”注文番号” 200~299

”注文番号” 300~399

1.追加

2.自動作成

Page 53: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

ローカル同一キー索引

索引

売上表

CREATE INDEX 索引名 ON パーティション表名(列名) LOCAL;

• 表パーティションと同一のキーでパーティション化する索引 索引のキー列も表パーティションのキー列と同一である索引

• ローカル索引の作成には各索引パーティションの定義なしに作成が可能

”注文番号” 1~99

”注文番号” 100~199

”注文番号” 200~299

”注文番号” 300~399

”注文番号” 1~99

”注文番号” 100~199

”注文番号” 200~299

”注文番号” 300~399

パーティション・プルーニングが 機能するにはパーティション化キーを条件に指定する必要がある

特定の索引パーティションのみにアクセス

注文番号10の データがみたい

53

Page 54: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

ローカル非同一キー索引

索引

売上表

”注文番号” 1~99

”注文番号” 100~199

”注文番号” 200~299

”注文番号” 300~399

”顧客ID” 7 ”顧客ID” 12

・・・

”顧客ID” 21 ”顧客ID” 97

・・・

”顧客ID” 2 ”顧客ID” 81

・・・

”顧客ID” 1

”顧客ID” 21

・・・

注文番号が1~99の間で かつ顧客ID21のデータを見たい

特定の索引パーティションのみにアクセス

• 表パーティションと同一のキーでパーティション化する索引 索引のキー列が表パーティションのキー列と同一でない索引

54

CREATE INDEX 索引名 ON パーティション表名(列名) LOCAL;

パーティション・プルーニングが 機能するにはパーティション化キーを条件に指定する必要がある

Page 55: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

グローバル・パーティション索引

• 表パーティションとは別のキーでパーティション化する索引

• 基礎となるパーティション表に変更があった場合、 手動で索引パーティションのメンテナンスが必要になる

• パーティション化された表に関係なく、 自由に索引のパーティション化が可能

CREATE INDEX 索引名 ON 表名(列名) GLOBAL PARTITION BY …

索引

売上表

”注文番号” 1~99

”注文番号” 100~199

”注文番号” 200~299

”注文番号” 300~399

特定の索引パーティションにアクセスするが、複数のパーティション表にアクセス

顧客ID21のデータを見たい

”顧客ID” 100~199

”顧客ID” 200~299

”顧客ID” 300~399

”顧客ID” 1~99

55

Page 56: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

索引パーティションのメンテナンス

• 特定の操作(パーティションの結合、削除等)を パーティション表に対して行うと、対応する索引が使用できなくなる(INDEX UNUSABLE) ローカル索引の場合は対応するパーティション索引が使用不可に

グローバル索引の場合は全てのパーティション索引が使用不可に

56

売上表

【ローカル索引】

パーティション の交換

売上表

【グローバル索引】

パーティション の交換

※索引パーティションがUNUSABLEかどうかの確認はUSER_IND_PARTITIONSビューのStatus列を確認します

Page 57: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

索引パーティションのメンテナンス

• 使用不可となった索引は再構築する必要がある

57

ALTER TABLE sales MODIFY PARTITION p_1 REBUILD UNUSABLE LOCAL INDEXES;

• 表定義を変更する際に同時に索引も再構築するにはUPDATE INDEXES句を利用

ALTER TABLE hr.index_test MERGE PARTITIONS p_2,p_3 INTO partition p_3 UPDATE INDEXES;

• 索引が使用不可の状態でその索引を利用するアクセスを行った 場合はエラーが発生

SELECT /*+ index(sales id_index) */ * FROM sales WHERE id=1;

行1でエラーが発生しました。:

ORA-01502: 索引'HR.ID_INDEX'またはそのパーティションが使用不可の状態です。

Page 58: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

大規模テーブルの管理作業をパーティションの導入で

容易にすることが可能です

まとめ

58

Page 59: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

Appendix

59

Page 60: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション情報の確認

• 表のパーティション・タイプの確認 SELECT table_name,partitioning_type,partition_count FROM user_part_tables;

TABLE_NAME PARTITIONING_TYPE PARTITION_COUNT

----------------------------------------- ---------------------------------- ---------------

SALES_PARTITION_MONTH RANGE 10

• 各パーティション表定義の確認 select table_name,partition_name,high_value from user_tab_partitions;

TABLE_NAME PARTITION_NAME HIGH_VALUE

----------------------------------------- ---------------------------------- ---------------

SALES_PARTITION_MONTH p_1 10

SALES_PARTITION_MONTH p_2 20

• パーティション表に対しての問い合わせ

SELECT * FROM sales_partition_month PARTITION(p_1);

60

Page 61: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

リストパーティションの作成

• 特定のデータ(製品名、店舗名 etc)のカテゴリーによって 表を分割 VALUESキーワードで値とパーティションの対応を決定

CREATE TABLE sales

(product_id number(4) not null, location varchar2(60), customer_id varchar2(40))

PARTITION BY LIST(location)

(PARTITION Sales_p_kanto VALUES (‘“東京”’,‘“神奈川”') TABLESPACE KANTO,

PARTITION Sales_p_kinki VALUES (‘“大阪”’,‘“京都”') TABLESPACE KINKI,

PARTITION Sales_p_kyushu VALUES (‘“福岡”’,‘“長崎”') TABLESPACE KYUSHU,

PARTITION Sales_p_tohoku VALUES (‘“宮城”’,‘“青森”') TABLESPACE TOHOKU);

VALUES キーワードを

使用 パーティション化するキー列を指定

東京 神奈川

大阪 京都

福岡 長崎

関東

近畿

九州

VALUES (‘“東京”’,’“神奈川”’)

VALUES (‘“大阪”’,’“京都”’)

VALUES (‘“福岡”’,’“長崎”’)

宮城 青森 東北 VALUES (‘“宮城”’,’“青森”’)

売上表

61

Page 62: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

リスト・パーティション表の注意点

‘沖縄’支店のデータを挿入

• 指定された値以外のデータの挿入はエラー

•Defaultキーワードを利用してパーティション表を作成

東京 神奈川

大阪 京都

福岡 長崎

関東

近畿

九州

VALUES (‘“東京”’,’“神奈川”’)

VALUES (‘“大阪”’,’“京都”’)

VALUES (‘“福岡”’,’“長崎”’)

宮城 青森 東北 VALUES (‘“宮城”’,’“青森”’)

売上表

Default VALUES (DEFAULT) Default

ALTER TABLE sales ADD PARTITION default VALUES (DEFAULT);

62

Page 63: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• パーティションにデータを均等に配分する 内部的に生成されるハッシュ値を使って、データを分割する

ハッシュ・パーティション

※ハッシュアルゴリズムの関係で、なるべく均等に配分するためには、パーティションの数は2の累乗に設定します

CREATE TABLE products

(product_id number(5) not null,

location varchar2(60),

customer_id number(38))

PARTITION BY HASH (product_id)

PARTITIONS 4

STORE IN (Users1, Users2 , Users3 , Users4);

なるべく一意な列にする必要がある

パーティションの数を指定

ハッシュ値1

ハッシュ値2

ハッシュ値3

ハッシュ値4

商品表 25万件

25万件

25万件

25万件

63

Page 64: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

リファレンス・パーティション

• 親子関係を利用したパーティショニング手法 親表を参照する子表の外部キーを利用

例) 親子関係の表 OrdersとOrderItemsにおける リファレンス・パーティション 親表:order_dateをキーにしてパーティション化

子表:orderitems_fkをキーにしてパーティション化

表名 列名

Orders order_id

order_date

customer_id

表名 列名

OrderItems order_id

line_item_id

product_id

quantity

子表にはorder_date列 が存在しない

親:Orders

参照整合性制約名

orderitems_fk

子:OrderItems

64

Page 65: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

リファレンス・パーティション 子表の作成

CREATE TABLE orderitems(

order_id NUMBER(12) NOT NULL,

line_item_id NUMBER(3) NOT NULL,

product_id NUMBER(6) NOT NULL,

quantity NUMBER(8),

CONSTRAINT orderitems_fk

FOREIGN KEY (order_id) REFERENCES orders(order_id)

) PARTITION BY REFERENCE (orderitems_fk) ;

1

2

2

3

1

3

外部キーを設定するカラムに、NOT NULL制約を設定する

親表の主キー又は一意キーを参照する外部キーを作成する

PARTITION BY REFERENCE句に、その外部キーを指定する

65

Page 66: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

バーチャルカラム・パーティション

• 実データは持たず、他のカラムから関数によって定義される 仮想的な列 例) acc_no(アカウント番号)の上2桁をacc_branch(支店番号)として

用いる場合

CREATE TABLE accounts (acc_no number(10) not null,

acc_name varchar2(50) not null,

acc_branch number(2) GENERATED ALWAYS AS

(to_number(SUBSTR(to_char(acc_no),1,2))) VIRTUAL );

補足:GENERATED ALWAYS 及びVIRTUAL句は構文を明確にするためにつける語句であり、省略可能

acc_no acc_name acc_branch

12500 Adams 12

12507 Blake 12

12666 King 12

13666 Smith 13

66

Page 67: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

• バーチャルカラムをパーティション・キーとした パーティショニング手法 実カラムを追加することなく、

目的のパーティションを作成することが可能

CREATE TABLE accounts ( acc_no number(10) not null, acc_name varchar2(50) not null, ... acc_branch number(2) GENERATED ALWAYS AS ( to_number(SUBSTR(to_char(acc_no),1,2)) VIRTUAL ) PARTITION BY LIST (acc_branch) ( ・・・ PARTITION brunch_p12 VALUES (12), ・・・ PARTITION others VALUES (default) );

67

バーチャルカラム・パーティション

Page 68: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

全支店横断的に検索

毎日支店ごとに データローディング

コンポジット・パーティション レンジ-リスト・コンポジット・パーティション

• レンジ・パーティションをさらにリスト・パーティションに分割 例えば、売上表を「期間」(レンジ)と「地域」(リスト)で分割する

A支店 B支店 C支店 D支店

2008年 6月1日 (”売上日”)

2008年 6月2日 (”売上日”)

2008年 6月3日 (”売上日”)

2008年 6月4日 (”売上日”)

レンジ・パーティション

リスト・サブパーティション

支店ごとの売上 データの集計

68

Page 69: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

CREATE TABLE “売上表” (

”売上日” DATE, “地域” VARCHAR2(20), “売上” NUMBER)

PARTITION BY RANGE (”売上日”)

SUBPARTITION BY LIST (“地域”)

(PARTITION P2009Q1

VALUES LESS THAN(to_date('2009-04-01','YYYY-MM-DD'))

(SUBPARTITION P2009Q1_kanto VALUES (‘kanagawa','Tokyo'),

SUBPARTITION P2009Q1_kansai VALUES ('Osaka',‘kyoto')),

PARTITION P2009Q2

VALUES LESS THAN(to_date('2009-07-01','YYYY-MM-DD'))

(SUBPARTITION P2009Q2_kanto VALUES (‘kanagawa','Tokyo'),

SUBPARTITION P2009Q2_kansai VALUES ('Osaka',‘kyoto')));

コンポジット・パーティション レンジ-リスト・コンポジット・パーティション作成例

レンジ・パーティション

リスト・パーティション

69

Page 70: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションの追加

• 既存のパーティション表に新しくパーティションの追加が可能

【レンジ・パーティションの場合】 ALTER TABLE ”売上表” ADD PARTITION P200805 VALUES LESS

THAN (TO_DATE('2009/4/01','YYYY/MM/DD')) TABLESPACE Users1;

MAXVALUE句を使用すると、パーティションの追加が

できない

売上表

MAXVALUE

2008年10~12月

2008年7~9月

2008年4~6月

2008年1~3月

2009年1~3月

追加パーティション

VALUE句で指定した範囲の一番最後にしか追加できない

2008年6~8月

追加パーティション

70

Page 71: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションの削除

• パーティション表内のデータも削除

• ハッシュ・パーティション以外のパーティションで実行可能

ハッシュ・パーティションの場合は結合操作を実行

ALTER TABLE ”売上表” DROP PARTITION p_2;

削除したパーティションは フラッシュ・バックで再現不可

売上表

2008年7~9月

2008年4~6月

2008年1~3月

2008年7~9月

削除パーティション

2008年10~12月

リサイクルビン

売上表

2008年4~6月

2008年1~3月

2008年7~12月

削除後

71

Page 72: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティションの結合(マージ) • データを残しパーティション表のみを削除する場合は結合操作を実行

• ハッシュ・パーティション表の場合:

• それ以外の場合:

ALTER TABLE “売上表” COALESCE PARTITION;

ALTER TABLE “売上表” MERGE PARTITIONS P1, P2 INTO PARTITION P2 TABLESPACE USERS;

売上表

2008年7~9月

2008年4~6月

2008年1~3月

2008年 10~12月

売上表

2008年4~6月

2008年1~3月

2008年 7~12月

72

Page 73: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

パーティション・ワイズ・ジョイン

• フル・パーティション・ワイズ結合 両方の表を結合キーで同一レベルでパーティション化

• パーシャル・パーティション・ワイズ結合 片方の表のみが結合キーをパーティション・キーとして

パーティション化されている場合に実行される結合

読み込み& 結合処理

顧客表 レンジ (customer_id)

読み込み& 結合処理

読み込み& 結合処理

読み込み& 結合処理

売上表 レンジ (customer_id)

読み込み& 結合処理

顧客表 レンジ (customer_id)

読み込み& 結合処理

読み込み& 結合処理

読み込み& 結合処理

売上表

【フル・パーティション・ワイズ結合】 【パーシャル・パーティション・ワイズ結合】

73

Page 74: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved. 74

http://blogs.oracle.com/oracle4engineer/entry/otn_ondemand_questionnaire

OTNオンデマンド 感想

OTNセミナーオンデマンド

コンテンツに対する ご意見・ご感想を是非お寄せください。

上記に簡単なアンケート入力フォームをご用意しております。

セミナー講師/資料作成者にフィードバックし、 コンテンツのより一層の改善に役立てさせていただきます。

是非ご協力をよろしくお願いいたします。

Page 75: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

OTNセミナーオンデマンド 日本オラクルのエンジニアが作成したセミナー資料・動画ダウンロードサイト

掲載コンテンツカテゴリ(一部抜粋)

Database 基礎

Database 現場テクニック

Database スペシャリストが語る

Java

WebLogic Server/アプリケーション・グリッド

EPM/BI 技術情報

サーバー

ストレージ

例えばこんな使い方

• 製品概要を効率的につかむ

• 基礎を体系的に学ぶ/学ばせる

• 時間や場所を選ばず(オンデマンド)に受講

• スマートフォンで通勤中にも受講可能

100以上のコンテンツをログイン不要でダウンロードし放題

データベースからハードウェアまで充実のラインナップ

毎月、旬なトピックの新作コンテンツが続々登場

75

OTNオンデマンド

コンテンツ一覧 はこちら http://www.oracle.com/technetwork/jp/ondemand/index.html

新作&おすすめコンテンツ情報 はこちら http://oracletech.jp/seminar/recommended/000073.html 毎月チェック!

Page 76: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

オラクルエンジニア通信 オラクル製品に関わるエンジニアの方のための技術情報サイト

76

オラクルエンジニア通信

技術コラム

アクセス ランキング

特集テーマ Pick UP

技術資料

性能管理やチューニングなど月間テーマを掘り下げて詳細にご説明

インストールガイド・設定チュートリアルetc. 欲しい資料への最短ルート

他のエンジニアは何を見ているのか?人気資料のランキングは毎月更新

SQLスクリプト、索引メンテナンスetc. 当たり前の運用/機能が見違える!?

http://blogs.oracle.com/oracle4engineer/

Page 77: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

oracletech.jp ITエンジニアの皆様に向けて旬な情報を楽しくお届け

77

oracletech

Viva! Developer

セミナー

スキルアップ

製品/技術 情報

ORACLE MASTER! 試験頻出分野の模擬問題と解説を好評連載中

Oracle Databaseっていくら?オプション機能も見積れる簡単ツールが大活躍

基礎から最新技術まで お勧めセミナーで自分にあった学習方法が見つかる

全国で活躍しているエンジニアにスポットライト。きらりと輝くスキルと視点を盗もう

http://oracletech.jp/

Page 78: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved. 78

あなたにいちばん近いオラクル

Oracle Direct まずはお問合せください

Web問い合わせフォーム フリーダイヤル

0120-155-096

※月曜~金曜 9:00~12:00、13:00~18:00 (祝日および年末年始除く)

専用お問い合わせフォームにてご相談内容を承ります。 http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

※フォームの入力にはログインが必要となります。 ※こちらから詳細確認のお電話を差し上げる場合がありますので

ご登録の連絡先が最新のものになっているかご確認下さい。

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。 ステム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Oracle Direct

Page 79: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved.

Page 80: 実践!パーティションの基本から実装例まで - Oracle...実践!パーティションの基本から実装例まで 日本オラクル株式会社 オラクルダイレクト

Copyright© 2011, Oracle. All rights reserved. 80