前のトピック: すべてのデータベース テーブルのセグメント化の確認次のトピック: Data Aggregator インストールのアップグレード - インストール ウィザード


データベース テーブルのセグメント化(クラスタ インストールのみ)

アップグレード中に、またはアップグレード後の任意の時点で、すべてのデータベース テーブルがセグメント化されていることを確認します(まだの場合)。 セグメント化されていないデータベース テーブル予測が返される場合は、それらをセグメント化します。 また、アップグレードの後にいつでもデータベース テーブルをセグメント化することができます。

重要: データベース テーブルをセグメント化しない場合、Data Aggregator コンポーネントのアップグレード中に警告メッセージが表示されます。

テーブルをセグメント化することにより、データベースに必要なディスク容量を減らすことができます。 テーブルをセグメント化すると一般にクエリのパフォーマンスも向上します。 Data Aggregator および Data Collector が稼働している場合、またはこれらのコンポーネントがダウンしている場合のいずれもデータベース テーブルをセグメント化できます。

注: セグメント化はリソースを大量に消費するプロセスです。 Data Aggregator コンポーネントをアップグレードする前に、Data Aggregator および Data Collector がダウンしているときにデータベース テーブルをセグメント化することを強くお勧めします。 Data Aggregator および Data Collector の実行中にデータベース テーブルをセグメント化することはできますが、推奨していません。

Data Aggregator および Data Collector がダウンしている間にデータベース テーブルをセグメント化する場合、Data Aggregator コンポーネントをアップグレードする前に以下の情報を考慮してください。

重要: Data Aggregator が実行されていない場合でも、セグメント化のディスク使用率の合計が使用可能なディスク容量の 90 パーセントを超えることはできません。 セグメント化の間にディスク使用率が 90 パーセントを超える場合、それ以上テーブルは処理されません。

Data Aggregator コンポーネントをアップグレードした後、Data Aggregator および Data Collector の実行中にデータベース テーブルをセグメント化する場合は、以下の情報を考慮してください。

重要: データベース内のテーブルのセグメント化では、Data Aggregator が実行されている場合、使用可能なディスク容量の少なくとも 40 パーセントはクエリ処理および他のデータベース アクティビティ用に空いている必要があります。

セグメント化が完了した後、バックアップ用のディスク容量は、作成された新しいセグメント化テーブル予測でのデータ量の分だけ増加します。 セグメント化が完了した後、バックアップが実行される前に、使用可能なディスク容量が十分にあることを確認してください。

セグメント化されていない古いテーブル予測に対するバックアップ領域内のデータは、restorePointLimit (このエントリはバックアップ設定ファイル内にあります)の時間プラス 1 日が経過した後に削除されます。

古いデータが削除されるのにかかる時間を回避するには、バックアップ設定ファイル内のスナップショット名を変更し、セグメント化が完了した後にフル バックアップを実行します。 次に、古いバックアップをアーカイブし、バックアップ ディスクからバックアップを削除できます。 セグメント化が完了した後に作成されたバックアップを使用できない場合にのみ、セグメント化前のバックアップを使用してください。 セグメント化前のバックアップを使用する必要がある場合、テーブル予測を再度セグメント化する必要があります。

データベース テーブルのセグメント化の準備

データベース テーブルのセグメント化を準備するには、以下の手順に従います。

Data Repository をバックアップするには、以下の手順に従います。

  1. Data Repository をバックアップします。 バックアップの実行は時間のかかるプロセスです。 以下のコマンドを実行します。
    backup_script_directory_location/backup_script.sh >/backup_directory_location/backup.log  2>&1
    

    以下に例を示します。

    /home/vertica/backup_script.sh >/tmp/backup.log  2>&1
    

    Data Repository を自動的にバックアップするためにこのスクリプトを作成していた場合の詳細については、「CA Performance Management 管理者ガイド」を参照してください。

データのないデータベース テーブルをセグメント化するには、以下の手順に従います。

  1. Vertica Linux データベース管理者ユーザとして、Data Repository がインストールされているクラスタ内のコンピュータの 1 つにログインします。
  2. segment.py スクリプトをダウンロードし、インストール メディアを抽出します。 Vertica Linux データベース管理者ユーザが書き込み可能なディレクトリ内にスクリプトを置きます。 この手順では、segment.py スクリプトが Vertica Linux データベース管理者ユーザのホーム ディレクトリにあると仮定します。
  3. Data Aggregator の実行中に以下のコマンドを入力します。
    ./segment.py --task zerotables --pass database_admin_user_password [--name database_name] [--port database_port]
    
    database_admin_user_password

    Vertica Linux データベース管理者ユーザ パスワードを設定します。

    database_name

    データベースの名前を示します。 データベース名がデフォルトの drdata でない場合のオプションです。

    database_port

    Vertica に接続するために使用するポートを示します。 ポート番号がデフォルトの 5433 でない場合のオプションです。

    データのないデータベース テーブルがセグメント化されました。

残りのデータベース テーブルをセグメント化するために必要な時間の量を判断するには、ベースラインを計算します。

  1. テーブル名が大きい順に並べられて返されるようにするには、以下のコマンドを入力します:
    ./segment.py --task tables --pass database_admin_user_password [--name database_name] [--port database_port]
    
  2. セグメント化が完了するまで、スケジュールされたバックアップを無効にします。 バックアップはセグメント化プロセスの邪魔になる可能性があります。
  3. 約 5 GB のサイズがあるテーブルを手順 1 から選択します。 以下のコマンドを入力して、テーブルをセグメント化します。
    ./segment.py --task segment --table rate_table_name --pass database_admin_user_password [--name database_name] [--port database_port]
    

    : このコマンドは、Data Aggregator の実行中に実行できますが、2 ~ 3 時間の保守ウィンドウ中にこのコマンドを実行することをお勧めします。

  4. スケジュールされたバックアップを再度有効にします。
  5. 5 GB のテーブルをセグメント化するためにかかった時間を使用して、100 GB 未満のテーブルをすべてセグメント化するためにかかる時間を判断します。

    : データベース テーブルをセグメント化するために必要となる実際の時間は、テーブル内のデータのタイプおよび圧縮に基づいて変わる可能性があります。 ここで計算されるのは概算の値です。 定期的な保守ウィンドウを計画する場合は、セグメント化される 10 ~ 15 GB のデータベース テーブルごとに余分な時間を追加してください。

    大きなデータベースについては、データベース全体をセグメント化するために十分な長さのある保守ウィンドウを 1 回ではスケジュールできない可能性があります。 この場合、複数の保守ウィンドウにわたってデータベース テーブルをセグメント化することができます。

データベース テーブルのセグメント化

次の手順に従ってください:

  1. Vertica Linux データベース管理者ユーザとして、Data Repository がインストールされているクラスタ内のコンピュータの 1 つにログインします。
  2. 前の手順でのテーブル予測セグメント化の検証中に、10 を超えるゼロ レングス テーブル予測が検出された場合は、以下のコマンドを入力してそれらをセグメント化します。
    ./segment.py --task segment --pass database_admin_user_password --zerotables [--name database_name] [--port database_port]
    
    database_admin_user_password

    Vertica Linux データベース管理者ユーザ パスワードを設定します。

    database_name

    データベースの名前を示します。 データベース名がデフォルトの drdata でない場合のオプションです。

    database_port

    Vertica に接続するために使用するポートを示します。 ポート番号がデフォルトの 5433 でない場合のオプションです。

    以下に例を示します。

    ./segment.py --task segment --pass password --zerotables --name mydatabase --port 1122
    
  3. サイズが 100 GB を超えるテーブル予測がある場合は、以下のコマンドを入力し、最初に 100 GB 未満であるテーブル予測をセグメント化するスクリプトを作成します。
    ./segment.py --task script --pass database_admin_user_password --lt100G [--name database_name] [--port database_port]
    
    database_admin_user_password

    Vertica Linux データベース管理者ユーザ パスワードを設定します。

    database_name

    データベースの名前を示します。 データベース名がデフォルトの drdata でない場合のオプションです。

    database_port

    Vertica に接続するために使用するポートを示します。 ポート番号がデフォルトの 5433 でない場合のオプションです。

    以下に例を示します。

    ./segment.py --task script --pass password --lt100G --name mydatabase --port 1122
    
  4. セグメント化が完了するまで、スケジュールされたバックアップを無効にします。 バックアップはセグメント化プロセスの邪魔になる可能性があります。
  5. segment-script.sh スクリプトを実行するには、以下のコマンドを入力します。
    nohup ./segment-script.sh
    

    このスクリプトは、セグメント化されていない 100 GB 未満のテーブル予測をセグメント化し、小さい順に並べます。 出力は nohup.out に送信されます。 シェルが予期せず閉じられた場合、スクリプトの実効は継続されます。

    実施されている保守ウィンドウのサイズ、および 100 GB 未満のテーブルのすべての合計サイズに応じて、保守ウィンドウでセグメント化されるテーブルを判断します。 データベース テーブルのセグメント化を準備したときに計算された概算時間に基づいて、保守ウィンドウ内に収まらないテーブルを削除することによって、生成されたスクリプトを変更します。 生成された segment-script.sh を保守ウィンドウ内で実行します。 100 GB 未満のテーブルのすべてを保守ウィンドウ内でセグメント化できなかった場合は、スクリプトを再生成して次の保守ウィンドウ内で segment-script.sh を実行し、テーブルがすべてセグメント化されるまで続けます。

    重要: スクリプトを実行すると、ディスク使用率が 90 パーセントを超える原因となるテーブルにはエラー メッセージが表示され、それらのテーブルはセグメント化されません。 これらのテーブルをセグメント化するには、使用可能なディスク容量を増やす必要があります。

    ディスク使用率が 60 パーセントを超える原因となる各テーブルごとにプロンプトが示されます。 これらのテーブルをセグメント化する前に、Data Aggregator をダウンさせることを強くお勧めします。

    また、このスクリプトの実行には数時間かかる場合があることに注意してください。 いったん開始されたら、データベースの破損を回避するためにスクリプトの実行を中断しないでください。

  6. さらにセグメント化が必要で、今後の保守ウィンドウで実行される場合にのみ、スケジュールされたバックアップを再度有効にします。
  7. 100 GB を超える残りのテーブル予測をセグメント化するスクリプト(segment-script.sh)を生成するには、以下のコマンドを入力します。
    ./segment.py --task script --pass database_admin_user_password [--name database_name] [--port database_port]
    
    database_admin_user_password

    Vertica Linux データベース管理者ユーザ パスワードを設定します。

    database_name

    データベースの名前を示します。 データベース名がデフォルトの drdata でない場合のオプションです。

    database_port

    Vertica に接続するために使用するポートを示します。 ポート番号がデフォルトの 5433 でない場合のオプションです。

    以下に例を示します。

    ./segment.py --task script --pass password --name mydatabase --port 1122
    

    重要: スクリプトが生成されると、ディスク使用率が 60 パーセントおよび 90 パーセントを超える原因となる可能性があるすべてのテーブルが示されます。

  8. スケジュールされたバックアップを無効にします(まだの場合)。
  9. segment-script.sh スクリプトを実行するには、以下のコマンドを入力します。
    nohup ./segment-script.sh
    

    このスクリプトは、未分割のテーブルをすべてセグメント化し、小さい順に並べます。

    重要: スクリプトを実行すると、ディスク使用率が 90 パーセントを超える原因となるテーブルにはエラー メッセージが表示され、それらのテーブルはセグメント化されません。 これらのテーブルがセグメント化されるようにするには、使用可能なディスク容量を増やす必要があります。

    ディスク使用率が 60 パーセントを超える原因となる各テーブルごとにプロンプトが示されます。 これらのテーブルをセグメント化する前に、Data Aggregator をダウンさせることを強くお勧めします。

    このスクリプトは、データベース内の大規模なテーブルに実行する場合は数時間かかる可能性があります。 内部のセグメント化テストおよび顧客データベース テストでは、100 GB 以上のテーブルのセグメント化が完了するまでに 10 時間以上かかりました。 セグメント化の時間はテーブル サイズに対して一定ではありません。 行数、列数、データの圧縮、マシンの仕様などの多くの要因によって時間は変わります。 実施されている保守ウィンドウのサイズに応じて、保守ウィンドウごとのテーブルのセグメント化を計画します。

  10. すべてのテーブルがセグメント化されたことを確認するには、以下のコマンドを入力します。
    ./segment.py --task tables --pass database_admin_user_password  [--name database_name] [--port database_port]
    

    以下の 内容のメッセージが表示されます。

    セグメント化されていないテーブルはありません。
    
  11. スケジュールされたバックアップを再度有効にします。
  12. Data Aggregator および Data Collector がダウンしているときにデータベース テーブルをセグメント化した場合は、これらのコンポーネントを起動します。
    1. Data Aggregator を起動するには、以下のコマンドを入力します。
      service dadaemon start
      
    2. Data Collector を起動するには、以下のコマンドを入力します。
      service dcmd start
      

前述の手順では、segment.py スクリプトの使用について、および環境をマイグレートする際のさまざまな考慮事項について簡単に説明しています。 スクリプトの使用に関してご不明な点がある場合、またはマイグレーションを計画する際にヘルプが必要な場合は、CA サポートまでお問い合わせください。