DOAG Konferenz
19. - 21.11.2013, Nürnberg
ORA-1555 snapshot too old Martin Hoermann
Eine unerwartete Reise
[email protected] www.ordix.de
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 1
Transaktionsmanagement
Eigenschaften von Transaktionen
Atomar Consistent Isolated Durable
Isolation Level
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 2
Transaktionsmanagement
Isolation Level im ANSI-SQL-99 Standard
Read uncommitted / dirty read
Read committed
Repeatable read
Serializable
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 3
Transaktionsmanagement
Isolation Level
Oracle: Consistent Read
Leser warten nie auf Schreiber
Schreiber warten nie auf Leser
MS-SQL: Read Committed Snapshot Isolation Level
Informix: USELASTCOMMITTED-Configuration-Parameter
DB2: currently committed
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 4
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 5
ORA-1555 (I)
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4050 SCN=1200 SCN=3370
Commit SCN
4711 DB-SCN 4712 4713
SELECT *
FROM data
ORDER BY id;
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 6
ORA-1555 (II)
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=1200 SCN=1200 SCN=3370
4714
UPDATE data
SET xyz = 'xxxx'
WHERE id IN( 3333, 4444, 5555 );
commit; -- SCN 4714
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 7
ORA-1555 (III)
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4714 SCN=1200 SCN=3370
RBS=7
Slot=3
4714 4715
SELECT * SCN=1200
FROM v$bh
WHERE file# = ...
AND block# = ...
AND status = 'cr';
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 8
ORA-1555 (IV)
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4714 SCN=1200 SCN=3370
RBS=7
Slot=3
FROM v$bh
4716 4717
RBS-7 SLOT1… UNDO xxx
SLOT2…
SLOT3…
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 9
ORA-1555 (V)
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4714
RBS=7
Slot=3
FROM v$bh
4719 4720
RBS-7 SLOT1… UNDO xxx
SLOT2…
SLOT3…
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 10
ORA-1555 (VI)
ORA-01555: snapshot too old: rollback segment number 6 with name
"_SYSSMU6_569811948$" too small
01555. 00000 - "snapshot too old: rollback segment number %s with name \"%s\" too small"
*Cause: rollback records needed by a reader for consistent read are
overwritten by other writers
*Action: If in Automatic Undo Management mode, increase undo_retention
setting. Otherwise, use larger rollback segments
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 11
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 12
UNDO (I)
UNDO-Tablespace
Größe
Autoextensible
UNDO-Retention
Autoextend:
Tablespace wird erweitert um UNDO_RETENTION zu gewährleisten
Kein Autoextend:
UNDO_RETENTION wird überschrieben durch TUNED_UNDO_RETENTION
UNDO-Guarantee
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 13
UNDO (II)
Active:
Tranksaktion benötigt Informationen für Rollback
Unexpired:
Transkation beendet, aber UNDO-Retention noch nicht abgelaufen
Expired:
Transaktion beendet und älter als UNDO-Retention
After a transaction is committed, undo data is no longer needed for rollback or transaction recovery purposes. However,
for consistent read purposes, long-running queries may require this old undo information for producing older images of
data blocks. Furthermore, the success of several Oracle Flashback features can also depend upon the availability of older
undo information. For these reasons, it is desirable to retain the old undo information for as long as possible. (Oracle
Dokumentation)
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 14
UNDO-Konfiguration
UNDO wird überschrieben wenn expired
Kein Platz im UNDO-Tablespace und Autoextend aus
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 15
UNDO-Guarantee
CREATE UNDO TABLESPACE undotbs2
DATAFILE 'E:\ORACLE\XE\APP\ORACLE\ORADATA\XE\UNDOTBS2.DBF'
SIZE 4M AUTOEXTEND OFF
RETENTION GUARANTEE;
Möglicher SQL-Fehler: ORA-30036:
unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
30036. 00000 - "unable to extend segment by %s in undo tablespace '%s'“
*Cause: The specified undo tablespace has no more space available.
*Action: Add more space to the undo tablespace before retrying the operation.
An alternative is to wait until active transactions to commit.
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 16
UNDO-Block überschrieben
i.d.R. durch umfangreiche Datenänderungen
große Transaktionen
RBS-7 SLOT1… UNDO xxx
SLOT2…
SLOT3…
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 17
UNDO-Header überschrieben
i.d.R. durch viele Transaktionen
meist kurze Transaktionen
RBS-7 SLOT1… UNDO xxx
SLOT2…
SLOT3…
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 18
UNDO-Management
Wenn UNDO_RETENTION > Max Query Length
UND
UNDO_TABLESPACE groß genug
DANN
gibt es keinen ORA-1555
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 19
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 20
Analyse
alert.log
Mon Jul 29 09:17:36 2013
ORA-01555 caused by SQL statement below (SQL ID: 4k2f8hv1yng5g,
Query Duration=2 sec, SCN: 0x0000.0021f144):
SELECT * FROM TEST02 ORDER BY ID
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 21
Analyse
v$undostat / awr / statspack
Num Undo Number of Max Qry Max Tx Tun Ret STO/ uS/uR/uU/
End Time Blocks Transactions Len (s) Concy (mins) OOS eS/eR/eU
------------ ----------- ------------ ------- ------- ------- ----- -----------
17-Okt 12:16 16 40 2,252 3 0 0/0 0/0/0/0/0/0
17-Okt 12:06 31,559 2,315,879 1,649 3 0 1/0 238456/8/70
40/820964/1
155432/0
17-Okt 11:56 30,901 2,259,167 944 3 0 0/0 182665/0/50
78/788581/1
206320/0
17-Okt 11:46 30,113 2,205,321 342 2 0 0/0 272796/0/81
45/781113/1
061432/0
17-Okt 11:36 1,510 67,931 945 4 1 0/3 21510/0/672
/21952/3544
/0
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 22
V$UNDOSTAT (I)
UNXPSTEALCNT: The number of attempts when unexpired blocks were
stolen from other undo segments to satisfy space requests.
UNXPBLKRELCNT: The number of unexpired blocks removed from undo
segments to be used by other transactions.
UNXPBLKREUCNT: The number of unexpired undo blocks reused by
transactions.
Num Undo Number of Max Qry Max Tx Tun Ret STO/ uS/uR/uU/
End Time Blocks Transactions Len (s) Concy (mins) OOS eS/eR/eU
------------ ----------- ------------ ------- ------- ------- ----- -----------
17-Okt 12:16 16 40 2,252 3 0 0/0 0/0/0/0/0/0
17-Okt 12:06 31,559 2,315,879 1,649 3 0 1/0 238456/8/70
40/820964/1
155432/0
17-Okt 11:56 30,901 2,259,167 944 3 0 0/0 182665/0/50
78/788581/1
206320/0
17-Okt 11:46 30,113 2,205,321 342 2 0 0/0 272796/0/81
45/781113/1
061432/0
17-Okt 11:36 1,510 67,931 945 4 1 0/3 21510/0/672
/21952/3544
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013
/0 23
V$UNDOSTAT (II)
EXPSTEALCNT: The number of attempts when expired extents were stolen
from other undo segments to satisfy a space requests.
EXPBLKRELCNT: The number of expired extents stolen from other undo
segments to satisfy a space request.
EXPBLKREUCNT: The number of expired undo blocks reused within the
same undo segments.
Num Undo Number of Max Qry Max Tx Tun Ret STO/ uS/uR/uU/
End Time Blocks Transactions Len (s) Concy (mins) OOS eS/eR/eU
------------ ----------- ------------ ------- ------- ------- ----- -----------
17-Okt 12:16 16 40 2,252 3 0 0/0 0/0/0/0/0/0
17-Okt 12:06 31,559 2,315,879 1,649 3 0 1/0 238456/8/70
40/820964/1
155432/0
17-Okt 11:56 30,901 2,259,167 944 3 0 0/0 182665/0/50
78/788581/1
206320/0
17-Okt 11:46 30,113 2,205,321 342 2 0 0/0 272796/0/81
45/781113/1
061432/0
17-Okt 11:36 1,510 67,931 945 4 1 0/3 21510/0/672
/21952/3544
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013
/0 24
V$UNDOSTAT (III)
SSOLDERRCNT: The number of ORA-1555 errors that occurred during the
interval.
NOSPACEERRCNT: The number of Out-of-Space errors
Num Undo Number of Max Qry Max Tx Tun Ret STO/ uS/uR/uU/
End Time Blocks Transactions Len (s) Concy (mins) OOS eS/eR/eU
------------ ----------- ------------ ------- ------- ------- ----- -----------
17-Okt 12:16 16 40 2,252 3 0 0/0 0/0/0/0/0/0
17-Okt 12:06 31,559 2,315,879 1,649 3 0 1/0 238456/8/70
40/820964/1
155432/0
17-Okt 11:56 30,901 2,259,167 944 3 0 0/0 182665/0/50
78/788581/1
206320/0
17-Okt 11:46 30,113 2,205,321 342 2 0 0/0 272796/0/81
45/781113/1
061432/0
17-Okt 11:36 1,510 67,931 945 4 1 0/3 21510/0/672
/21952/3544
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013
/0 25
V$UNDOSTAT (IV)
TUNED_UNDORETENTION: Retention für fixed size UNDO Tablespace
Num Undo Number of Max Qry Max Tx Tun Ret STO/ uS/uR/uU/
End Time Blocks Transactions Len (s) Concy (mins) OOS eS/eR/eU
------------ ----------- ------------ ------- ------- ------- ----- -----------
17-Okt 12:16 16 40 2,252 3 0 0/0 0/0/0/0/0/0
17-Okt 12:06 31,559 2,315,879 1,649 3 0 1/0 238456/8/70
40/820964/1
155432/0
17-Okt 11:56 30,901 2,259,167 944 3 0 0/0 182665/0/50
78/788581/1
206320/0
17-Okt 11:46 30,113 2,205,321 342 2 0 0/0 272796/0/81
45/781113/1
061432/0
17-Okt 11:36 1,510 67,931 945 4 1 0/3 21510/0/672
/21952/3544
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013
/0 26
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 27
Fetch Across Commit
BEGIN
FOR rec IN ( SELECT *
FROM data
ORDER BY id )
ORA-01555: snapshot too old:
LOOP
rollback
UPDATE datasegment
commit;
number
SET col = sysdate string
WHERE id = rec.id
with name
END LOOP;
"string" too small
END;
/
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 28
Fetch Across Commit
Fetch across commit vermeiden
Weniger Commit
Sortierung mit weniger mehrfach Blockzugriffen
Doing fetch across commits is not an ANSI supported operation.
According to ANSI standard, a cursor is invalidated when a commit
is performed and should therefore be closed and reopened.
Oracle, however, allows application programmers and users to do fetch
across commits. Hence, they should be aware of the potential ORA-01555
error and the fact that they are relying on a cursor behavior that is not ANSI
standard.
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 29
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 30
Delayed Block Cleanout
ORA-1555 obwohl Tabelle seit Tagen NICHT verändert wurde
Ursache Kombination aus:
Delayed Block Cleanout
Lang laufender Cursor
Viel UNDO-Traffic
http://jonathanlewis.wordpress.com/2009/06/16/clean-it-up/
http://oracle-randolf.blogspot.de/2011/04/delayed-block-cleanout-ora-01555.html
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 31
Delayed Block Cleanout
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4214 SCN=1200 SCN=3370
RBS=7
Slot=3
ORA-01555: snapshot too old:
Commit=N
rollback segment number
string
RBS-7 SLOT1…
with name "string" too„konservative
Transaktion MUSS
mit Commit
small „konservative
SLOT2… beendet worden Commit SCN“ Commit SCN“
sein, sonst wäre ist älteste neuer als
SLOT3…
UNDO aktuelle SCN QENV
noch vorhanden! minus 1.
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 32
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 33
SCN_ASCENDING
Hint
Bug 6688108 Enhancement - Allow ORA-1555 to be ignored during table scan
select /*+ scn_ascending */ ...
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 34
SCN_ASCENDING
ORA-1555
Query Environment (QENV) = 4711 (SCN)
SCN=1200 SCN=1200 SCN=4714 SCN=1200 SCN=3370
RBS=7
Slot=3
4714 4715
SELECT /*+ scn_ascending */ *
FROM data
ORDER BY id;
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 35
SCN_ASCENDING
ORA-1555
Randolf Geist - Blog
http://oracle-randolf.blogspot.de/search/label/SCN_ASCENDING
http://oracle-randolf.blogspot.de/2009/04/read-consistency-ora-01555-snapshot-too.html
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 36
SCN_ASCENDING
Hint
SCN_ASCENDING = Dirty Read
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 37
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 38
Interessante Links
https://blogs.oracle.com/db/entry/troubleshooting_ora_1555
http://www.ixora.com.au/tips/admin/ora-1555.htm
http://oraspot.wordpress.com/2011/04/17/undo-analysis/
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:360536564061
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:275215756923
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 39
ORA-1555 und Lobs
Out-of-row LOB undo is maintained in the LOB segment.
So the UNDO tablespace and undo retention is not associated with most LOB ORA-1555
issues. Instead the LOB column is created using either PCT_VERSION or RETENTION to
manage how much space within blocks or time transpires before the LOB undo is
overwritten. In environments with high updates, deletes on rows including LOBs, the
chances of ORA-1555 on LOB undo is very high.
PCT_VERSION and RETENTION are not auto-tuned. To “tune” those configuration
settings, you must change the values for PCT_VERSION or RETENTION. Changes to
UNDO_RETENTION does not change LOB retention time frames.
Note 162345.1
LOBS - Storage, Read-consistency and Rollback
Note 386341.1
How to determine the actual size of the LOB segments and how to free the deleted/unused space
above/below the HWM
Note 563470.1
Lob retention not changing when undo_retention is changed
Note 422826.1
How to identify LOB Segment Use PCTVERSION or RETENTION from Data Dictionary
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 40
Agenda
Transaktionsmanagement
„Snapshot too old“
UNDO
Analyse
Fetch Across Commits
Delayed Block Cleanout
SCN_ASCENDING
Verschiedenes
„Snapshot tool old“ vermeiden
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 41
Maßnahmen
Erhöhung UNDO-Retention
Vergrößerung UNDO-Tablespace
Betroffene Abfrage beschleunigen
Zeitliche Trennung Abfrage und Änderungen
Dunkle Bedrohung: SCN_ASCENDING Hint
UNDO-Retention reduzieren
ORA-1555 snapshot too old, Martin Hoermann, DOAG 2013 42
Zentrale Paderborn
Westernmauer 12 - 16
33098 Paderborn
Tel.: 05251 1063-0
Seminarzentrum Wiesbaden
Kreuzberger Ring 13
65205 Wiesbaden
Tel.: 0611 77840-00
Zentrales Fax:
0180 1 67349 0
0180 1 ORDIX 0
Weitere Geschäftsstellen
in Köln, Münster und Neu-Ulm
E-Mail: [email protected]
http://www.fanpop.com
Internet: http://www.ordix.de
Vielen Dank für Ihre Aufmerksamkeit!