![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I was reading about ITL mechanism and it was mentioned that Oracle creates ITL entry for *every* updated row in a block. So if one transaction updates 10 rows in the same block Oracle will create 10 transaction entries (ITL entries). Is it really true? Let's say we have a table with very short row, just one column CHAR(1). In this case there could be more than 1000 rows in 8K block. So to update all rows in this block Oracle will need to create more than 1000 transaction entries in the same block. As each entry is 24 bytes there won'be be enough space to do that. However test shows that update works just fine. |
#3
| |||
| |||
|
#4
| |||
| |||
|
|
Thanks. Let's say there are 100 rows in a block and 50 got updated by one transaction. Then single ITL entry should contain information about 50 rows. How do you fit information about 50 rows in 24 bytes? http://avdeo.com/2008/06/16/interest...tion-list-itl/ Quote: This variable portion of the data block contains slots for transactions to put the locking information. When a row in the block is locked for the first time, the transaction places a lock in one of the slots with the rowid of the row that is locked. In other words, the transaction makes it known that it is interested in the row (hence the name “Interested Transaction List”). When the same transaction or another one locks another row, the information is stored in another slot, and so on. |
#5
| |||
| |||
|
#6
| |||
| |||
|
#7
| |||
| |||
|
|
Thanks, I got it: - There is one ITL engtry per transaction. - Every row has lock byte that points to ITL entry of transaction that locked this row. Simple. Should be in the Concepts manual. |
![]() |
| Thread Tools | |
| Display Modes | |
| |