Home Page for the TeradataForum
 

Archives of the TeradataForum

Message Posted: Tue, 27 Jan 2009 @ 23:06:07 GMT


     
  <Prev Next>   <<First <Prev Next> Last>>  


Subj:   Re: Concurrent change conflict on database -- try
 
From:   Darapureddy, Sudheer

Hi,

Below information is from the Teradata knowledge articles.

Queries against tables while concurrently collecting (or recollecting) statistics on those same tables can sporadically cause 3916, 3598 errors or a 3810 restart.

     *** Failure 3916 Requested information not in dictionary.
     *** Failure 3598 Concurrent change conflict on database -- try again.
     *** Failure 3810 Column/Parameter 'xxxx' does not exist.

Probable Cause:

This problem can be seen while COLLECT STATISTICS is going on in one session, SELECT queries are running in other session.

The problem as mentioned in DR113801 is because of the way COLLECT STATS is handled. A sample COLLECT STATS explain is shown below.

Explain :

     COLLECT STATISTICS ON A_REP_CONTROLDB.TRIGGERSREADYTOSEND
     INDEX(TRIGNAME);


     Explanation
     ------------------------------------
Explanation
--------------------------------------------------
 
  1)First, we lock A_REP_CONTROLDB.TRIGGERSREADYTOSEND for access.  
  2)Next, we do a COLLECT STATISTICS step from A_REP_CONTROLDB.TRIGGERSREADYTOSEND by way of an all-rows scan into Spool 1 (all_amps), which is built locally on the AMPs.  
  3)Then we save the UPDATED STATISTICS from Spool 1 (Last Use) into Spool 3, which is built locally on the AMP derived from DBC.TVFields by way of the primary index.  
  4)We lock DBC.TVFields for write on a RowHash.  
  5)We do a single-AMP MERGE DELETE to DBC.TVFields from Spool 3 (Last Use) by way of a RowHash match scan. New updated rows are built and the result goes into Spool 4 (one-amp), which is built locally on the AMPs.  
  6)We do a single-AMP MERGE into DBC.TVFields from Spool 4 (Last Use).  
  7)We spoil the parser's dictionary cache for the table.  
  8)Finally, we send out an END TRANSACTION step to all AMPs involved in processing the request.  
  ->No rows are returned to the user as the result of statement 1.  


As can be seen above, we DELETE the column's(on which we are collecting stats) information from DBC.TVFIELDS (step 5) and then insert(MRG) the newly collected stats in step (6).

If any SQL in other session tries to resolve the column via an express request to DBC.TVFIELDS after delete in step (5) and between the insert that happens in step (6) , then it will not find an entry and, depending on the circumstances, will result in a '3916', a '3598, or a '3810' error.

Solution:

DR 114480: Sporadic 3916 Requested Information not in Dictionary while collecting statistics.

has been closed as a duplicate of:

DR 120304: Provide a general solution for the concurrency issues in parser.

DR 120304 is considered as very high risk to implement within current GCA version, this fix is not targeted to a DBS version earlier than TD 13 at this point of time.


Thanks,

Sudheer.



     
  <Prev Next>   <<First <Prev Next> Last>>  
 
 
 
 
 
 
 
 
  
  Top Home Privacy Feedback  
 
 
Copyright for the TeradataForum (TDATA-L), Manta BlueSky    
Copyright 2016 - All Rights Reserved    
Last Modified: 27 Dec 2016