myVertica  

リバランス処理遅延の対処方法

Verticaクラスターにノードを追加したり、クラスターからノードを削除したりすると、Verticaはすべてのノード上でデータのリバランスを実施します。リバランスに長時間を要する場合、これらの手順を参照して原因を調べます。

前提条件

リバランスを開始する前に、クラスターの正常なリバランスを確実に行うために、以下のステップを実行してください。
1. ETLジョブと競合しない時間帯にリバランスをスケジューリングします。
2. データベースをバックアップします。
3. 古い、あるいは、未使用のテーブルパーティションを削除します。
4. ローカルセグメンテーションが無効であることを確認します。ローカルセグメンテーションが無効になっていない場合、このコマンドを実行して無効にします。
=> SELECT DISABLE_LOCAL_SEGMENTS(); 5. vioperfとvnetperfを使用して、CPUとネットワークの帯域幅をそれぞれ確認します。 使用可能な帯域幅が初期ベンチマークの値よりも小さい場合、システム管理者に連絡して、性能が低下している原因となる問題を見つけて修正してください。
6. リバランスを実行するために、データベースのサイズの少なくとも40%のストレージが使用可能であるかどうかを確認します。ストレージの使用状況を確認するには、次のクエリを実行します。 => SELECT node_name, storage_path, disk_space_used_mb, disk_space_free_mb FROM DISK_STORAGE; Linuxファイルシステムで使用可能なディスク容量を確認します。 $ df -h HOST_RESOURCESシステムテーブルから各ノードのスナップショットを取得します。 => SELECT host_name, disk_space_used_mb, disk_space_total_mb FROM HOST_RESOURCES; ストレージが不足している場合、カタログサイズを縮小するための手順を実行してください。
  • 不要なデータ、一時的なデータ、ステージングデータを削除する。
  • ログファイルをクリーンアップする。
  • 不要なテーブルまたはパーティションを削除する。
  • 新しいドライブを追加し、ストレージのロケーションを追加し、一部のカタログオブジェクトを新しいロケーションに移行する。
  • リバランスの間に使用される一時スペース用の一時格納領域を追加する。

  • ビルトインのREFRESHリソースプールの設定を確認します。 => SELECT name, is_internal, plannedconcurrency, maxmemorysize FROM RESOURCE_POOLS WHERE name='REFRESH'; 必要に応じて、リバランス処理が滞りなく実行できるように、リソースプール設定を調整します。

    7. リバランス対象のテーブルに対するDML処理(COPY、INSERT、UPDATE、DELETE)を最小限に抑えます。リバランスがテーブルのロックを保持している場合、ロードは失敗します。ロードがテーブルをロックしている場合、リバランスは一時停止します。 リバランスがETLジョブと競合していると考えられる場合、LockTimeout値を増やしてください。デフォルト値は、300秒(5分)です。 => SELECT SET_CONFIG_PARAMETER('LockTimeOut, 600) 8. Purging Deleted Data の説明にしたがって、DeleteされたデータをPurgeします。
    9. クラスターに追加するホストを構成します。
    10. ホストをクラスターに追加します。
    11. データベースにノードを追加します。
    注意:詳細については、Managing the Database を参照してください。
    12. リバランスを途切れることなく実行するには、DMLCancelTMパラメーターをfalseに設定して、リバランスプロセスを優先します。 => SELECT SET_CONFiG_PARAMETER('DMLCancelTM', 0);これで、リバランス処理を開始する準備が整いました。ここでは、リバランスを開始し、プロセスが正常に完了するのをモニタリングするための手順を示します。 Rebalancing Data Using SQL Functions の説明に従って、リバランスを開始します。

    ステップ タスク 結果
    1 Verticaがリバランスを実行しているテーブルをモニタリングします。 => SELECT * FROM REBALANCE_TABLE_STATUS; このクエリは、Verticaがリバランス実行しているテーブルと、転送されたデータの量に関する情報を返します。
    2 DML処理またはDDL処理で特定のテーブルのリバランスが妨げられた場合、次のようなエラーメッセージが表示されます。 ERROR 3007: DDL statement interfered with this statement このエラーが表示された場合、DML処理またはDDL処理を停止し、リバランスを再開してください。
    あるいは、これらの処理が実行されない時間帯までリバランスを延期します。
    3 次のシステムテーブルをモニタリングして、個々のテーブルとプロジェクションの進捗状況を確認します。 SELECT table_name, separated_percent, transferred_percent FROM REBALANCE_TABLE_STATUS; SELECT anchor_table_name, separated_percent, transferred_percent FROM REBALANCE_PROJECTION_STATUS; パーセントの値をモニタリングします。期待通りに進まない場合、リバランスが遅延する可能性があります。
    リバランスが遅い場合、リバランス処理を停止し、このチェックリストの冒頭のステップを使用して、新規リバランスの実行を準備することを検討してください。
    4 リバランスが正常に完了したかどうかを確認します。 => SELECT operation_status FROM REBALANCE_OPERATIONS; 「operation_status = COMPLETE」の場合、 リバランスはエラーなく完了しています。 クラスター内のすべてのノードがリバランスされている場合、このチェックリストは終了です。

    クラスター内のノードがリバランスされていない場合、次の事項を試行します。
  • このチェックリストに記載されている前提条件を確認し、リバランスを再開します。
  • ノードがまだリバランスされない場合、Verticaテクニカルサポートまでお問い合わせください。
  • 5 K-safetyが正しいかどうかを確認します。 K-safetyが1または2に設定されていない場合、Designing for K-Safety の内容に従ってください。
    6 リバランス後のデータベースのパフォーマンスを評価します。 パフォーマンスが大幅に低下した場合、Verticaテクニカルサポートまでお問い合わせください。

    関連詳細情報

    Vertica Knowledge BaseUnderstanding Rebalancing 1: What Happens During Rebalancing Understanding Rebalancing 2: Optimizing for Rebalancing にて、詳細情報が確認できます。