Bewährte Verfahren zur Sicherung und Wiederherstellung
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.
- Die Meldung in der Datei
pg.logdes 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.
nzrestore -disableSplitDeleteMit 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.
- 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.
nzrestore Beispiele
- enableSplitDelete ist standardmäßig eingestellt. Wenn die Größe der Datei
.delmehr 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
.delmehr 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
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.
- Suchen Sie nach
Reading schema frominrestoresvr.log, um die richtige Dateischema.xmlzu finden. - Suchen Sie die Tabelle (
T1) in der entsprechenden Dateischema.xmlund notieren Sie dieobject 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"> - Wechseln Sie zu dem Verzeichnis
data, das mit der Wiederherstellung verknüpft ist. - Suchen Sie die Datei
.delfür dieobject id (oid)(oid 886046).In diesem Beispiel befinden sich die Dateien.delim 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
'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
- 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.