1

ここに画像の説明を入力

テーブル全体のスキャンを強制せずに LET_TESTATE_LETTURE で並列実行を使用したいのですが、インデックスで強制的に並列処理を使用したいと考えています。

どうすれば解決できますか?

alter session enable parallel dml;  

CREATE TABLE netatemp.let_testate_letture1
AS
   SELECT /* parallel(tele 32) full(tele) */
         tele.TELE_DATA_LETTURA,
         tele.tele_storico_id
     FROM let_testate_letture tele
    WHERE     tele.prov_provenienza_lettura_id = '*1ENI01BCAMBIO'
          AND tele.spwkf_stato_pubblico_id != '*1UNICOANN';


Size    56,1 GB
Number Extents  1.081

OWNER   SIUMETERING
TABLE_NAME  LET_TESTATE_LETTURE
TABLESPACE_NAME SIUMETERING_DATITD
CLUSTER_NAME    
IOT_NAME    
STATUS  VALID
PCT_FREE    10
PCT_USED    
INI_TRANS   30
MAX_TRANS   255
INITIAL_EXTENT  80 KB
NEXT_EXTENT 1 MB
MIN_EXTENTS 1
MAX_EXTENTS 2.147.483.645
PCT_INCREASE    
FREELISTS   
FREELIST_GROUPS 
LOGGING YES
BACKED_UP   N
NUM_ROWS    456.635.338
BLOCKS  3.340.120
EMPTY_BLOCKS    0
AVG_SPACE   0
CHAIN_CNT   0
AVG_ROW_LEN 385
AVG_SPACE_FREELIST_BLOCKS   0
NUM_FREELIST_BLOCKS 0
DEGREE  1
INSTANCES   1
CACHE   N
TABLE_LOCK  ENABLED
SAMPLE_SIZE 456.635.338
LAST_ANALYZED   29/12/2012 13:03:15
PARTITIONED NO
IOT_TYPE    
TEMPORARY   N
SECONDARY   N
NESTED  NO
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE    DEFAULT
ROW_MOVEMENT    DISABLED
GLOBAL_STATS    YES
USER_STATS  NO
DURATION    
SKIP_CORRUPT    DISABLED
MONITORING  YES
CLUSTER_OWNER   
DEPENDENCIES    DISABLED
COMPRESSION ENABLED
COMPRESS_FOR    OLTP
DROPPED NO
READ_ONLY   NO
SEGMENT_CREATED YES
RESULT_CACHE    DEFAULT
4

3 に答える 3

2

試す

/*+ parallel_index(tele, let_tele_letb_prov_fk_idx, 32) */

アスタリスクの後の「+」に注目してください。これがないと、Oracle はヒントを無視します。

また、次のように、返される行数に応じて、テーブルを並行して作成することもできます。

CREATE TABLE netatemp.let_testate_letture1 parallel 32 as
select /*+ ...
于 2013-03-22T21:49:32.990 に答える
2

インデックスをパラレルに変更する必要があります。すなわち

alter index xxx parallel;

また

alter index xxx parallel <n>;

並列ヒントはテーブルにのみ適用されるためです。

于 2013-03-22T14:26:03.900 に答える
1

有益な情報をたくさん掲載していただき、とても新鮮です。したがって、あなたの質問に答えることに加えて、パフォーマンスを改善するための他のアドバイスを提供できます。

  1. ステートメント レベルのヒント。
    11gR2 を使用しているため (列の存在に基づく)、オブジェクト レベルではなくステートメント レベルの並列ヒントSEGMENT_CREATEDを使用する必要が あります。を使用すると、Oracle はアクセス方法や別名に関係なく、クエリ内のすべてを並列化します。/*+ parallel(32) */
  2. 古い統計または古いデータ?
    Last Analyzed on 2012-12-29 はちょっと古いようです。テーブルが非常にアクティブな場合は、統計を再収集する必要があります。あまり頻繁に変更されない場合は、 の順序で再作成することを検討してくださいprov_provenienza_lettura_id。これにより、インデックスのパフォーマンスが大幅に向上する可能性があります。ただし、他のインデックスのパフォーマンスが低下する可能性があります。
  3. 圧縮。
    テーブルは圧縮を使用していますが、インデックスも圧縮されていますか? 同じ値に対して実際に 900 万のエントリがある場合、インデックスの圧縮によって大量のスペースが節約され、インデックスの読み取りが大幅に高速化されます。また、ここではビットマップ インデックスが適している場合があります。
  4. 全表スキャン。
    オプティマイザは、行の約 2% を読み取ると考えています。クラスタリング係数などによっては、2% であっても、完全なテーブル スキャンを保証するのに十分な場合があります。特定のアクセス方法を強制しようとしない場合があります。まず、Oracle に選択を試みさせます。オラクルが間違っている場合は、より良い統計やヒストグラムなど、より有用な情報を提供して助けてください。

DazzaL と Ronnis からのアドバイスも参考になるはずです。

于 2013-03-23T04:35:50.457 に答える