2016-09-01 11 views
1

私はvertica.logに次のエラーを参照してください。私はパーティショニングのために間違ったフィールドを選択し、hereが説明するようにWOS内のパーティションの限界に達したようERROR:あまりにも多くのデータパーティション

2016-09-01 15:30:54.007 TM Moveout:0x7f9438012440-a00000001212c3 [Txn] <INFO> Begin Txn: a00000001212c3 'Moveout: Tuple Mover' 
2016-09-01 15:30:54.007 TM Moveout:0x7f9438012440-a00000001212c3 [TM] <INFO> Tuple Mover: moving out projection rosing_epg_program_events_super 
2016-09-01 15:30:54.017 TM Moveout:0x7f9438012440-a00000001212c3 [EE] <INFO> (a00000001212c3) Moveout projection staging.rosing_epg_program_events_super 
2016-09-01 15:30:54.017 TM Moveout:0x7f9438012440-a00000001212c3 [EE] <INFO> (a00000001212c3) TM Moveout: moving out data in WOS for proj "staging.rosing_epg_program_events_super" to epoch 3061 
2016-09-01 15:30:54.017 TM Moveout:0x7f9438012440-a00000001212c3 [EE] <INFO> (a00000001212c3) Executing the moveout plan 
2016-09-01 15:30:54.040 TM Moveout:0x7f9438012440-a00000001212c3 [EE] <INFO> SortManager found maxMerges 7 too small(64 MB Assigned). 
2016-09-01 15:30:54.040 TM Moveout:0x7f9438012440-a00000001212c3 [EE] <INFO> After disabling optimization, maxMerges becomes 15. 
2016-09-01 15:30:54.069 TM Moveout:0x7f9438012440-a00000001212c3 [Txn] <INFO> Rollback Txn: a00000001212c3 'Moveout: (Table: staging.rosing_epg_program_events) (Projection: staging.rosing_epg_program_events_super)' 
2016-09-01 15:30:54.070 TM Moveout:0x7f9438012440 <LOG> @v_statistic_node0001: 00000/3298: Event Posted: Event Code:14 Event Id:261 Event Severity: Warning [4] PostedTimestamp: 2016-09-01 16:30:54.069887 ExpirationTimestamp: 2016-09-01 16:31:09.069887 EventCodeDescription: Timer Service Task Error ProblemDescription: threadShim: Too many data partitions DatabaseName: statistic Hostname: rosing-vertica.elt.stag.local 
2016-09-01 15:30:54.070 TM Moveout:0x7f9438012440 <ERROR> @v_statistic_node0001: {threadShim} 54000/5060: Too many data partitions 
     HINT: Verify that the table partitioning expression is correct 
     LOCATION: handlePartitionKey, /scratch_a/release/16125/vbuild/vertica/EE/Operators/DataTarget.cpp:1478 
2016-09-01 15:30:54.070 TM Moveout:0x7f9438012440 [Util] <INFO> Task 'TM Moveout' enabled 

は思えます。

タスクSELECT do_tm_task('moveout');は、次のエラーを発生させる:

Task: moveout 
(Table: staging.rosing_schema_migrations) (Projection: staging.rosing_schema_migrations_super) 
... 
(Table: staging.rosing_epg_program_events) (Projection: staging.rosing_epg_program_events_super) 
On node v_statistic_node0001: 
    ERROR 5060: Too many data partitions 

(1 row) 

誰もがこの問題を解決する方法を知っていますか?

更新:私は、この表からパーティションを削除することはできません

ALTER TABLE rosing_epg_program_events REMOVE PARTITIONING 

このSQLは同じエラー上げるため:あまりにも多くのデータパーティションを

UPDATE 2

この問題を修正しましたwoot答え。大いに感謝する!ここで

は、修正、それは私の手順です:

  1. rosing_epg_program_eventsテーブルのコピーを作成します。新しいテーブルから

    CREATE TABLE staging.rosing_epg_program_events2 
    LIKE staging.rosing_epg_program_events; 
    
  2. 削除パーティション:から

    ALTER TABLE staging.rosing_epg_program_events2 REMOVE PARTITIONING; 
    
  3. コピーデータを古いテーブルから新しいテーブルへ。 (!):

    INSERT /*+ DIRECT */ INTO staging.rosing_epg_program_events2 
    SELECT * FROM staging.rosing_epg_program_events; 
    
  4. ドロップ古いテーブル:古いテーブルがすべて含まれているように前後に挿入されたデータは、問題を見えるようだ

    DROP TABLE staging.rosing_epg_program_events; 
    
  5. 新しいテーブルの名前を変更します。

    ALTER TABLE staging.rosing_epg_program_events2 RENAME TO rosing_epg_program_events; 
    
  6. ランいずれの場合にも移動動作。今すぐ正常に動作します。

  7. いずれのケースでも最後の正常なエポックを確認してください。今では、実際の値を表示:すべては今うまく働くよう

    SELECT GET_LAST_GOOD_EPOCH(); 
    SELECT * FROM epochs WHERE epoch_number = 3064; // result of previous command 
    

は思えます。

+0

小さなメモは、新しい表の投影が正しいことを確認してください。私は誤って 'INCLUDING PARTITIONS'と打ち込んでしまった。私は下の私の答えでそれを修正しました。 – woot

+0

あなたは正しいです。私はテーブルのルーズセグメンテーション(すべてのフィールドでセグメンテーションが行われています)、プライマリキー制約、および 'AUTO_INCREMENT'フィールド(現在はINTフィールドのみ)です。だから、「プロジェクトを含む」を使うか、最初からテーブルを作成する方が良いでしょう。右? –

+1

ええ、または 'export_objects(...)'を選択して名前を変更することはできますが、投影を含むのが最も簡単だと思います。 – woot

答えて

1

CREATE TABLE AS SELECTまたはCREATE TABLE LIKE INCLUDING PROJECTIONSを実行し、パーティションを削除してからINSERT /*+ DIRECT */ SELECTをコピーして、テーブルを削除して名前を変更します。また、パーティションを作成するときは、40パーティション以下の粒度をターゲットにしてください。あなたは指定しませんでしたが、タイムスタンプを使用する場合は、式を使用してより細かい値を抽出します。たとえば、毎月行うには、実行します。

EXTRACT (year FROM mydate) * 100 + EXTRACT (month FROM mydate) 

をあなたはにVerticaのパーティション内の数式を使用して心配する必要はありません。パーティションキーの直接一致ではなく、フィールドの最小値/最大値を使用します。

関連する問題