バックアップと復元のベストプラクティス

配備オプション: Netezza Performance Server にとって Cloud Pak for Data System Netezza Performance Server にとって Cloud Pak for DataIBM Netezza Performance Server にとって Cloud Pak for Data as a Service

nzrestore 、増分リストア時のパフォーマンスを向上させるなど、バックアップとリストアのベストプラクティスについて学びます。

インクリメンタルリストア中に大量の削除行を適用している場合、 nzrestore のパフォーマンスが低下したり、SPUスワップパーティションが一杯になったりする問題が発生することがあります。

インクリメンタル・リストアを実行しているときに、リストア操作の一部としてレコードの削除に時間がかかると、次のようなメッセージが表示されることがあります:
  • リストア操作による pg.log ファイルのメッセージは、以下のようなものである:
    2017-05-24 16:40:36.380386 CES [10548]  DEBUG:  QUERY: delete from ADMIN.T1 where (rowid) in (select rid from external '/nz/tmp/bnr10546F1sQFj' (rid bigint not null, dsid smallint not null) using (logdir '/dev/null'));
    
    2017-05-24 16:40:36.394734 CES [10548]  DEBUG:  spawnLdrReader: pid: 18805 load opt: 0 format = 0
  • nzrestore コマンドは失敗し、このエラーメッセージが表示される:
    Error: NZ-01103/01104: DB SQL 'delete from ADMIN.T1 where (rowid) in (select rid from external '/nz/tmp/bnr10546F1sQFj' (rid bigint not null, dsid smallint not null) using (logdir '/dev/null'));' failed - DB error - ERROR:  SPU swap partition : Disk temporary work space is full.

問題の解決

11.2.2.4で新しいリストアロジックが導入されました。 enableSpliDelete オプションはデフォルトで有効になっている。

復元ロジックを無効にするには、以下のコマンドを実行します:
nzrestore -disableSplitDelete

この機能は、ディスクベースのハッシュ結合プロセス(DHJ)とメモリとパフォーマンスの問題を回避するために、単一の削除文を同じトランザクション内の複数の削除操作に分割します。

この問題の回避策としてこの機能を使用するには、以下の条件を満たしていることを確認してください:
  • ベース・テーブルの行数が100億を超えるか、 nzrestore -baseTableRowCount で指定された値を超える。
  • 削除レコード数がDHJのしきい値を超えているか、 .del ファイルのサイズが nzrestore -delFileSize を超えている。
注: ベース・テーブルは行セキュア・テーブルのバージョンではない。

nzrestore

nzrestore -enableSplitDelete 次に例を示します。
  • enableSplitDelete はデフォルトで設定されています。 .del ファイルのサイズが15GBを超え、ベース・テーブルの行数が100億(デフォルト値)を超える場合、実行する:
    nzrestore -delFileSize 15
  • enableSplitDelete はデフォルトで設定されています。 .del 、ファイルサイズが15GBを超え、ベース・テーブルの行数が1億行を超える場合、実行する:
    nzrestore -delFileSize 15 -baseTableRowCount 100
  • すべてのデフォルト設定で enableSplitDeleteを無効にするには、以下を実行する:
    nzrestore -disableSplitDelete
  • 11.3.0.1 以降のリリースでは、デフォルト値以外のトランザクションごとの削除行数を指定できます
    nzrestore -numRowsPerDelete

    削除ごとの行数(単位:百万行)(デフォルト値:1300万行)

    例:

    nzrestore -numRowsPerDelete 15

特定のテーブルに関連する .del ファイルを検索する

nzresotre 中に restoresvr.log に次のようなエラーが表示される。
Error: NZ-01103/01104: DB SQL 'delete from ADMIN.T1 where (rowid) in (select rid from external '/nz/tmp/bnr10546F1sQFj' (rid bigint not null, dsid smallint not null) using (logdir '/dev/null'));' failed - DB error - ERROR: SPU swap partition : Disk temporary work space is full.

この例では、テーブル T1 からレコードを削除しているときにエラーが発生する。

  1. restoresvr.logReading schema from を検索し、正しい schema.xml ファイルを見つける。
  2. 対応する schema.xml ファイルからテーブル ( T1 ) を検索し、テーブル ( T1 ) の object id (old) をメモする。
    $ grep -Ei 'TABLE.*T1' /nzscratch/backup/Netezza/7836028-H2/SAN/20170526144618/2/DIFF/md/schema.xml
    <TABLE ver="2" name="T1" schema="ADMIN" owner="ADMIN" oidhi="0" oid="886046" delimited="f" sdelim="f" odelim="f" rowsecurity="f" origoidhi="0" origoid="886046">
  3. リストアに関連付けられている data ディレクトリに移動します。
  4. object id (oid) ( oid 886046 ) の .del ファイルを探す。
    この例では、 .del ファイルは /nzscratch/backup/Netezza/7836028-H2/SAN/20170526144618/2/DIFF/data ディレクトリにある。
    $ ls -l /nzscratch/sanjitc/crm118216/backup/Netezza/7836028-H2/SAN/20170526144618/2/DIFF/data/886046.del.*
    
    -rw------- 1 nz nz 215274049844 May 26 10:47 886046.del.1.1

DHJ閾値の決定

レジストリのデフォルト設定では、DHJのしきい値は約12,511,836行である。 それ以外の場合は、以下の方法で閾値を特定することができる。
'number of deleted rows' x 'number of dataslices on the system'  < '50% of spuPlanWorkBlocks'

spuPlanWorkBlocks はシステム・レジストリを指定する。 デフォルト値は256MB。

代替アプローチ

11.2.2.4より古いバージョンをお使いの場合、または別の解決策をお探しの場合は、以下の解決策のいずれかをお試しください:
  • 削除が必要な行がDHJのしきい値を超えた場合、差分バックアップではなくフルバックアップを取る。
  • nz_update_backup_status コマンドを実行し、次の差分バックアップ実行時にテーブルの完全バックアップを強制的に実行します。 nz_update_backup_status コマンドを使用した完全テーブルバックアップの実行方法に記載されている手順に従ってください。