ITL Waits and row migration.

Oracle Version 11.2.0.3 PSU3
OS: SLES11 GA 64 bit
We had an issue with ITL waits on a specific table. In test this resulted in a deadlock so as a fix we rebuilt the table with initrans 8 and pctfree 75, this has improved the situation as we no longer have deadlocks but we have had an instance of high waits for ITL slots. Our development team assure us that a maximum of 6 transactions should be active on the table in question at any given time so we should not see any waits at all. As a bonus feature the table in question is initially loaded with just the primary key columns and the rest of the data (60 columns in all) is filled in over time which can cause considerable row migration to occur has anyone else encountered an issue of this type? Does row migration use additional ITL slots? I am attempting to replicate this in a development environment but so far can not get a replication of the problem.

rp0428 wrote:
Row migration can consume excess ITL entries - every row migrated in a single transaction will allocate an ITL slot in the target block, so if you manage to get (say) 5 rows in a block migrating in a single transaction and they all migrate to the same block you will find that you have used 5 ITL slots in that block - so you can't rule out the possibility that the migration is the cause of the ITL waits.
Can you expand on that a bit and reconcile it with what you say in the ITL entry in your Oracle Scratchpad Glossary article?
http://jonathanlewis.wordpress.com/2009/06/23/glossary/
The transaction needs to acquire only one ITL entry in the block no matter how many rows in the block it changes.
If an ITL (Interested Transaction List) entry represents 'interest' by a singlel transaction why would that single transaction need more than one entry in the block when migrating rows but not when updating existing rows?
What am I overlooking?
rp0428,
There are two possible replies to that question - the absolutely straightforward one is that I forgot to mention any special cases (the "Index Explosion" bug is another, very similar, case) when I wrote that note; the "wiggle" one is that each migration event behaves like a recursive transaction, which leaves you with one ITL entry per arriving row.
Regards
Jonathan Lewis

Similar Messages

  • Row chaining and row migration ???

    hi
    Can someone tell me what are the oprions to over come row chaining and row migration in 10g and 11g databases ???
    thanx in advance.
    s

    WIP  wrote:
    hi
    Can someone tell me what are the oprions to over come row chaining and row migration in 10g and 11g databases ???
    thanx in advance.
    sHi.Chained row is a row that is too large to fit into a single database data block. row migration mean is update some rows would cause it to not fit on the block anymore,then these migrates to new address.For more information see below links
    http://blog.tanelpoder.com/2009/11/04/detect-chained-and-migrated-rows-in-oracle/
    http://www.akadia.com/services/ora_chained_rows.html

  • Row chaining and Row migrate

    Hi,
    how to do the difference between row chaining and row migrate.
    In what table may i see the difference.

    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:4423420997870

  • Row chaining and row migration in Oracle 10g R2/11g R2

    Hi,
    Due to the business rule changes, one of the numeric column in a large table (20 millions rows) will be expanded from number(8) to number(10). Also, the values of this column of each row will be updated from 6 digits to 10 digits. All the indexes that use this column will be dropped and recreated after update. I would like to know if there is any row chaining or row migration issue in Oracle 10g R2 /11g R2.
    Thanks for your help

    neemin wrote:
    Hi,
    Due to the business rule changes, one of the numeric column in a large table (20 millions rows) will be expanded from number(8) to number(10). Also, the values of this column of each row will be updated from 6 digits to 10 digits. All the indexes that use this column will be dropped and recreated after update. I would like to know if there is any row chaining or row migration issue in Oracle 10g R2 /11g R2.
    Thanks for your helpIt depends.
    what you do observe after TESTING against the Development DB?

  • ITL waits

    Hi ,
    Was going through the MS Doc TX Transaction locks - Example wait scenarios (Doc ID 62354.1)
    In that under Waits due to Insufficient 'ITL' slots in the block i executed the query it shows a index with high value for ITL waits
    SQL>
    SELECT t.OWNER, t.OBJECT_NAME, t.OBJECT_TYPE, t.STATISTIC_NAME, t.VALUE
         FROM v$segment_statistics t
         WHERE t.STATISTIC_NAME = 'ITL waits'
         AND t.VALUE > 0;
    OWNER      OBJECT_NAME                    OBJECT_TYPE        STATISTIC_NAME                                                        VALUE
    APPLSYS    FND_LOGINS_U1                  INDEX              ITL waits                                                                38Is that initrans of this index has to be increased?? And also i increased the value of initrans of index from 10 to 30 and then executed the query again. It shows the same value? How do i verify if the ITL waits on this segment is resolved or not?
    baskar.l

    Hi,
    Got it from MS Doc How To Modify The Physical Attribute INITRANS For An Existing Table Or Index? (Doc ID 549074.1) as we need to rebuild the index if we want the existing blocks to change. As far table concern we need re-organize it.
    baskar.l

  • Buffer busy waits and chained rows

    Hi,
    I've a db with many buffer busy waits events.
    This is caused by the application that run on it and many tablespaces that are in MSSM.
    Many tables suffers of chained rows.
    My question is, may chained rows create further impact on buffer busy waits?
    Thanks.

    HI Stefan,
    > Caused by the application due to what? High amount of INSERTs or what? Insufficient MSSM settings by database object creation? Bad physical database design (e.g. > 255 columns, column types)?
    Applications and jobs perform every 30s DELETE, UPDATE and INSERT. Tablespace are in Manual Segment Space Management, not in AUTO (i think wrong database design).
    >It depends. Do you mean intra-block row chaining or row chaining across various blocks? What kind of access path? Do you really experience chained
    rows and not migrated rows (it is mixed up a lot of times)?
    Migrated rows, row chaining across various block, caused by frequently update and delete. Migrated resolved with alter table move or exp/imp.
    Thank you

  • What is bad # for 'Space Allocated/Used" and 'ITL Waits' in V$SEGMENT_STATS

    I ran a query against the V$SEGMENT_STATISTICS view today and got some possibly disturbing numbers. Can some one let me know if they are bad or if I just reading to much into them.
    DB has been up since 1/10/2011 so they represent the stats since then. DB size is 3TB
    OBJECT_NAME     OBJECT_TYPE     STATISTIC_NAME     VALUE
    XXPK0EMIANCE     INDEX     space allocated     27,246,198,784
    ITEMINTANCE     TABLE     space allocated     22,228,762,624
    LITEMINSTANCE     TABLE     space used     19,497,901,889
    XXPK0TEMINSTANCE     INDEX     space used     17,431,957,592
    TTINGCORE     TABLE     space allocated     8,724,152,320
    XXPK0IANCE     INDEX     space allocated     6,912,212,992
    SKISTANCE     TABLE     space allocated     4,697,620,480
    IIXCNSTANCE     TABLE     space allocated     4,697,620,480
    on the XXPK0EMIANCE index the inital extent is 64k
    XXPK0MINSTANCE     INDEX     ITL waits     1,123
    XXIEKILSTANCE     INDEX     ITL waits     467
    XXPKLINSTANCE     INDEX     ITL waits     463
    XXPKCE     INDEX     ITL waits     338
    XXIE3ENT     INDEX     ITL waits     237
    If these are bad do they impact performance? My understanding is that being wait states, things stop until they are resolved. Is that true.
    Also these looked high, are they?
    LATION_PK     INDEX     logical reads     242,212,503,104
    XXAK1STSCORE     INDEX     logical reads     117,542,351,984
    XXPK0TSTANCE     INDEX     logical reads     113,532,240,160
    TCORE     TABLE     db block changes 1,913,902,176
    SDENT     TABLE     physical reads     72,161,312
    XXPK0PDUCT     INDEX     segment scans     35,268,027
    ESTSORE     TABLE     buffer busy waits     2,604,947
    XXPK0SUCORE     INDEX     buffer busy waits     119,007
    XXPK0INSTANCE     INDEX     row lock waits     63,810
    XXPK0EMINSTANCE     INDEX row lock waits     58,129
    XXPK0NSTANCE     INDEX     row lock waits     57,776
    XXIE2DDSTANCE     INDEX     row lock waits     54,788
    XXPK0DDDSTSCORE     INDEX row lock waits     49,167
    Am i just reading too much into this? I am not a DBA, our DBA is too busy doing data changes and such to spent time looking at these stuff. I was tasked to try to find out why our DB is so slow.

    Statistics on waits and reads are cumulative since the last database instance startup --- which was more than 4 months ago.
    So :
    XXPK0MINSTANCE INDEX ITL waits 1,1231,123 waits in 4+ months isn't bad.
    Reading such statistics without reference to the duration is utterly meaningless.
    Those 1,123 waits could have been 10 waits a day @1 every 2 hours.
    OR those 1,123 waits could have occurred between 01:00 and 01:30 on 03-May-2011.
    We have no way of knowing which is the case.
    Hemant K Chitale

  • Got an iMac and used migration tool (PC to Mac). When I try iTunes i get The file "iTunes Library.itl" cannot be read because it was created by a newer version.... download iTunes now? but i have it already???

    I just got an iMac and used migration tool (PC to Mac). When I try to then open iTunes i get the message
    <The file "iTunes Library.itl" cannot be read because it was created by a newer version.... download iTunes now?>
    ...but i have it already downloaded, when I press download now, it tells me I already have it, but it still won't let me open iTunes???

    Unless you've tried to install an older version of iTunes that message likely indicates a corrupt library file. See Empty/corrupt library after upgrade/crash...
    tt2

  • How row migration get eliminated by export and import the table.

    Hi ,
    Please let me know,how row migration get eliminated by export and import the table.
    Another method,deleting migrated rows and inserting those rows from copied table,
    i think the concept behind this method is,inserting these rows into new block.
    pls correct me if i am wrong.
    Thanks,
    Kumar.

    Hi!
    You can also use ALTER TABLE MOVE command, or if you are on 9i you can use DBMS_REDEFINITION package.
    If you have a maintainance window the easiest way would be to use alter table move.
    Regards,
    PP

  • I have a new Mac and I migrated mi old one to this. I can not open iTunes because a message stating "iTunes Library.itl" can not be opened because it was created in more recent version of iTunes. There is not a new version to download.

    I have a new Mac and I migrated mi old one to this. I can not open iTunes because a message stating "iTunes Library.itl" can not be opened because it was created in more recent version of iTunes. There is not a new version to download. How can I fix this?                             

    Go to iTunes > about iTunes.  What version are you running?  If necessary, hold down the option key while starting iTunes and create a new, test library so it will start.

  • 2012 R2 Cluster and Live Migration

    6 Node Cluster with Server 2012 R2, all VM's are Server 2012 R2
    4 Fiber SAN's
    Moving and Live Migration worked fine in FailOver Cluster Manager
    But this time we were trying do it with SCVMM 2012 R2 and just move one VM (Gen2)
    Of course it failed at 99%
    Error (12711)
    VMM cannot complete the WMI operation on the server (whatever) because of an error: [MSCluster_Resource.Name=&quot;SCVMM VMHost&quot;] The cluster resource could not be found.
    The cluster resource could not be found (0x138F)
    Recommended Action
    Resolve the issue and then try the operation again.
    How do I fix this? the VM is still running. The two vhdx files it was moving are smaller then orginal's , but it change the configuration file to point to new ones, which are bad.
    it says I can Repair it... Redo or Undo....of course neither of those options work.
    Wait for the object to be updated automatically by the next periodic Live migrate storage of virtual machine vmhost from whatever to whatever job.
    ID: 1708
    Cluster has no errors, SAN's have no errors, CSV have no errors. the machine running scvmm is VM running on the cluster

    How did you create this VM? if this is created outside of VMM, I recommend doing a manual refresh of the VM first to ensure that VMM can read its attributes. Then retry the operation.
    Btw, are the VMs using diff disk? any checkpoints associated with them?
    Kristian (Virtualization and some coffee: http://kristiannese.blogspot.com )

  • How to ensure the link between iTunes Library itl file and Music Folder residing on a different drive?

    I'm planning to move my Music Library from a PC to Mac.  Both running iTunes 10.  
    On the PC (Win XP) the iTues folder did not move from My Music folder when music (and videos, books, etc) were moved to a different drive on the PC.  iTunes runs ok, but the itl, xml and itdb files remain in the My Music Folder.
    When I transfer the music (folder and all other contents) to the Mac, and then the itl, xml, itdb files into the new Music>iTunes folder will they still be "linked" or will I need to rebuild the itl from scratch?
    Is there a way to ensure that the itl and music files themselves transfer to the Mac and remain linked once iTunes is launched?
    thanks

    Making a split library portable
    Here are typical layouts for the iTunes folders:
    If the iTunes folder contains the iTunes Media folder as above then the iTunes folder can be moved to a new location/drive/computer without breaking the file references. Although it is possible to migrate a split library from one system to another, the media folder must end up at precisely the same drive letter & path on the target system. This is feasible when moving between Windows systems, possibly feasible moving between Macs, but definitely impossible when moving PC to Mac or vice versa.
    Assume the media folder on the external drive is called ..\<Parent>\<Media> and the library files are in the usual place of <Profile's Music>\iTunes.
    You need to copy the library files and Album Artwork folder into the <Parent> folder, then use the hold-down-shift-when-starting-iTunes method (hold down option for Macs) to open the copy of the database that you've made in the <Parent> folder.
    Once this library has been opened and tested there are a few changes you can make so that it conforms to the standard layout. When iTunes opens it uses the folder name where the database is located as the window name so if the <Parent> folder isn't called iTunes then neither will be the main iTunes window. Close iTunes, rename <Parent> as iTunes and use the hold-down-shift-when-starting-iTunes method to open iTunes again. If <Parent> is the root of the drive, make a new folder called iTunes and move the library files, Album Artwork & <Media> folders into the new iTunes folder instead. Start iTunes, then check under Edit > Preferences > Advanced that the media folder location has been correctly updated and edit if necessary.
    You may also want to correct the media folder name. Having applied the fix above, if it was necessary, close iTunes then rename the <Media> folder as iTunes Media. Start iTunes and again check under Edit > Preferences > Advanced that the media folder location has been correctly updated and edit if necessary.
    Congratulations, your library is now fully portable and you can connect your external drive to any computer running the same build of iTunes, Mac or PC, in order to work with it. Don't forget to deauthorise the old computer if you won't need to access protected content on it again.
    tt2

  • Reg: Row migration-

    Hi Experts,
    I got a doubt regarding the concept of 'Row Migration'.
    From http://www.akadia.com/services/ora_chained_rows.html :
    Migrate a row when an update to that row would cause it to not fit on the block anymore (with all of the other data that exists there currently)
    But I'm getting confused is -- all the blocks will be of same size right (say 4 kb). Then migrating a row(say of 8 Kb) to another block (again of same 4 Kb), how 'll that help?
    I can understand the concept of 'Row Chaining' where data is shared/divided into multiple blocks.
    A nice article by Hans Forbich (but still not getting Row migration properly) -- https://forums.oracle.com/message/1806755#1806755
    Am I getting the concept of 'Migration' wrongly? Please rectify me.
    Help much appreciated.
    Thanks,
    Ranit

    ranitB wrote:
    Yes sure I'll do the tests, John. Thanks and much appreciated.
    Could you please just clarify if my above inference is correct?
    -- Ranit
    Did you read your own doc reference?
    Row Chaining
    A row is too large to fit into a single database block
    So now how does that relate to what YOU said above:
    Row chaining -- occurs only when an Insert happens
    Ask yourself: which of these operations (insert, update, delete) can make a row 'too large to fit into a single database block'?

  • Row migration & chaining

    Hi,
    we have a database which has above 600 tables(all are same schema).Everyday DML statements happen Nearly 400 tables.How to find the row migration & chaining by A SINGLE QUERY.
    I would like to find everyday.Is it possible without analyze?
    I know analyze command but we have to mention all the tables.

    Lubiez Jean-Valentin wrote:
    However, the columns CHAIN_CNT and NUM_ROWS are populated by ANALYZE statement or DBMS_STATS package.Are you sure that DBMS_STATS can be used to populate CHAIN_CNT? A default DBMS_STATS.GATHER_SCHEMA_STATS does not populate the CHAIN_CNT, for example. And I'm not aware of any way to populate that without using ANALYZE.
    user3266490 - Why do you want to check this sort of thing on a daily basis? That seems exceptionally odd. Even checking it quarterly would seem like overkill. Are you actually having problems with excessive migrated rows (you can't fix chained rows, so those are basically irrelevant)? If you are, then whatever tables are having problems probably just need to be rebuilt with a more appropriate PCTFREE setting.
    Justin

  • Synchronize work from multiple threads using wait() and notifyAll() help

    Hello folks,
    (Sorry for my bad english)
    My current project handles multiple access requests to a shared collection from multiple threads originating from different classess and methods. Therefor I need to keep track of the order in which the Threads access that collection. I wrote a sort of Buffer class that has a static instance entry which initiate a new Instance of my Buffer class, attributes the instance a cue number and return the instance to the caller Thread.(Just like when you go to a supermarket and draw a number to wait to get served at the cheese counter).The callerThread then uses this instance to execute a method within the buffer class. Inside the buffer class method, I want to set a while loop on wait() just like this:
    while(currentCue != myCueState)
    wait();
    when all other prior method calls within my Buffer class are done, the loop should wake up using a notifyAll() call and check the condition "currentCue != myCueState" agen to see if its turn has come.
    I am new to the wait() and notifyAll() stuff and are therefor not sure what I am dooing wrong here: The only way this buffer class finishes all it's cues is when the caller Threads are beeing executed in the same order than they have checked in to the Buffer class. Otherwise I get some sort of dead-lock in the middle. Here is my code for the Buffer class:
    public class Buffer{
        private static int currentCue = 0;
        private static int lastCued = 0;
        private int myCueState;
        private Buffer myInstance = null;
        synchronized void doTaskOne(){      
            try{
                while(currentCue != myCueState)
                    wait();           
                //Do your task now
                System.out.println("doTaskOne got Executed: "+currentCue);
                currentCue++;
                notifyAll();
            catch(Exception a){}
        synchronized void doTaskTwo(){
             try{
                while(currentCue != myCueState)
                    wait();
                //Do your task now
                System.out.println("doTaskTwo got Executed: "+currentCue);
                currentCue++;
                notifyAll();
            catch(Exception a){}
        synchronized void doTaskThree(){
            try{
                while(currentCue != myCueState)
                    wait();          
                //Do your task now
                System.out.println("doTaskThree got Executed: "+currentCue);
                currentCue++; 
                notifyAll();
            catch(Exception a){}
        synchronized Object getSomething(){
            try{                   
                while(currentCue != myCueState)
                    wait();           
                //Do your task now
                System.out.println("getSomething got Executed");
                currentCue++;
                notifyAll();
            catch(Exception a){}
            return "something";
        //Access the buffer class through a single static synchronized instance and draw a turn number
        public synchronized Buffer instance(){
            myInstance = new Buffer();
            myInstance.setMyCueState();
            return myInstance;
        private void setMyCueState(){
             myCueState = lastCued;
             lastCued++;
    }and here for the Test class I have coded to test this:
    public class TestBuffer{
         private Buffer accessOne;
         private Buffer accessTwo;
         private Buffer accessThree;
         private Buffer accessFour;
         public TestBuffer(){
                    //Instantiate different instances from Bufferclass and draw a number
              accessThree = new Buffer().instance();
              accessOne = new Buffer().instance();
              accessTwo = new Buffer().instance();          
              accessFour = new Buffer().instance();
              Thread one = new Thread(){
                   public void run(){
                        accessOne.doTaskOne();
              Thread two = new Thread(){
                   public void run(){
                        accessTwo.doTaskTwo();
              Thread three = new Thread(){
                   public void run(){
                        accessThree.doTaskThree();
              Thread four = new Thread(){
                   public void run(){
                        accessFour.getSomething();
              try{               
                   one.start();                    
                   two.start();
                   three.start();     
                   four.start();                         
              catch(Exception f){}
         public static void main(String args[]){
              TestBuffer myTest = new TestBuffer();
    }What am I doing wrong here??
    Maby this is not how I should use the notifyAll() method, but how then?
    Please give me a solution!
    Thanks

    Ok, so if I get you guys right, the following should do it:
    public class Buffer{
        private static Object sharedLock = new Object();
        public void doTaskOne(){      
              synchronized(sharedLock)  {
                System.out.println("doTaskOne got Executed: ");
        public void doTaskTwo(){
             synchronized(sharedLock)  {
                System.out.println("doTaskTwo got Executed: ");
        public void doTaskThree(){
             synchronized(sharedLock)  {
                  System.out.println("doTaskThree got Executed: ");
        public Object getSomething(){
            synchronized(sharedLock)  {
                System.out.println("getSomething got Executed");
                return "something";
    }Lets say that each method accesses the same ressources (in this case a table model) to retreave values, delete rows and set some existing values vith new values and all this 20-30 times a minute, all processing will stay synchronised and collision is not possible?
    And lets say I would update the Table model directly from the buffer Class using MyTableModel.instance().setValueAt() or watever methods I implemented on my Table model, could I safely do that using "SwingUtilities.invokeLater();" from my BufferClass just like this:
    public void doTaskThree(){
            synchronized(sharedLock)  {
                   Runnable runme = new Runnable(){
                         public void run(){
                                MyTableModel.instance().setValueAt("abc", 5,5);  
                   SwingUtilities.invokeLater(runme);
    }Thanks in advance for your help guys!

Maybe you are looking for

  • Rip CDs to a different location than the iTunes music folder?

    I just got my first iPod about two weeks ago: a 32 GB Touch. It's awesome. I started ripping a ton of music to my PowerBook G4's 80 GB hard drive. Now it's running out of space. I was thinking of buying a USB external drive to store all the music I w

  • Code Generation Using Annotation Processing

    I'm trying to figure out how to do something like thus: Given this source file with the following custom annotation: @Composite(interfaces=Mammal.class) public class Dog implements IComposite };I want to create an annotation processor that inserts a

  • Superdrive, external DVD drive, ext HD won't mount

    Blank & commercial discs are rejected by the internal Superdrive and an external LaCie DVDRW. In addition two USB & one firewire ext HD won't mount. I have fixed permissions, zapped PRAM and run TechTool Pro V 4 and Disk Utility The above are recogni

  • Why do I get a Kernel panic when moving files to my desktop?

    I am running Lion10.7.4. I have started to notice an annoying problem when I copy files to my deskdop from an email attachment or external drive. As I am moving them I get a split second "checkerboard" pattern on my screen. Any thoughts from anyone a

  • Easy DMS cannot use additional data while creating a document

    Hello, We have installed sap easy dms 7.0 We have a problem while creating a new document with SAP Easy DMS. On the DIR tab the additional data cannot be used. Do I have to change a registry setting? We already have defined classes and their features