Professional Documents
Culture Documents
Basic Explanation
1. When you drop or truncate a table, the file level deallocation SCN keeps track
of the time of the last drop/truncate operation, and that is compared to the
retention target. Blocks are not written to flashback logs, unless they are
reused.
2. If the retention target is over and no further activity happened on the blocks
affected by a drop or truncate table, there will be no overhead for subsequent
inserts on the table or reuse of the blocks of a dropped table.
3. If immediately after the truncate we run a batch that inserts large amounts of
data into the table all reused blocks need to be written to the flashback logs
before being reformatted with the new data, that has an overhead that may
reach levels near 30% depending on the volume of data that needs to be
logged and the hardware performance.
4. Drop table has the same effect for every block that needs to be reused.
1. Why inserts after a truncate incur in high overhead when flashback database
is enabled, and why this is solved after the time specified on
DB_FLASHBACK_RETENTION_TARGET is met?
That overhead can be avoided if the insert is run only once the
DB_FLASHBACK_RETENTION_TARGET is met. For instance if the
parameter is set to 2 hours and we have a batch that truncates and insert
data on the same tables, we can setup the job to truncate, wait for 2 hours
and then execute the insert.
The same is valid for 11gR1 where the single instance flashback "block new"
optimization does not kick in until one inserts data into space that was
deallocated (including truncated) at least flashback retention time ago.
2. Can explain "why" direct load and lob inserts impact performance?
Impact of Truncate or Drop Table
When Flashback Database is Enabled
When flashback is enabled, Oracle will need to read the block, if required to
restore a dropped or truncated table, so that we can log it in flashback logs.
So in this case there will be extra block reads. As a result, the overhead will
be higher.
Most database changes are done via SQL update statements. For an update,
Oracle needs to read the block before updating it. So it does not take much
effort to write the block image that is already in memory to flashback logs, the
log we use for flashback.
For direct load and lob insert, without flashback database enabled, Oracle
does not read the block before loading the block.
3. Which is the difference between 10g and 11g that makes insert batches to
work better after the DB_FLASHBACK_RETENTION_TARGET was met?
4. Workaround for enabling fast start failover on busy systems is to let the
standby format the flashback logs then switchover to it and format the
flashback logs on the new standby, does this work on RAC also?
Yes. This works. You can enable flashback on a standby first so that the
standby will create and format all or most of the flashback logs needed.