Bewährte Verfahren zur Sicherung und Wiederherstellung

Bereitstellungsoptionen: IBM Netezza Appliance IBM Netezza Appliance IBM Netezza Performance Server für Cloud Pak for Data as a Service

Erfahren Sie mehr über die besten Praktiken bei der Sicherung und Wiederherstellung, wie z. B. die Verbesserung der Leistung von nzrestore bei der inkrementellen Wiederherstellung.

Wenn Sie während einer inkrementellen Wiederherstellung eine große Menge an gelöschten Zeilen anwenden, können Probleme im Zusammenhang mit der langsamen Leistung von nzrestore oder mit einer vollen SPU-Auslagerungspartition auftreten.

Wenn Sie eine inkrementelle Wiederherstellung durchführen und das Löschen von Datensätzen als Teil des Wiederherstellungsvorgangs viel Zeit in Anspruch nimmt, werden möglicherweise die folgenden Meldungen angezeigt:
  • Die Meldung in der Datei pg.log des Wiederherstellungsvorgangs ist ähnlich wie die folgende Meldung:
    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
  • Der Befehl nzrestore schlägt fehl und zeigt diese Fehlermeldung an:
    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.

Problemlösung

Mit 11.2.2.4 wird eine neue Wiederherstellungslogik eingeführt. Die Option enableSpliDelete ist standardmäßig aktiviert.

Um die Wiederherstellungslogik zu deaktivieren, führen Sie den folgenden Befehl aus:
nzrestore -disableSplitDelete

Mit dieser Funktion wird die einzelne Löschanweisung in mehrere Löschvorgänge in derselben Transaktion aufgeteilt, um einen plattenbasierten Hash-Join-Prozess (DHJ) sowie Speicher- und Leistungsprobleme zu vermeiden.

Um diese Funktion als Abhilfe für dieses Problem zu nutzen, stellen Sie sicher, dass Sie die folgenden Bedingungen erfüllen:
  • Die Anzahl der Zeilen in der Basistabelle ist größer als 1 Milliarde oder übersteigt den Wert, der mit nzrestore -baseTableRowCount angegeben wurde.
  • Die Anzahl der gelöschten Datensätze liegt über dem DHJ-Schwellenwert oder die Größe der Datei .del übersteigt nzrestore -delFileSize.
Hinweis: Die Basistabelle ist keine Version einer zeilensicheren Tabelle.

nzrestore Beispiele

nzrestore -enableSplitDelete Beispiele:
  • enableSplitDelete ist standardmäßig eingestellt. Wenn die Größe der Datei .del mehr als 15 GB beträgt und die Anzahl der Zeilen der Basistabelle mehr als 1 Milliarde (Standardwert) beträgt, führen Sie aus:
    nzrestore -delFileSize 15
  • enableSplitDelete ist standardmäßig eingestellt. Wenn die Größe der Datei .del mehr als 15 GB beträgt und die Anzahl der Zeilen der Basistabelle mehr als 100 Millionen beträgt, führen Sie den Vorgang aus:
    nzrestore -delFileSize 15 -baseTableRowCount 100
  • Um enableSplitDelete mit allen Standardeinstellungen zu deaktivieren, führen Sie aus:
    nzrestore -disableSplitDelete

Suche nach der .del Datei, die mit einer bestimmten Tabelle verbunden ist

Der folgende Fehler erscheint in restoresvr.log während 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.

In diesem Beispiel wird der Fehler erzeugt, während Sie Datensätze aus der Tabelle T1 löschen.

  1. Suchen Sie nach Reading schema from in restoresvr.log, um die richtige Datei schema.xml zu finden.
  2. Suchen Sie die Tabelle ( T1 ) in der entsprechenden Datei schema.xml und notieren Sie die object id (old) für die Tabelle ( T1 ).
    $ 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. Wechseln Sie zu dem Verzeichnis data, das mit der Wiederherstellung verknüpft ist.
  4. Suchen Sie die Datei .del für die object id (oid) ( oid 886046 ).
    In diesem Beispiel befinden sich die Dateien .del im Verzeichnis /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

Bestimmung der DHJ-Schwelle

Mit den Standard-Registrierungseinstellungen liegt der DHJ-Schwellenwert bei einer Anzahl von 12.511.836 Zeilen. In anderen Fällen können Sie den Schwellenwert auf folgende Weise ermitteln.
'number of deleted rows' x 'number of dataslices on the system'  < '50% of spuPlanWorkBlocks'

spuPlanWorkBlocks gibt die Systemregistrierung an. Der Standardwert ist 256 MB.

Alternative Ansätze

Wenn Sie eine ältere Version als 11.2.2.4 verwenden oder nach einer alternativen Lösung suchen, können Sie eine der folgenden Lösungen ausprobieren:
  • Führen Sie eine Vollsicherung anstelle einer differenziellen Sicherung durch, wenn die zu löschenden Zeilen den DHJ-Schwellenwert überschreiten.
  • Führen Sie den Befehl nz_update_backup_status aus, um eine vollständige Tabellensicherung beim nächsten differenziellen Sicherungslauf zu erzwingen. Folgen Sie den Anweisungen, die unter Erzwingen einer vollständigen Tabellensicherung mit dem Befehl nz_update_backup_status beschrieben sind.