RE: PCTFREE and ITL space on high insert table
From: Jonathan Lewis <jonathan_at_jlcomp.demon.co.uk>
Date: Wed, 4 May 2016 09:35:51 +0000
Message-ID: <CE70217733273F49A8A162EE074F64D9282D12B1_at_EXMBX01.thus.corp>
Date: Wed, 4 May 2016 09:35:51 +0000
Message-ID: <CE70217733273F49A8A162EE074F64D9282D12B1_at_EXMBX01.thus.corp>
Stefan, The three ITL slots appears for "create table as select", and "alter table move". If you create an empty table and insert into it you get 2 ITL slots per block. I think this appeared in 10g at the same time that MAXTRANs ceased to have any effect. Regards Jonathan Lewis http://jonathanlewis.wordpress.com _at_jloracle ________________________________________ From: oracle-l-bounce_at_freelists.org [oracle-l-bounce_at_freelists.org] on behalf of Stefan Koehler [contact_at_soocs.de] Sent: 04 May 2016 09:49 To: napacunningham_at_gmail.com; oracle-l_at_freelists org Subject: Re: PCTFREE and ITL space on high insert table Hello Michael, just in addition to Jonathan's reply. You will get 3 ITL slots for tables (at least since 12.1.0.1), even if you do not specify an ITL value. Here is a block dump of a short demo on 12.1.0.1, that i did for verification as i was not sure when this change was introduced. TEST_at_T12DB:186> select INI_TRANS from user_tab_partitions; INI_TRANS ---------- 1 1 1 Block dump … Itl Xid Uba Flag Lck Scn/Fsc 0x01 0xffff.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.001ece8b 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 0x03 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 … > I may have misunderstood what this means, but if PCTFREE 0 fills the block will there still be enough room in the block header for the ITL lists? Each ITL slot needs 24 bytes. PCTFREE 0 means that INSERTs can fully fill up the block, but if parallel INSERTs are happening and there are more than 24 bytes (+ data) left you can still allocate more ITL slots if needed. > I am moving the table partitions to another tablespace and am wondering if I can change to PCTFREE 0. My concern is if there will be enough space in > the block header for the required number of ITL entries. How many of these 400 INSERTs per second in peak are really parallel? I mean in theory you can still have no parallel INSERTs at all if each INSERT is spread equally over 1 sec and it takes only 2 ms. Just dump some blocks for verification and check how many ITL slots are allocated. Best Regards Stefan Koehler Freelance Oracle performance consultant and researcher Homepage: http://www.soocs.de Twitter: _at_OracleSK > Michael Cunningham <napacunningham_at_gmail.com> hat am 4. Mai 2016 um 01:17 geschrieben: > > Hello list, > > I have a table that receives a relatively high number of INSERTs (no updates or deletes). They come in at a peak rate of about 400 per second on a > partitioned table with local indexes. Only the last partition receives inserts and there is a total of 2B rows per partition. My question is for > both the PCTFREE on both table and index. > > I am moving the table partitions to another tablespace and am wondering if I can change to PCTFREE 0. My concern is if there will be enough space > in the block header for the required number of ITL entries. > > The source for this question is from Jonathan Lewis' book Oracle Core on page 37 where it says "but the ITL in any block can grow dynamically if it > needs to, provided there is enough free space available in the block". I may have misunderstood what this means, but if PCTFREE 0 fills the block > will there still be enough room in the block header for the ITL lists? > > Thanks, > -- > Michael Cunningham -- http://www.freelists.org/webpage/oracle-l --http://www.freelists.org/webpage/oracle-l Received on Wed May 04 2016 - 11:35:51 CEST