に適用されます:
Oracleデータベース-エンタープライズ・エディション-バージョン10.2.0.3以降
のOracle Databaseのクラウドスキーマサービス-バージョンN / A以降
のOracle DatabaseのExadataエクスプレスクラウドサービス-バージョンN / A以降
のOracle DatabaseのExadataクラウドマシン-バージョンN / A以降
のOracleクラウドインフラストラクチャ-データベース・サービス-バージョンN / A以降
このドキュメントの情報は、任意のプラットフォームに適用されます。
ゴール
記事:[ID 378138.1]の状態 : 記事:[ID 378138.1]は指摘しました:
ドキュメントによると: 文書によると、
「高速スプリット・パーティショニングは、すべての行で分割されたパーティションの結果は、単一のパーティションに移動されているような状況を利用しています。すべての行が単一のパーティションにマップする場合、セグメントは、古いパーティションの属性とセグメントはパーティションの属性場合すべての行が一致継承し、データベースは単に古いセグメントを再利用し、他のパーティションの空のセグメントを追加します。これのもう一つの利点は、グローバル索引が無効である必要はありませんと、特定の場合には、ローカル索引パーティションは、対応するということです新しいパーティションにも使用可能です。」
「クイックスプリットパーティション次のような状況を使用して:スプリットのパーティションはすべての行を単一のパーティションにマップされている場合は、すべての行は、単一のパーティションを移動させ、古いパーティション・セグメントを継承し、すべての一致する行の内容のパーティションのセグメント属性を属性データベース単に古いセクションを再利用して別の空のセグメントにパーティションを追加します、そうすることのもう一つの利点は、グローバル索引が無効であり、いくつかのケースでは、新しいパーティションに対応するローカル索引パーティションを使用することも可能にする必要はありません。」
このように、新しいパーティションを持っている必要があり 、元のパーティションと同じストレージ構成を。 したがって、新しいパーティションが、元のストレージ構成と同じパーティションを持つ必要があります。
この最後の文は、その理由となっている 以下の加工した例。 この最後の文は、以下の例を作業の原因です。
解決
これは、10.2.0.5および11.2でテストされています 。 それは、10.2.0.5および11.2でテストされています。
SQLPLUSへのログオン
接続rk_mview / PWD
上で動作するようにパーティションテーブルを作成します。 パーティションテーブルに対処するために作成されました
TABLEテストをドロップします。 CREATE TABLEテスト (GPS_GUID RAW(16)DEFAULT(SYS_GUID())ENABLE nullでない、 DVC_ID NUMBER(12,0)ENABLE nullでない、 USR_ID NUMBER(12,0)ENABLE nullでない、 ENTRY_UTC TIMESTAMP(6)DEFAULT(SYS_EXTRACT_UTC( SYSTIMESTAMP))、ENABLE NULLでない COVERAGE_STAT_ID NUMBER(12,0)ENABLE NULLでない、 SPEEDフロート(126)DEFAULT(0)、 DIRECTION FLOAT(126)DEFAULT(0)、 ESTIMATED_ACCURACY NUMBER(12,0)、 UPDATE_UTC TIMESTAMP(6 ENABLE nullでない)DEFAULT(SYS_EXTRACT_UTC(SYSTIMESTAMP))、 LATITUDEフロート(126)、 経度FLOAT(126)、 TS_GUID RAW(16)、 CLUSTER_ID VARCHAR2(50)、 GEOCODE_UTC TIMESTAMP(6)、 STREET NVARCHAR2(100)、 SUITE VARCHAR2(50)、 CITY NVARCHAR2 (100)、 STATE_PROVINCE NVARCHAR2(100)、 POSTAL_CODE NVARCHAR2(20)、 COUNTRY NVARCHAR2(100)、 CONSTRAINT PK_GPS PRIMARY KEY(GPS_GUID) USING INDEXのPCTFREE 5つのINITRANS 10 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOLデフォルト) 表領域ユーザーENABLE )PCTFREE 30 PCTUSED 0 INITRANS 10 MAXTRANS 255 STORAGE(BUFFER_POOLデフォルト) 表領域ユーザー RANGE(ENTRY_UTC BY PARTITION) (PARTITION GPS_DATA_2010_08_08未満(TIMESTAMP'2010-08-08値夜12時00'分00秒) PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255 STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1つのBUFFER_POOLデフォルト) 表領域ユーザーNOCOMPRESS、 PARTITION GPS_DATA_2010_08_15未満(TIMESTAMP'2010-08-15 00:00:00' )値 PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255 STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOLデフォルト) 表領域ユーザーNOCOMPRESS、 PARTITION GPS_DATA_MAX未満(MAXVALUE)値 PCTFREE 5 PCTUSED 0 INITRANS 10 MAXTRANS 255 STORAGE(INITIAL 1M NEXT 1048576のMINEXTENTSを1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1つのFREELISTグループ1つのBUFFER_POOLのDEFAULT) TABLESPACEユーザーNOCOMPRESS)ROW MOVEMENTをENABLE; 試験値への挿入( '2'、2,2、TIMESTAMP'2010-11-14 00:00:00' 、1,1,1,1、TIMESTAMP'2010-11-14 00:00:00' 、1 、1、 '1'、 '1'、TIMESTAMP'2010-11-14 00:00:00' 、 '1'、 '1'、 '1'、 '1'、 '1'、 '1')。 コミット; BEGIN DBMS_STATS.GATHER_TABLE_STATS( 'スキーマ名'、 'テスト' て、partnameを=> 'GPS_DATA_MAX'、 粒度=> 'PARTITION'、 ESTIMATE_PERCENT => 3、 DEGREE => 2)。 終わり; /
上記の状況では、挿入された行が欠落によりパーティションに、MAXのパーティションに追加されていることがわかります。そこで私たちは、このMAXパーティションの直前のパーティションを追加する必要がありますMAXパーティションの使用を避けるために、さらにパーティションを提供します。私たちは、SPLIT PARTITIONの構文を使用することができますし、すべてのデータが一つだけのパーティションで終わる場合、これは実際にFAST SPLITを実行します。
このような状況では、我々は、パーティションの欠如を見ることができ、挿入行がMAXのパーティションに追加されました。したがって、MAXパーティションの使用を避けるために、複数のパーティションを提供するために、我々はすぐにこのパーティションMAXの前にパーティションを追加する必要があります。私たちは、SPLIT PARTITIONの構文を使用し、可能なすべてのデータが最終的に実際にFASTのSPLITを実行する唯一のパーティションを、配置されている場合。
統計でMAXパーティションにNUM_ROWSでレビューを収集しての最適化にFAST SPLITを確認しに発生します。 - MAXパーティションの収集統計情報NUM_ROWSを参照し、FAST SPLITの最適化を確実にするために。 BEGIN DBMS_STATS.GATHER_TABLE_STATS( 'スキーマ名'、 'テスト' て、partname => 'GPS_DATA_MAX'、 粒状&=> 'PARTITION'、 ESTIMATE_PERCENT => 3、。 度=> 2); END; /
選択クエリは分割が発生したことを検証するために利用: -选择用于验证拆分的查询: PARTITION_NAME = 'GPS_DATA_MAX' DBA_EXTENTSからFILE_ID、EXTENT_ID、BLOCK_IDを選択します。 TABLE_NAME、PARTITION_NAME、table_nameは'TEST'を= DBA_TAB_PARTITIONSからNUM_ROWSを選択します。
さて、実際の分割を実行するには: 今、実際の分割を実行します
。..通常、この注2ウィルにより、データパーティションおよびFAST SPLIT Aの追加パーティションとのデータのAに残すことで、この新しい新しいのパーティション境界でONに基づいて、それぞれに[移動を作成しますパーティションのデータフィット。注意してください。一般的に、これはその後、各パーティションにデータを移動するに基づいてパーティション境界を2つのパーティションを作成します。FAST SPLITの場合、これは新しいパーティションを追加し、データがパーティションのデータに保持しました。
ALTER TABLEテストSPLITのPARTITION GPS_DATA_MAX AT((TIMESTAMP'2010-11-28 00:00:00 +0:00' )) INTO(パーティションGPS_DATA_2010_11_28 ロギング NOCOMPRESS 表領域ユーザー PCTFREE 5 INITRANS 10 MAXTRANS 255 STORAGE( INITIAL 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED BUFFER_POOLのDEFAULT )、 PARTITION GPS_DATA_MAX)。
証明分割が発生しました: SPLI証拠を発生します。
之前拆分: - :スプリットBEFORE ; SEGMENT_NAME = 'テスト' DBA_EXTENTSからFILE_ID、EXTENT_ID、BLOCK_ID、PARTITION_NAMEを選択 FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME ---------- ---------- ---------- ---------------- -------------- 4 0 27657 GPS_DATA_2010_08_08 4 0 27785 GPS_DATA_2010_08_15 4 0 27913 GPS_DATA_MAXは TABLE_NAMEを選択し、PARTITION_NAME、DBA_TAB_PARTITIONSからNUM_ROWSここTABLE_NAME = 'テスト'。 TABLE_NAME PARTITION_NAME NUM_ROWS ------------------------------ ----------------- ------------- ---------- GPS GPS_DATA_2010_08_08 GPS GPS_DATA_2010_08_15 GPS GPS_DATA_MAX 1 AFTERスプリット-拆分之后 FILE_ID、EXTENT_ID、BLOCK_ID、SEGMENT_NAME = 'テスト' DBA_EXTENTSからPARTITION_NAMEを選択します。 FILE_ID EXTENT_ID BLOCK_ID PARTITION_NAME ---------- ---------- ---------- ---------------- -------------- 4 0 27657 GPS_DATA_2010_08_08 4 0 27785 GPS_DATA_2010_08_15 4 0 27913 GPS_DATA_2010_11_28 4 0 26377 GPS_DATA_MAXは TABLE_NAMEを選択し、PARTITION_NAME、DBA_TAB_PARTITIONSからNUM_ROWSここTABLE_NAME = 'テスト'。 TABLE_NAME PARTITION_NAME NUM_ROWS ------------------------------ ----------------- ------------- ---------- GPS GPS_DATA_2010_08_08 GPS GPS_DATA_2010_08_15 GPS GPS_DATA_MAX 0 GPS GPS_DATA_2010_11_28 1
私たちは、上から見ることができるようにMAXパーティションは確かに新しいパーティションとなっており、新しいMAXが追加されたこと。だから、速いスプリットが発生しました。
私たちは、上から見ることができるように、MAXパーティションは確かに新しいパーティションになり、新しいMAXを追加しました。だから、速い分割が起こりました。
確認したFAST SPLIT構文は、 FAST SPLIT文法を確認しました
ALTER TABLEテストのSPLIT PARTITION GPS_DATA_MAX AT((TIMESTAMP'2010-11-20夜十二時00分00秒0:00' )) INTO(PARTITIONのGPS_DATA_2010_11_20の LOGGING NOCOMPRESSの TABLESPACEのユーザーが 5 PCTFREE 10 INITRANSを MAXTRANS 255 -これは、作品1つです。ストレージ句外部PCTFREE、INITRANSおよびMAXTRANS。 STORAGE (INITIAL 1M NEXT 1048576のMINEXTENTS 1つのMAXEXTENTS 2147483645 BUFFER_POOLデフォルト)、 PARTITION GPS_DATA_MAX)。