Calculating Statistics on DR$ tables

I have several DR$ tables in my database. I think they come because I am using text indexes. This is third party application. When I run dbms_stats to do statistics on entire schema, it never calculates statistics on DR$ tables. Somewhere I had read that Oracle uses rule base optimizer , yes rule based optimizer for these tables. I am on Oracle 10.2.0.4. When I rebuild text indexes, it never computes statistics on these tables as well.
What is stage that some of my queries involving text indexes run slow that database control (database tuning advisor) is recommending run statistics on these tables!!! Can someone provide their thoughts on it?

I have several DR$ tables in my database. I think they come because I am using text indexes. This is third party application. When I run dbms_stats to do statistics on entire schema, it never calculates statistics on DR$ tables. Somewhere I had read that Oracle uses rule base optimizer , yes rule based optimizer for these tables. I am on Oracle 10.2.0.4. When I rebuild text indexes, it never computes statistics on these tables as well.
What is stage that some of my queries involving text indexes run slow that database control (database tuning advisor) is recommending run statistics on these tables!!! Can someone provide their thoughts on it?
You may want to review 'Performance Tuning' chapter in the Text Application Developer's Guide.
http://docs.oracle.com/cd/B12037_01/text.101/b10729/aoptim.htm
It discusses those tables and how to optimize the stats.
It will also tell you this:
7.1.1 Collecting Statistics
By default, Oracle Text uses the cost-based optimizer to determine the best execution plan for a query. To allow the optimizer to better estimate costs, you can calculate the statistics on the table you query. To do so, issue the following statement:
ANALYZE TABLE <table_name> COMPUTE STATISTICS;   
Did you note that is says 'cost-based optimizer'?
As for those DR$ tables:
7.7.7 What tables are involved in queries?
Answer: All queries look at the index token table. Its name has the form DR$indexname$I. This contains the list of tokens (column TOKEN_TEXT) and the information about the row and word positions where the token occurs (column TOKEN_INFO).
The row information is stored as internal DOCID values. These must be translated into external ROWID values. The table used for this depends on the type of lookup: For functional lookups, the $K table, DR$indexname$K, is used. This is a simple Index Organized Table (IOT) which contains a row for each DOCID/ROWID pair.
For indexed lookups, the $R table, DR$indexname$R, is used. This holds the complete list of ROWIDs in a BLOB column.
Hence we can easily find out whether a functional or indexed lookup is being used by examining a SQL trace, and looking for the $K or $R tables.

Similar Messages

  • How can i pass calculated value to internal table

    Hi
    i have to pass calculated value into internal table
    below field are coming from database view and i' m passing view data into iznew1
    fields of iznew1
                 LIFNR  LIKE EKKO-LIFNR,
                 EBELN  LIKE EKKO-EBELN,
                 VGABE  LIKE EKBE-VGABE,
                 EBELP  LIKE EKBE-EBELP,
                 BELNR  LIKE EKBE-BELNR,
                 MATNR  LIKE EKPO-MATNR,
                 TXZ01  LIKE EKPO-TXZ01,
            PS_PSP_PNR  LIKE EKKN-PS_PSP_PNR,
                 KOSTL  LIKE EKKN-KOSTL,
                 NAME1  LIKE LFA1-NAME1,
                 NAME2  LIKE LFA1-NAME2,
                 WERKS  LIKE EKPO-WERKS,
                 NETWR  LIKE EKPO-NETWR,
                 KNUMV  LIKE EKKO-KNUMV,
                 GJAHR  LIKE EKBE-GJAHR,
    and now i want to pass
    one field ED1  which i has calculated separatly and i want to pass this value into iznew1
    but error is coming that iznew1 is a table with out header line  has no component like ED1.
    so how can i pass calculated value to internal table iznew1,

    When you declare your internal table , make an addtion occurs 0
    eg . data : begin of iznew occurs 0 ,
                    fields ...
       add the field here ed1.
               end of iznew.
    now when you are calculating the value of ed1,
    you can pass the corresponding value of  ed1 and modify table iznew.
    eg
    loop at iznew.
    iznew-ed1 = ed1.
    modify iznew.
    endloop.

  • Can you have a calculated column in a table not a view?

    We have a table which contains a series of rows
    Key   Effective Date   Value
    1       10/Feb/2006     123
    1       23/Oct/2006      456
    ...We have a requirement to store an indicator that tells us which row is the most current and what the end date of the preceding row was so that we get something along the lines of:
    Key   Effective Date   Value   Status         End Date
    1       10/Feb/2006     123      HISTORY    22/Oct/2006
    1       23/Oct/2006      456     CURRENT   NULL
    ...I can produce this result quite easily using the analytic function LEAD. My question is, is the answer to this problem to create a view over the table that includes the analytic function or is it possible to define a calculated column in a table that would populate/maintain this vale as part of a table definition?
    And as I finish writing this I feel I've answered my own question but hey, there's no harm in asking how others have handled this kind of situation.
    Cheers
    Richard

    My bias would be to create a view that did the calculation.
    In theory, you could add those additional columns to a table and maintain the data via a set of triggers, but that would be substantially more complicated than the alternatives for little or no benefit.
    A third option would be a materialized view. That might be easier to deal with if you want to have different indexing strategies for current and historical records or if the historical data is queried often enough and updated infrequently enough that it ends up being cheaper to do the calculation once during the update rather than every time the query is run.
    A fourth option would be to use stored procedures to maintain the data and have that stored procedure expire the current row and add the new row.
    Finally, you might consider version-enabling your table using Workspace Manager rather than writing your own code since Oracle has already written all this code for you.
    Justin

  • How to Show Total Calculation in Footer of Table

    Hi everyone, is it possible to show total calculation in footer of table in webdynpro ? For the calculation, I think i can handle it because many thread in forum and weblog discuss it but for show it in footer of table , i can't find.
    Display
    A
    B
    C
    D
    | ____Total | XX |  --> XX shows total calculation for column D
    If this is not possible, how to trick it ? Thank you
    null

    Hi,
    Even i had the same requirement once, but as this is not possible i.e displaying the total as the footeer of the table.
    the other option for this is to hav a seperate table below the main table & then displaying the total in that table.
    You can collect the value of each cell of column D in an integer variable at the time of displaying the data in the table.
    A | B | C | D |
    1
    2
    3
    for(int i = 0;i<node.lenght();i++)
    int tot = wdcontext.element
    now at the end you can create the element of the node & assign this variable "tot" to that element, then add teh element to the node
    Hope it helps you.
    Regards
    Jeet

  • Disable Statistics for specific Tables

    Is it possible to disable statistics for specific tables???

    If you want to stop gathering statistics for certain tables, you would simply not call DBMS_STATS.GATHER_TABLE_STATS on those particular tables (I'm assuming that is how you are gathering statistics at the moment). The old statistics will remain around for the CBO, but they won't be updated. Is that really what you want?
    If you are currently using GATHER_SCHEMA_STATS to gather statistics, you would have to convert to calling GATHER_TABLE_STATS on each table. You'll probably want to have a table set up that lists what tables to exclude and use that in the procedure that calls GATHER_TABLE_STATS.
    Justin
    Distributed Database Consulting, Inc.
    http://www.ddbcinc.com/askDDBC

  • Import Table Statistics to another table

    Hi,
    Just like to know if I can use dbms_stats.import_table_stats to import table statistics to another table?
    Scenario:
    I exported the table statistics of the table (T1) using the command below.
    exec dbms_stats.export_table_stats('<user>','T1',NULL,'<stat table>');
    PL/SQL procedure successfully completed.
    And then, I have another table named T2, T1 and T2 are identical tables. T2 does not have statistics (I intentionally did not run gather statistics). I am wondering
    if I can import table statistics from T1 to T2 using dbms_stats package?.
    For what I understand, statistics can be imported back at the same table which is T1 but not for another table using dbms_stat package. If I am wrong, anyone can correct me.
    Thanks

    hi
    just try ;-) you lose nothing probably,
    check afterwards last_analyzed value for that table in user_tables
    if something is wrong, run regular stats

  • How to disable automatic statistics collections on tables

    Hi
    I am using Oracle 10g and we have few tables which are frequently truncated and news rows added to it. Oracle automatically analyzes the table by some means which collects statistics of the table but at the wrong time(when the table is empty). This makes my query to do a full table scan rather using indexes since the statistics was collected when the table was empty.Could any one please let me know how to disable the automatic statistics collection feature of Oracle?
    Cheers
    Anantha PV

    Hi
    I am using Oracle 10g and we have few tables which
    are frequently truncated and news rows added to it.
    Oracle automatically analyzes the table by some means
    which collects statistics of the table but at the
    wrong time(when the table is empty). This makes my
    query to do a full table scan rather using indexes
    since the statistics was collected when the table was
    empty.Could any one please let me know how to disable
    the automatic statistics collection feature of
    Oracle?
    First of all I think it's important that you understand why Oracle collects statistics on these tables: Because it considers the statistics of the object to be missing or stale. So if you just disable the statistics gathering on these tables then you won't have statistics at all or outdated statistics.
    So as said by the previous posts you should gather the statistics manually yourself anyway. If you do so right after loading the data into the truncated table, you don't need to disable the automatic statistics gathering as it only processes objects that are stale or don't have statistics at all.
    If you still think that you need to disable it there are several ways to accomplish it:
    As already mentioned, for particular objects you can lock the statistics using DBMS_STATS.LOCK_TABLE_STATS, or for a complete schema using DBMS_STATS.LOCK_SCHEMA_STATS. Then these statistics won't be touched by the automatic gathering job. You still can gather statistics using the FORCE=>true option of the GATHER__STATS procedures.
    If you want to change the automatic gathering job that it only gathers statistics on objects owned by Oracle (data dictionary, AWR etc.), then you can do so by calling DBMS_STATS.SET_PARAM('AUTOSTATS_TARGET', 'ORACLE'). This is the recommended method.
    If you disable the schedule job as mentioned in the documentation by calling DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB') then no statistics at all will be gathered automatically, causing your data dictionary statistics to be become stale over time, which could lead to suboptimal performance of queries on the data dictionary.
    All this applies to Oracle 10.2, some of the features mentioned might not be available in Oracle 10.1 (as you haven't mentioned your version of 10g).
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle:
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • Using ODBC how do you identify a calculated column in a table?

    I've a calculated column in my table. Is there a way to identify that column through ODBC functions? I need to identify the  calculated column and make it read only. The function should support both SQL and Access databases. Please let me know if
    there is a way to find out this column type.

    Hello,
    You can refer to the following article which list some ODBC Scalar Functions which you can used in the T-SQL query statement.For example
    SELECT {fn TRUNCATE( 100.123456, 4)};
    -- Returns 100.123400
    Reference:http://msdn.microsoft.com/en-us/library/bb630290.aspx
    As per my understanding, there is no built in declarative support for read-only columns. You can try to create a UPDATE trigger to achieving this. Or you can create a view with derived column  from the source table. And then users cannot
    update this calculated column on the view.
    Regards,
    Fanny Liu
    Fanny Liu
    TechNet Community Support

  • Statistics Analysis on Tables that are often empty

    Right now I'm dealing with a user application that was originally developed in Ora10g. Recently the database was upgraded to Ora11g, and the schema and data was imported successfully.
    However, since the user started using Ora11, some of their applications have been running slower and slower. I'm just wondering if the problem could be due to statistics.
    The application has several tables which contains temporary data. Usually these tables are empty, although when a user application runs they are populated, and queried against, and then at the end the data is deleted. (Its this program that's running slower and slower.)
    I'm just wondering if the problem could be due to a problem with user statistics.
    When I look at the 'last_analyzed' field in user_tables, the date goes back to the date of last import. I know Oracle regularly updates statistics, so what I suspect is happening is that, by luck, Oracle has only been gathering statistics when the tables are empty. (And since the tables are empty, the statistics are of no help in optimizing the DB.)
    Am I on the right track?
    And if so, is there a way to automatically trigger a statistics gather job when a table gets above a certain size?
    System details:
    Oracle: 11gR2 (64 bit) Standard version
    File System: ASM (GRID infrastructure)

    Usually these tables are empty, although when a user application runs they are populated, and queried against, and then at the end the data is deletedYou have three options (and depending on how the data changes, you might find that not all temporary tables work best with the same option) :
    1. Load representative data into the temporary table, collect statistics (including any histograms that you identify as necessary) and then lock the statistics
    2. Modify the job to re-gather statistics immediately after a temporary table is populated
    3. Delete statistics and then lock the statistics and check the results (execution plan and performance) when the optimizer uses dynamic sampling
    Note : It is perfectly reasonable to create indexes on temporary tables -- provided that you DO create the correct indexes. If jobs are querying the temporary tables for the full data set (all rows) indexes are a hindrance. If there are many separate queries against the temporary table, each query retrieiving a small set of rows, an index or two may be beneficiial. Also some designs do use unique indexes to enforce uniqueness when the tables are loaded.
    Hemant K Chitale

  • Create new CBO statistics for the tables

    Dear All,
    I am facing bad performance in server.In SM50 I see that the read and delete process at table D010LINC takes
    a longer time.how to  create new CBO statistics for the tables D010TAB and D010INC.  Please suggest.
    Regards,
    Kumar

    Hi,
    I am facing problem in when save/activating  any problem ,so sap has told me to create new CBO statistics for the tables D010TAB and D010INC
    Now as you have suggest when tx db20
    Table D010LINC
    there error comes  Table D010LINC does not exist in the ABAP Dictionary
    Table D010TAB
         Statistics are current (|Changes| < 50 %)
    New Method           C
    New Sample Size
    Old Method           C                       Date                 10.03.2010
    Old Sample Size                              Time                 07:39:37
    Old Number                51,104,357         Deviation Old -> New       0  %
    New Number                51,168,679         Deviation New -> Old       0  %
    Inserted Rows                160,770         Percentage Too Old         0  %
    Changed Rows                       0         Percentage Too Old         0  %
    Deleted Rows                  96,448         Percentage Too New         0  %
    Use                  O
    Active Flag          P
    Analysis Method      C
    Sample Size
    Please suggest
    Regards,
    Kumar

  • How to Update the statistics of a table

    Dear Experts,
    I want to update the statistics of a table D010INC table.How can i update it.
    Plz provide me detailed steps.
    Regards,
    Farook.
    Edited by: farook shaik on Dec 15, 2008 1:04 PM

    check this SAP help
    http://help.sap.com/saphelp_nw04/Helpdata/EN/df/455e97747111d6b25100508b6b8a93/content.htm

  • Calculation based on Internal Table Row ID

    Hi,
    I have internal table, i want to do some calculation based on Internal table Row ID, wich will create system automaticlly and this id will uniq. I want to use this id in my program.
    So how can i do this.
    Ranveer.

    hi,
    if u want to create this id automatically,use transaction SNRO,
    or u can create t through programming too.eg. suppose field is 'id' in table 'customer'.
    select * from from customer.
    itab-id = sy-dbcnt + 1.
    modify customer from itab.
    u can use this id in calculations too,

  • How to build statistics for a table, its urgent, points will be rewarded

    Hi friends,
    I want to create a statistics for MSEG table in production server, because its not up to date.
    Total no. of entries available in table is 2,30,000.
    My O/S windows2003 (cluster)/oracle9.2/ ECC 5.
    I need a step by step procedure to build or create statistics using DB20.
    Regards,
    s.senthil kumar

    Hi stefan,
    Thanks 4 ur reply.
    I need some more clarification on db20.
    Wt are the values I have to give on following fields.
    New method and new sample size.
    anyfields or chek box I need to fill before create new statistics?
    My current screen values on following fields.
    new method = 'C'.  new sample size = '  '.
    old method  = 'C'. old sample size = '   '.
    Old Number   5,965         Deviation Old -> New   3,669
    New Number  24,834       Deviation New -> Old      97-
    Inserted Rows 0              Percentage Too Old         0
    Changed Rows  0            Percentage Too Old         0
    Deleted Rows     0           Percentage Too New         0
    Use                  A         
    Active Flag        A
    Analysis Method      C
    and history check box is marked.
    Can I run DB20 while server is running or at peak time?
    Regards,
    s.senthil kumar

  • Gathering daily statistics of a table using DBMS_STATS..!!

    Hi all,
    Can please somebody help me for how to collect daily statistics of a table..!!
    executing the DBMS_stats is fine but when i assign as a job using OEM the job never starts. It just shows the status as job submitted but never executes..
    Is there any other way to execute the DBMS_STATS daily...??

    In 10g, it is executed daily at 22:00 by default.
    Otherwise, you can execute something like
    begin
    dbms_job.isubmit(job       => 1,
                     what      => 'BEGIN
    DBMS_STATS.GATHER_DATABASE_STATS (
    estimate_percent      => DBMS_STATS.AUTO_SAMPLE_SIZE,
    block_sample          => TRUE,
    method_opt            => ''FOR ALL COLUMNS SIZE AUTO'',
    degree                => 6,
    granularity           => ''ALL'',
    cascade               => TRUE,
    options               => ''GATHER STALE''
    END;',
                     next_date => sysdate + 2,
                     interval  => 'TRUNC(SysDate +1 ) +  22/24',
                     no_parse  => TRUE);
    end;
    commit;Make sure you commit.

  • Unable to generate statistics for the table

    I have got a staging table of more than 600 columns which has got range portioning. Size of the table is 4GB. The average size of the row is around 3 MB. I have created a Functional index on one of the column ABC VARCHAR2(50) and it has only number values. Now when I try generating statistics for this table through ANALYZE or DBMS_STAT, it gives Invalid Number error but when I drop this index and try analyzing, it works.
    Executed TO_NUMBER(ABC) query on the table and it works fine.
    I have got Functional Indexes on other tables also but I don't get such problem with those tables. I tried dropping the index and re-creating it but it didn't work out.
    I was suspecting DATA BLOCK CORRUPTION so checked ALERT LOG and TRACE FILES but found nothing.
    So what is this magic called?

    I am using TO_NUMBER on the column.
    I have checked the MetaLink for the same problem but could not find anything on that. I still suspect datafile error which I am unable to get in ALERT LOG or TRACE FILES. So I am going to try it this way:
    1) Create new Tablespace with New Datafile
    2) Transfer the table from existing Tablespace to new Tablespace
    3) Create the functional index in the same new Tablespace
    4) Try generating the statistics.
    5) If it works then create seprate Tablespace for data and Index.
    Hope it works !!
    Thanks for the reply guys.

Maybe you are looking for