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

展開オプション: Netezza Performance Serverを'Cloud Pak for Data Systemに 'Netezza Performance Serverを'Cloud Pak for Dataに 'IBM'Netezza Performance Serverfor '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. 正しい「schema.xmlファイルを見つけるために、「restoresvr.log中の「Reading schema from検索する。
  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. restoreに関連付けられている「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 コマンドを使用した完全テーブルバックアップの実行方法に記載されている手順に従ってください。