![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
On thing is still puzzling me: to prevent an ORA-01555 due to delayed block cleanout, in case of the rollback transaction slot being overwritten, in Note 40689.1 on the Oracle Support site the following is recommended: |
#12
| |||
| |||
|
|
If you check the session statistics of your session running the query after committing the direct-path insert you'll notice that the first time the session accesses a block from the table it will perform a block cleanout and generate redo for that single block, from then on it will re-use the "cached" commit SCN for accessing / processing the remaining blocks. The corresponding statistics are: cleanouts only - consistent read gets (increases by one after first access in the session) Commit SCN cached (increases depending on the number of blocks accessed) That is also the explanation why you don't see a difference in the amount of redo generated if you use a larger table - it will still do a cleanout of a single block to determine the commit SCN. But you're right that my explanation above was not really sound regarding direct-path inserts and cleanout since running a query afterwards does not really clean out every block. |
#13
| |||
| |||
|
|
I think that's you *want to tell me in *your reply, or am I wrong? |
#14
| |||
| |||
|
|
On 18 Apr., 09:59, Donatello Settembrino donatello.settembr... (AT) gmail (DOT) com> wrote: I think that's you *want to tell me in *your reply, or am I wrong? Yes, quite exactly. You might want to check your test case setup - your table and data definition very likely causes chained rows and I wonder if this has an impact on the number of dirty blocks found. Randolf |
#15
| |||
| |||
|
|
I do not think that in my tests are chained rows. |
#16
| |||
| |||
|
|
On Apr 19, 1:08*pm, Donatello Settembrino donatello.settembr... (AT) gmail (DOT) com> wrote: I do not think that in my tests are chained rows. Thanks, I assumed a 8KB default block size but you seem to have 16KB according to the output, given the default PCTFREE of 10 (I don't see any non-default setting in your CREATE TABLE statement) your 4 times 4000 bytes must be very close to the limit of free space available in a 16KB block... Randolf |
#17
| |||
| |||
|
|
Exactly, that's right |
#18
| |||
| |||
|
|
On Apr 19, 2:51*pm, Donatello Settembrino donatello.settembr... (AT) gmail (DOT) com> wrote: Exactly, that's right By the way - we digress - my comment about PCTFREE is irrelevant in this case since Oracle will stuff this row into a single block no matter what the PCTFREE setting is as long as the row fits into the block. And: You don't have chained rows but your test case is flawed: A select count(*) never reports "table fetch continued row" because it does not have to visit the columns but only accesses the row entries in the row directory. So even with chained rows your test will not report any "table fetch continued row" statistics. You would need to count/access a column that is part of the "chained" row pieces - and it would have to be nullable, otherwise recent versions of Oracle will transform a count(col) to a count(*). Randolf |
![]() |
| Thread Tools | |
| Display Modes | |
| |