Need Parallel Querying

Hi Friends,
What you get from the following info?
Will I be able to use parallel query effectively in my datawarehousing database.
Oracle DB version Enterprise Edition 10g 10.2.0.3.0 64 bit
SQL> show parameter parallel
NAME                                 TYPE        VALUE
fast_start_parallel_rollback         string      LOW
parallel_adaptive_multi_user         boolean     TRUE
parallel_automatic_tuning            boolean     FALSE
parallel_execution_message_size      integer     2152
parallel_instance_group              string
parallel_max_servers                 integer     160
parallel_min_percent                 integer     0
parallel_min_servers                 integer     0
parallel_server                      boolean     FALSE
parallel_server_instances            integer     1
parallel_threads_per_cpu             integer     2
recovery_parallelism                 integer     0
SQL> select name,value from v$sysstat where name like 'Parallel%';
NAME                                                                  VALUE
Parallel operations not downgraded                                   461273
Parallel operations downgraded to serial                              91484
Parallel operations downgraded 75 to 99 pct                              33
Parallel operations downgraded 50 to 75 pct                              10
Parallel operations downgraded 25 to 50 pct                            1474
Parallel operations downgraded 1 to 25 pct                                9
6 rows selected.
SQL>Thanks.
Edited by: user523372 on Jun 18, 2010 7:43 AM

What was unclear in 'multipe disks'?
If all of those parallel query slaves are going to hit 1 single disk, you will get an IO bottleneck.
And performance problems are typically NOT resolved by enabling parallel execution.
It is not unlikely it will make things worse.
I was afraid you are a fan of silver bullets. It appears indeed you are.
Sybrand Bakker
Senior Oracle DBA

Similar Messages

  • Turn off Parallel Query for instance

    I have a new 10g RAC instance, on Windows 2003 64, which was just converted from 8i. It is currently a 1 node cluster. The database was built with parallelism turned on and now we are experiencing severe performance degradation. Quest spotlight keeps raising alarms regarding queries being forced to serialize. I have been told it would probably be better to turn parallelism off entirely (this is an OLTP instance). What parms and what settings do I need to set them to in order to shut of parallel query for the instance?

    There must have been a specific reason why it was built as an RAC database
    on a single node. Is it running 2 instances ?
    If there's no reason to be running RAC on a single node, you could shut down
    one instance.
    PARALLEL_MAX_SERVERS determines the maximum number of ParallelQuery
    processes (not PARALLEL_SERVER ! PARALLEL_SERVER what was for OPS).
    Either
    a) you really need Parallel Query Server processes for some user queries
    and PARALLEL_MAX_SERVERS is too low (forcing serialisation of queries)
    or
    b) you should not be using ParallelQuery
    b) is more likely for your OLTP environment.
    Therefore, you could disable parallelism at table level or set
    PARALLEL_MAX_SERVERS down to 0.

  • Problem with temp space allocation in parallel query

    Hello
    I've got a query which matches two large result sets (25m+ rows) against each other and does some basic filtering and aggregation. When I run this query in serial it takes about 30 mins and completes successfully. When I specify a parallel degree of 4 for each result set, it also completes successfully in about 20 minutes. However, when I specify that it should be run in parallel but don't specify a degree for each result set, it spawns 10 parallel servers and after a couple of minutes, bombs out from one of the parallel servers with:
    ORA-12801: error signaled in parallel query server P000
    ORA-01652: unable to extend temp segment by 64 in tablespace TEMPThis appears to be when it is about to perform a large hash join. The execution plan does not change whether the parallel degree is specified or not, and there is several GB of temp space available.
    I'm at a bit of a loss as to how to track down specifically what is causing this problem. I've looked at v$sesstat for all of the sessions involved and it hasn't really turned anything up. I've tried tracing the main session and that hasn't really turned up much either. From what I can tell, one of the sessions seems to try to allocate massive amounts of temp space that it just does not need, but I can figure out why.
    Any ideas of how to approach finding the cause of the problem?
    David

    Hello
    I've finally resolved this and the resolution was relatively simple - and was also the main thing that Mark Rittman said he did in his article: reduce the size of the hash join.
    After querying v$sql_workarea_active I could see what was happening which was that the sum of the temp space for all of the parallel slaves was exceeding the total amount of temp space available on the system. When run in serial, it was virtually at the limit. I guess the extra was just the overhead for each slave maintaining it's own hash table.
    I also made the mistake of misreading the exectuion plan - assuming that the data being pushed to the hash join was filtered to eliminate the data that was not of interest. Upon reflection, this was a rather stupid assumption on my part. Anyway, I used sub query factoring with the materialize hint to ensure that the hash join was only working on the data it should have been. This significantly reduced the size of the hash table and therefore the amount of temp space required.
    I did speak to oracle support and they suggested using pga_aggregate_target rather than the separate *area_size parameters.  I found that this had very little impact as the problem was related to the volume of data rather than whether it was being processed in memory or not.  That said, I did try upping the hash_area_size for the session with some initial success, but ultimately it didn't prove to be scalable.  We are however now using pga_aggregate_target in prod.
    So that's that. Problem sorted. And as the title of Mark Rittman's article suggests, I was trying to be too clever! :-)
    HTH
    David

  • Partitioning For Optimal Parallel Query Execution

    Hi All,
    We are trying to design an architecture that benefits from partitioning and parallel query to obtain the best query response times for our system.
    Let me start by describing the main table which has five columns:
    Columns:
    1) DocId ------- Numeric Primary Key Constraint (Unique)
    2) Text ------- CLOB of XML Content
    3) SCode ------- Varchar 12 ( service code Can be one of 200 values)
    4) A_Date ------- Oracle Date ( The arrival date )
    5) A_Month ------- Numeric partition key, the month number (1-12)
    We insert 100,000 records daily so a month of data will contain 3,000,000 rows. The Text varies from 4k to 200k bytes and on average is around 30k bytes per document. A_Date is obtained when the C++ application receives a client connection. After document transmission is complete the DocId is obtained from an Oracle sequence. It is true that A_Date and DocId increase together. However because of varying document sizes and transmission rates, there is no guarantee that consistent order between the two columns exists.
    For Example: If time (t) increases and the connection times are: t1, t2, t3, t4 and the document at t2 took long to transmit, we can have:
    A_Date -------- DocId (From Oracle Sequence)
    t2 -------------- 1004
    t4 -------------- 1003
    t3 -------------- 1002
    t1 -------------- 1001
    A_Month is simply the month number (1-12) extracted from the transmission entry timestamp. It is also our Partition Key (see below). When the year wraps around from 2006 to 2007, data for January will simpy fall into the 1st partition bucket, and so on..
    QUERY NEEDS: Our queries are centered around a DateTime interval Where the left endpoint is current day/time. They can query the current day, current to 1 month back, current to 2 months back, .. current to 15 months back. We MUST RETURN a list of DocId's sorted in DESCENDING ORDER for screen display purposes.
    In General we need to return sub-second for the 1st month. As we query further back in time longer response times between 1 and 4 seconds are acceptable.
    PARTITIONING AND INDEXES:
    The table is partitioned by A_Month as shown below:
    Create Table IndexTable
    PARTITION BY RANGE (A_Month)
    ( PARTITION p1 VALUES LESS THAN 1.1 ...
    PARTITION p2 VALUES LESS THAN 2.1 ...
    PARTITION p3 vALUES LESS THAN 3.1 ...
    There are GLOBAL INDEXES on DocId, Text(Domain Index), and SCode.
    A_Date is a LOCAL INDEX.
    QUERY STRUCTURE:
    My Query structure looks like this (for a 2 month query):
    SELECT DocId from IndexTable WHERE
    Contains (Text, 'BUSH and EARNINGS') > 0 AND
    SCode in ('S1', 'S2', 'S3', 'S4') AND
    A_Date Between '2006-01-15 11:00:00' AND '2006-03-15 11:00:00'
    Order By DocId DESC;
    QUESTIONS (THERE ARE THREE)
    #### QUESTION 1 ####
    As I examine various explain plans, the PSTART and PSTOP do not reflect consistency with my A_Date range. It seems to always display:
    PStart PStop
    RowId RowId
    no matter what my A_Date range is.. I don't see it pruning my partitions. I cannot find documentation as to what RowId means or how it affects the optimizer's plan.
    #### QUESTION 2 ####
    I have tried parallelization hints on the table and indexes such as
    /*+ PARALLEL( IndexTable, 4) */ and on the A_Date index
    /*+ PARALLEL_INDEX( IndexTable, A_Date_Index, 4) */.
    I can't really tell if the parallel hints make a difference.
    However, the FIRST_ROWS hint makes a big difference if I nest the query inside a rownum clause as:
    SELECT * from
    ( Select /+* first_rows */ ... WHERE CONTAINS... > 0 AND... )
    Where ROWNUM <=20;
    #### QUESTION 3 ####
    I'm running close to the latest RedHat Linux and Oracle 10g2 and I have read about Parallel Slave Processes in Tom Kyte's Expert Oracle Architecture book in which he says you should see processes like:
    ora...p000..
    ora...p001..
    ora...pnnn..
    Which are the parallel slave processes. I have NEVER seen any oracle processes numbered as such running on my system when I run test queries. I have seen some q_ processes and others, but not the pnnn processes..
    Can I benefit from parallel query without ever seeing these processes??
    I Greatly Appreciate Any Advice To Any Of These Questions..
    Joe

    Well I can tell you this much. You will never get partition pruning if you don't have the partition key in the where clause.
    I'm not sure about the parallel query. There was a time that this wasn't supported with Text indexes, but not sure if that still applies today.
    In theory there are two levels of partitioning that can be defined that you may want to test out.
    1st, range partition the base table and create a partitioned text index based on that. This is what you are currently doing.
    2nd, in the storage preference for the $I table specify a range or hash partition (I've never tried this, but in theory it should work) on the token_text column. Try this out and see if it works.

  • Oracle 10g and parallel query question

    Hi Oracle on SAP Gurus!
    We are currently thinking of activating parallel query for certain segments (large application tables and indexes). We searched in SAPNet and SDN and have also studied the SAP Note 651060. But we did not find a complete answer to the following question which is very important for us:
    Which kinds of queries (despite from full table scan and index scan in partitioned indexes) support parallel queries and which ones do not support parallel queries?
    This is important for us to find out whether we have candidates for parallel queries or not.
    Thanx for any hint!
    Regards,
    Volker

    But why do you not propose to use parallel query in OLTP systems?
    If the queries are accessed very frequently you will just run out of cpu and io ressources. OLTP systems are (historical) typically multi user systems. You can off course use PQ for 'single user' activities, like index rebuilds, some batchjobs, but you shouldn't do for frequent user queries.
    If you have time look at this interesting Article [Suck It Dry - Tuning Parallel Execution|http://doug.burns.tripod.com/px.html]
    It is quite old, and you don't have to read all tech details, but i recommend having a look at the conclusions at the end.
    May it make sense to use partitioning of these tables in conjunction with parallel query?
    I know some guys, who do partitioning on OLTP systems, even SAP systems. But they don't use PQ then. The use partitioning to work on a smaller set of data. In your case the range scans, would need to scan only one partition, saving buffer cache and effectively speeding up execution. So you don't need PQ to scan all partitions at all, this would be a typical OLAP approach.
    Best regards
    Michael

  • Parallel  query in Oracle 11g

    We use Oracle 11g DB on windows2008R2.
    We wrote very long and heavy SELECT SQL query usign several table join and sub-queries and it take very long time to get result.
    We did SQL statement tuning as much as we can do so far. ( I will get the Execution Plan and ADDM, etc access right)
    I today notice about Parallel query function.
    Where could I write parallel hint phrases in very long SELECT SQL query ?
    In each selected tables like below ?
    /sample in Oracle Doc/
    SELECT /*+ PARALLEL(employees 4) PARALLEL(departments 4)
           USE_HASH(employees) ORDERED */ MAX(salary), AVG(salary)
    FROM employees, departments
    WHERE employees.department_id = departments.department_id
    GROUP BY employees.department_id;

    You need to be careful with some of the examples in the docs. The example you quote includes an unnecessary join. Before considering parallel query, it should have been re-written to this:
    SELECT MAX(salary), AVG(salary)
    FROM employees
    WHERE department_id is not null
    GROUP BYdepartment_id;
    Later versions of the CBO may do this re-write for you, but it is important to understand why the SQL is inefficient before throwing parallel servers at it. Are you sure that all your joins are actually necessary? (I know you are just going to say "yes", but you might want to think about it first.)

  • ORA-12801: error signaled in parallel query server P000

    Hello All,
    Week before one of the APPLY process ABORTED with following error:
    ORA-12801: error signaled in parallel query server P000
    ORA-04031: unable to allocate 104 bytes of shared memory ("streams pool","unknown object","apply shared t","knalfGetTxn:lcr")
    We are using ORACLE 10.2.0.4.0 on HP unix B.11.23
    For now, I have started the APPLY process again and it's working properly.
    When I looked into the trace file it shows following
    A001: [enq: TM - contention] name|mode=544d0002, object #=2a67, table/partition=0
    *** 2009-06-15 10:53:57.897
    A001: warning -- apply server 1, sid 302 waiting on user sid 267 for event (since 302 seconds):
    A001: [enq: TM - contention] name|mode=544d0002, object #=2a67, table/partition=0
    *** 2009-06-15 10:58:58.792
    A001: warning -- apply server 1, sid 302 waiting on user sid 267 for event (since 603 seconds):
    A001: [enq: TM - contention] name|mode=544d0002, object #=2a67, table/partition=0
    *** 2009-06-15 12:14:36.679
    A001: [enq: TX - row lock contention] name|mode=54580004, usn<<16 | slot=90028, sequence=1b743
    *** 2009-06-15 12:19:36.961
    A001: warning -- apply server 1, sid 302 waiting on user sid 181 for event (since 300 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580004, usn<<16 | slot=90028, sequence=1b743
    *** 2009-06-15 12:24:37.417
    A001: warning -- apply server 1, sid 302 waiting on user sid 181 for event (since 600 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580004, usn<<16 | slot=90028, sequence=1b743
    *** 2009-06-15 12:29:37.906
    A001: warning -- apply server 1, sid 302 waiting on user sid 181 for event (since 901 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580004, usn<<16 | slot=90028, sequence=1b743
    *** 2009-06-15 12:34:37.428
    A001: warning -- apply server 1, sid 302 waiting on user sid 181 for event (since 1201 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580004, usn<<16 | slot=90028, sequence=1b743
    *** 2009-06-19 11:26:44.601
    A001: [enq: TX - row lock contention] name|mode=54580006, usn<<16 | slot=8001e, sequence=1a4af
    *** 2009-06-19 11:31:43.753
    A001: warning -- apply server 1, sid 302 waiting on user sid 212 for event (since 300 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580006, usn<<16 | slot=8001e, sequence=1a4af
    *** 2009-06-19 11:36:44.149
    A001: warning -- apply server 1, sid 302 waiting on user sid 212 for event (since 600 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580006, usn<<16 | slot=8001e, sequence=1a4af
    *** 2009-06-19 11:41:43.775
    A001: warning -- apply server 1, sid 302 waiting on user sid 212 for event (since 900 seconds):
    A001: [enq: TX - row lock contention] name|mode=54580006, usn<<16 | slot=8001e, sequence=1a4af
    *** 2009-06-23 16:55:24.002
    A001: [enq: TM - contention] name|mode=544d0004, object #=2c05, table/partition=0
    *** 2009-06-29 09:48:58.166
    A001: [enq: TM - contention] name|mode=544d0004, object #=2c05, table/partition=0
    *** 2009-07-01 06:02:37.236
    A001: [enq: TM - contention] name|mode=544d0004, object #=2c05, table/partition=0
    *** 2009-07-01 11:46:43.672
    error 12801 in STREAMS process
    ORA-12801: error signaled in parallel query server P000
    ORA-04031: unable to allocate 104 bytes of shared memory ("streams pool","unknown object","apply shared t","knalfGetTxn:lcr")
    OPIRIP: Uncaught error 447. Error stack:
    ORA-00447: fatal error in background process
    ORA-12801: error signaled in parallel query server P000
    ORA-04031: unable to allocate 104 bytes of shared memory ("streams pool","unknown object","apply shared t","knalfGetTxn:lcr")
    Can you please help to provide details on that how i can fix this problem permanetely.
    Any suggestions would be great!
    Thanks,
    Nick

    It seems that you are using Oracle database and not Berkeley Database.
    To fix ORA-04031 errors on streams pool, you need to increase streams pool size with
    alter system set streams_pool_size=<the right value>;See recommandations in http://download.oracle.com/docs/cd/B19306_01/server.102/b14229/strms_mprep.htm#i1006278

  • Killing Parallel Query Session

    Hi,
    I am running Oracle 11.2.0.1.0 on Solaris 5.10.
    Couple of hours ago, I ran a job through DBMS_JOB (Yes, I need to use dbms_schedular), and in the job I used parallel query. Now I want to remove the job. Also I want to clean up the sessions. I can remove the job by doing DBMS_JOB.remove(job id). Is there a way that I kill one parallel query coordinator session, and it would automatically kill all the slave sessions?
    Thanks and regards
    Edited by: Fahd Mirza on Apr 22, 2010 11:57 AM

    Thanks for the answer.
    I have run the following query with output:
    SQL> select ps.sid,s.username,ps.qcsid
    from v$session s, v$px_session ps
    where s.sid=ps.sid
    and s.username='BIADM';  2    3    4
           SID USERNAME                            QCSID
            91 BIADM                                 147
           267 BIADM                                 147
           290 BIADM                                 147
           332 BIADM                                 147
           345 BIADM                                 147
            69 BIADM                                 147
            92 BIADM                                 147
           102 BIADM                                 147
           222 BIADM                                 147
           112 BIADM                                 147
            73 BIADM                                 147
           126 BIADM                                 147
           136 BIADM                                 147
           145 BIADM                                 147
           170 BIADM                                 147
           180 BIADM                                 147
           276 BIADM                                 147
           190 BIADM                                 147
           221 BIADM                                 147
           234 BIADM                                 147
           214 BIADM                                 147
           246 BIADM                                 147
           270 BIADM                                 147
           256 BIADM                                 147
           278 BIADM                                 147
           291 BIADM                                 147
           309 BIADM                                 147
           298 BIADM                                 147
           323 BIADM                                 147
           344 BIADM                                 147
             2 BIADM                                 147
           331 BIADM                                 147
           134 BIADM                                  94
           125 BIADM                                  94
           156 BIADM                                  94
           168 BIADM                                  94
           181 BIADM                                  94
           205 BIADM                                  94
           191 BIADM                                  94
           215 BIADM                                  94
           232 BIADM                                  94
           245 BIADM                                  94
           255 BIADM                                  94
           269 BIADM                                  94
           292 BIADM                                  94
           302 BIADM                                  94
           280 BIADM                                  94
           311 BIADM                                  94
           147 BIADM                                 147
            94 BIADM                                  94
    50 rows selected.If I kill sessions with sid 147 and 94, shouldn'it it be killing all the sessions of BIADM?
    REGARDS

  • Parallel Query Error - 1008 Not All Variables Bound

    Using DB 10g Enterprise Edition Release 10.2.0.1.0
    I am trying to query a table in SQL plus using a bind variable. When I run the query the first time it fails but if I run it again, it works! See the following :
    SQL> var b1 number;
    SQL> exec :b1 := 133348;
    PL/SQL procedure successfully completed.
    SQL> set autot on exp stat
    SQL> select 2 from pension_details where party_id = :b1;
    select 2 from pension_details where party_id = :b1
    ERROR at line 1:
    ORA-12801: error signaled in parallel query server P001
    ORA-01008: not all variables bound
    SQL> /
    2
    2
    Execution Plan
    0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=11)
    1 0 INDEX (RANGE SCAN) OF 'PENDTL_PK' (INDEX (UNIQUE)) (Cost=2
    Card=1 Bytes=11)
    If I add a hint suppressing the parallel index option, then it works first time :
    1* select /*+NOPARALLEL_INDEX (PENSION_DETAILS) */ 4 from pension_details where party_id = :b1
    SQL> /
    4
    4
    Execution Plan
    0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1 Bytes=11)
    1 0 INDEX (RANGE SCAN) OF 'PENDTL_PK' (INDEX (UNIQUE)) (Cost=2
    Card=1 Bytes=11)
    Can anyone shed any light on why this happens or what I need to check on the table and index? I have tried to replicate this on a different table (and a different db) with the parallel option on both the table and index but it works fine!

    Seeing as there have been no replies, I thought I would update my own thread!
    It turns out this is a bug that has been fixed in 11i. The fix has been back-ported to certain versions/os's.
    I will post the bug reference (it is on Metalink somewhere!) later. In the meantime, a workaround is to use the noparrallel_index hint.

  • Urgent, ORA-12801: error signaled in parallel query server P000

    Hi Guys,
    I am using Oracle 9i Enterprise Edition Release 9.2.0.1.0 with Windows 2000 Server.
    I have just upgrade my database from 8i to 9i. I am facing this problem in a lot of queries in my application after upgrade. I tried to searched out but unable to find the reason yet.
    Is there any parameter which i should /should not use? Or need to change any parameter.
    Oracle Error Occured: ORA-12801: error signaled in parallel query server P000
    Thanks in advance.
    Brgs,
    Hassan

    Well, the error stack should be displayed along with the 12801 error.
    If not, look the comment for the error I posted above: use event 10397 to display the actual error.ALTER SESSION SET EVENTS '10397 trace name context forever, level 1'; and if the error raises, then you'll get the source message, not the PQ message.
    See note 21281.1 on Metalink.
    Regards,
    Yoann.

  • "ORA-12801: error signalled in parallel query server"

    A client of ours is using our reporting tool, Impromptu 6, to report from an Oracle 8.1.6 database connecting with Net8. He has built a simple report which displays a single item from a single table but it fails with:-
    Query Server Error
    "ORA-12801: error signalled in parallel query server"
    Error number -9:
    DMS-E-GENERAL, A general exception has occurred during operation 'asynchronous open'.
    According to Oracle documentation, there should be an accompanying error message with the ORA-12801 which gives more information.
    The last few lines of the DMAUDFIL show:-
    OCI OEXEC LINE 5219:orsgbl.C
    OCI OEXEC LINE 5219:orsgbl.C
    CHECK_CODE2 -12801 LINE 5249:orsgbl.C
    OCI OERHMS -12801,ORA-12801: error signaled in parallel query server
    LINE 858:orsmisc.C
    The DMAPIFIL shows no error.
    The query being sent to the database is:-
    select T1."PRD_LVL_PARENT" "c1"
    from "JDAOPRD"."PRDMSTEE" T1
    where PRD_LVL_PARENT is defined as NUMBER(12)
    If they paste the above into SQL*Plus, it works fine.
    Reporting any other items from the database do not give this error.
    If they use the Oracle ODBC driver, they don't get the problem but it runs a lot slower.

    As your ORA-12801 is followed by a ORA-0600 this should be a database bug. First of all I'd bring the database on the last patchlevel (10.2.0.5), and if the error persists you can use the ORA-600/ORA-7445 Troubleshooter (Metalink Note 153788.1). If this doesn't help either you should log a SR with oracle support (you need a support contract to do all those steps).
    Also I don't think forms 5 is certified against a 10gR2 database, so this might cause your trouble. For 6i you should use the latest patchset.
    If you don't have a valid support contract you might have a chance in putting your query in a database procedure.
    cheers

  • Apply process is aborting with:ORA-12801: error signaled in parallel query

    hi,
    We created a queue of a specific type, capture and apply process on the queue. Then we started the queue capture and the apply process. The problem is that the apply process is getting enabled and with in moments going into aborted state. wea re getting the follwoing error:
    ORA-12801: error signaled in parallel query server P000
    ORA-00600: internal error code, arguments: [kwqiceval:anyconv], [], [], [], [], [], [], []
    Any idea what could have gone wrong?
    scripts:
    exec dbms_aqadm.create_queue_table(queue_table=>'qt_anc',queue_payload_type=>'type_anc',multiple_consumers=> true, compatible => '9.0');
    exec dbms_aqadm.create_queue (queue_name => 'q_anc',queue_table=>'qt_anc');
    EXEC DBMS_AQADM.START_QUEUE (queue_name => 'q_anc');
    DECLARE
    emp_rule_name_dml VARCHAR2(300);
    emp_rule_name_ddl VARCHAR2(300);
    BEGIN
    DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name => 'ops.t_anc',
    streams_type => 'capture',
    streams_name => 'capture_anc',
    queue_name => 'strmadmin.q_anc',
    include_dml => true,
    include_ddl => false,
    source_database => null,
    dml_rule_name => emp_rule_name_dml,
    ddl_rule_name => emp_rule_name_ddl);
    DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION(
    rule_name => emp_rule_name_dml,
    destination_queue_name => 'strmadmin.q_anc');
    END;
    DECLARE
    emp_rule_name_dml VARCHAR2(300);
    emp_rule_name_ddl VARCHAR2(300);
    BEGIN
    DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name => 'ops.t_anc',
    streams_type => 'apply',
    streams_name => 'apply_anc',
    queue_name => 'strmadmin.q_anc',
    include_dml => true,
    include_ddl => false,
    source_database => null,
    dml_rule_name => emp_rule_name_dml,
    ddl_rule_name => emp_rule_name_ddl);
    DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION(
    rule_name => emp_rule_name_dml,
    destination_queue_name => 'strmadmin.q_anc');
    END;
    BEGIN
    DBMS_APPLY_ADM.START_APPLY(
    apply_name => 'apply_anc');
    END;
    BEGIN
    DBMS_CAPTURE_ADM.START_CAPTURE(
    capture_name => 'capture_anc');
    END;
    /

    Hello
    The above configuration is never supported. The implicit capture expects the queue payload to be SYS.ANYDATA and same with implicit apply also.
    However you can use Streams Messaging capability to achieve this. You need to wrap the messages with SYS.ANYDATA for this to work. The implicit capture uses a persistent logminer session to generate LCRs and it then wraps it with SYS.ANYDATA and enqueues into the capture queue, it then propagated to apply queue. You can generate LCRs and wrap it with SYS.ANYDATA and then enqueue into the capture queue then apply can recognise the messages.
    Here is an example on creating LCRs (tested in 10g):
    CREATE TABLE lcr_test (col1 NUMBER);
    DECLARE
         l_lcr SYS.LCR$_ROW_RECORD;
    BEGIN
         l_lcr :=
    SYS.LCR$_ROW_RECORD.CONSTRUCT
         source_database_name=>SYS_CONTEXT('USERENV','DB_NAME'),
         command_type=>'INSERT',
         object_owner=>USER,
         object_name=>'LCR_TEST'
         l_lcr.ADD_COLUMN('new','col1',SYS.AnyData.ConvertNumber(99));
         l_lcr.EXECUTE(TRUE);
         COMMIT;
    END;
    SELECT * FROM lcr_test;
    Converting to SYS.ANYDATA:
    DECLARE
         l_lcr SYS.LCR$_ROW_RECORD;
         l_anydata SYS.ANYDATA;
    BEGIN
         l_lcr :=
    SYS.LCR$_ROW_RECORD.CONSTRUCT
         source_database_name=>SYS_CONTEXT('USERENV','DB_NAME'),
         command_type=>'INSERT',
         object_owner=>USER,
         object_name=>'LCR_TEST'
         l_lcr.ADD_COLUMN('new','col1',SYS.AnyData.ConvertNumber(99));
         l_anydata:=SYS.ANYDATA.ConvertObject(l_lcr);
         ENQ_PROC(l_anydata);
         COMMIT;
    END;
    Thanks,
    Rijesh

  • Why parallel query use direct path read ??

    I think because access buffer cache needs latch and buffer block lock,if parallel query don't use direct path read ,parallel query will be impacted by Serialization mechanism such as latch and lock .so oracle choose direct path read to avoid it .
    anybody have a good idea ??
    Edited by: jinyu on Dec 8, 2008 7:52 AM

    jinyu wrote:
    I think because access buffer cache needs latch and buffer block lock,if parallel query don't use direct path read ,parallel query will be impacted by Serialization mechanism such as latch and lock .so oracle choose direct path read to avoid it .Jinyu,
    basically, yes I think that's it. The purpose of parallel query is to scan a very large segment, because the overhead of communication between the processes and maintaining/starting up the parallel slave renders the operation inefficient for small segments.
    Therefore I guess the assumption is that the segment to scan is probably very large, the fraction of the blocks in the buffer cache would be only very small in comparison to the blocks to scan, and therefore the reduced overhead of directly reading the blocks bypassing all the serialization issues of the buffer cache should outweigh the "un-buffered" blocks issue and save the buffer cache for objects that benefit more from being cached.
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • Parallel Query on Views or MV or snapshot?

    Hi All,
    I'm in oracle 10gr2 and moving to 11gr2 soon...
    I have a view ( has over a million records) that is created on a view ....basically has 5 layers of views beneath...and the performance as been painfully slow.
    Is it possible to have parallel select query on views or Materialized views or snapshots?
    Thanks and appreciate your sugessions..
    HU

    user32322435 wrote:
    TRUE..I agree its not the best design...but that is how the DB was handed ..and it too complicated to re-design....sorryYou don't have to be sorry about it, but you (and your users) will have to live with the ramifications of it.
    Parallel query is useful in a very limited set of circumstances. Attempting to overcome a design flaw is not one of them.
    I would look into materialized view if you absolutely must, but before tossing more complexity on top of existing complexity in order to cover up a design flaw .... i would go to management and explain how your application is poorly designed and needs to be redesigned if you ever expect to get a semblance of performance from your application.
    NOTHING is too complicated to redesign, it just takes time and thought.

  • ORA-1555 with Parallel query problem

    Hi
    We are getting many ora-1555 errors with parallel query stuff. Few queries are throwing with hint /* Q98989129 NO_EXPAND INDEX or /* Q908231094 INDEX_RRS. Our applicaiton is like DSS kind with bulk loading and big reports. I have doubled the undo retention and undo size to 200G and set the trace event. But most of the queries are parallel queries. We are not using the following query in applicaiton. seems like it is parallel sub queries. I need to know the exact mechanism how to devide the parallel queries with its degree of parallalism.
    SELECT /*+ Q277874009 INDEX_RRS(A1 "PK_TF_UTRAN_UCELL10_TAB") */ A1."TSTAMP" C0,A1."INSTANCE_ID" C1,A1."PMNOFOIRATHOM
    ULTIGSMFAILURE" C2,A1."PMNOFOIRATHOCS57GSMFAIL" C3,A1."PMNOFOSPEECHGSMFAILURE" C
    4,A1."PMNOFOHOSTANDGSMFAILURE" C5 FROM "FLEXPM"."ERC_TF_UTRAN_UCELL10_TAB" PX_G
    RANULE(0, BLOCK_RANGE, DYNAMIC) A1 WHERE A1."TSTAMP"(+)<=TO_DATE('2006-09-25 23:
    45:00', 'yyyy-mm-dd hh24:mi:ss')
    Thanks

    Hi,
    probably the error is due to wrong execution plans choosen by the optimizer.
    Are the table statistics up to date? Did You use parallel w/o and degree (ex. defining parallel on object using DEFAULT clause instead of a DEGREE)?
    Normally, parallel execution can be done in 2 ways, considering the driving object:
    1. like in previous versions, like 7.3, w/o partitioning, the object is split, by rowid, directly from the parallel coordinator to the query slaves (normally a number that can be equivalent to the degree of parallelism or the double in case of sort e/o joins).
    2. considering a partitioned object, for every partition/subpartition (phisical segment), a query slaves is made in charge.
    In both ways, the original session (SID) is the parallel coordinator that coordinates the salves executions.
    The hints and statements that You've reported are tipical queries used by slave process.
    In my experience, setting the PARALLEL degree to DEFAULT (no degree during CREATE or ALTER of the object after PARALLEL clause) will cause an "explosion" of slaves startup that can conduct to yr errors.
    Hope this helps
    Max

Maybe you are looking for