Tuning the query..
Hi guys,
I have written a demand view query which is working perfectly and is giving demand betnwen specified date range. Can you suggest any modification in the query which will tune it to run faster and improve performance:
--Demand View query
--Data to use
--date: give any date range for this month
SELECT calendar_date,man_days_demand,/*total_fsr_count,*/
(total_fsr_count - MAN_DAYS_DEMAND) man_days_unstaffed,
/*FSR_Assigned_Serv_Req , FSR_Assigned_OT_Req ,*/
(total_fsr_count-(FSR_Assigned_Serv_Req + FSR_Assigned_OT_Req)) Man_days_avail
FROM (
SELECT TRUNC(cal.calendar_date) calendar_date,
(-- in line column qry to count the service reqs falling on that specific day
SELECT nvl(sum(count(ssrj.assigned_field_service_rep)),0)
FROM sop_service_request_job ssrj, sop_service_request ssr
WHERE (((cal.calendar_date between ssrj.scheduled_start_date AND
get_end_date(ssrj.scheduled_start_date,
ssrj.expected_service_hours,
ssrj.weekend)))
OR
(cal.calendar_date < ssrj.scheduled_start_date and
cal.calendar_date > get_end_date(ssrj.scheduled_start_date,
ssrj.expected_service_hours,
ssrj.weekend)))
and ssrj.service_request_id = ssr.service_request_id
and ssrj.assigned_field_service_rep is not null
GROUP BY calendar_date
) Man_Days_demand,
SELECT nvl(sum(count(ssrj.assigned_field_service_rep)),0)
FROM sop_service_request_job ssrj, sop_service_request ssr
WHERE (((cal.calendar_date between ssrj.scheduled_start_date AND
get_end_date(ssrj.scheduled_start_date,
ssrj.expected_service_hours,
ssrj.weekend)))
OR
(cal.calendar_date < ssrj.scheduled_start_date and
cal.calendar_date > get_end_date(ssrj.scheduled_start_date,
ssrj.expected_service_hours,
ssrj.weekend)))
and ssrj.service_request_id = ssr.service_request_id
and ssrj.assigned_field_service_rep is not null
and ssrj.job_status = 'ASSIGNED'
GROUP BY calendar_date
) FSR_Assigned_Serv_Req,
select nvl(sum(count(fsr_sso_id)),0)
from sop_other_time_alloc_det sotad
where ((cal.calendar_date between trunc(sotad.start_date) AND
trunc(sotad.end_date)) OR
(cal.calendar_date < trunc(sotad.start_date) AND
cal.calendar_date > trunc(sotad.end_date)))
GROUP BY calendar_date
) FSR_Assigned_OT_Req,
select nvl(count(distinct sso_id),0)
from sop_user_map
where role_id = 1
) total_fsr_count
FROM sop_fiscal_calendar_v cal, sop_service_user ssu, sop_service_request ssr,
sop_service_request_job ssrj, CSA_PLATFORM_MASTER cpm
WHERE
calendar_date BETWEEN trunc(to_date('&date_range_start_date','mm/dd/yyyy'))
AND trunc(to_date('&date_range_end_date','mm/dd/yyyy'))
and ssu.sso_id = ssrj.assigned_field_service_rep
and ssrj.service_request_id = ssr.service_request_id
and trim(ssu.sso_id) = trim('&ssoid')
and upper(ssu.qualification) like upper('%&qualification%')
and upper(cpm.platform_name) like upper('%&platform_name%')
and upper(ssu.country) like upper('%&country%')
and upper(ssr.region_id) like upper('%®ion_id')
and upper(ssrj.weekend) like upper('%&weekend%')
and upper(ssu.state) like upper('%&state%')
GROUP BY calendar_date
) order by calendar_date
Thx,,
JP
Hello
To preserve the formatting any text you post you need surround them with the UBB Code tags [pre] and [/pre]. i.e.
[pre]
SQL> select * from dual;
D
X
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'DUAL'
Statistics
0 recursive calls
4 db block gets
1 consistent gets
0 physical reads
0 redo size
544 bytes sent via SQL*Net to client
643 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed
[/pre]
HTH
David
Similar Messages
-
Tuning the query : Very Urgent
Hi
We have query wich needs tuning.when we are putting REGULAR EXPRESSION query is running fine but whne we put like LIKE stmt it is taking time.Here is the query below.Please help on tuning.
SELECT a.order_number, b.last_update_date,TO_CHAR( b.split_percent,'FM99999.009') SPLIT_PERCENTAGE,
rs.NAME " SALES_PERSON_NAME ", rs.salesrep_number, b.effective_date,
b.creation_date "CREATION_DATE", rt.NAME "TERRITORY_NAME",
rt.segment1 "ERP_CODE", a.booked_date "DATE_BOOKED",
TO_CHAR(ROUND((( (SELECT SUM (ordered_quantity * unit_selling_price)
FROM apps.oe_order_lines_all ol
WHERE ol.header_id = a.header_id)
* b.split_percent
/ 100
) , 2),'FM99999999999999999999.009') order_total ,
(SELECT user_name
FROM fnd_user
WHERE user_id = b.last_updated_by) requested_by,
b.obsolete_date
FROM oe_order_headers_all a,
apps.csm_header_sales_cr_hist b,
jtf_rs_salesreps rs,
ra_territories rt
WHERE 1 = 1
AND a.header_id = b.source_header_id
AND b.territory_id = rt.territory_id
AND b.salesrep_id = rs.salesrep_id
AND b.source_type = 'O'
AND a.order_number IN (
SELECT a.order_number
FROM oe_order_headers_all a,
apps.csm_header_sales_cr_hist b,
jtf_rs_salesreps rs,
ra_territories rt
WHERE 1 = 1
AND a.header_id = b.source_header_id
AND b.territory_id = rt.territory_id
AND b.salesrep_id = rs.salesrep_id
AND b.source_type = 'O'
-- AND b.obsolete_date IS NULL --ommented by andondap as per TD#9648 Changes
AND REGEXP_LIKE ( rs.name , '(svc)|(Muti.*Y)|(Multi.*Y)|(._MY)') Commented by andondap as per TD#9648 Changes
AND b.last_update_date BETWEEN TO_DATE ('2012/11/25', 'YYYY/MM/DD') AND TO_DATE ('2013/03/23', 'YYYY/MM/DD')+ 0.9999
AND REGEXP_LIKE ( rs.name,'(.MY)|(Muti.*Y))|(Multi.*Y)|(._MY) |(mlti)')
AND rs.name LIKE '%SVC%MULTI%' OR rs.name NOT LIKE '%DUMMY%' OR rs.name LIKE 'Svc%Multi%' OR rs.name LIKE 'Svc%MY%'
OR rs.name LIKE 'Service%Multi%' OR rs.name LIKE '%MY_SHARE_TM' OR rs.name LIKE '%MY_SHARE_T')
ORDER BY a.order_number, b.creation_date
Thanks
HibinHmmm, let's see...
1. OP provided formatted code using {noformat}{noformat} tags.... - FAILED
2. OP provided database version in full... - FAILED
3. OP provided table structures and index information... - FAILED
4. OP provided cardinality and selectivity information... - FAILED
5. OP provided explain plans... - FAILED
6. OP provided execution traces... - FAILED
7. OP is a new member and can be excused for above failures... - FAILED
8. OP has asked previous questions and followed forum etiquette by marking them as answered... - FAILED
9. OP has respected volunteers and other questioners by not marking his question as Urgent... - FAILED
10. OP has read the forum FAQ ({message:id=9360002}) for posting his question... - FAILED
11. OP has read the forum FAQ ({message:id=9360003}) for posting a tuning question... - FAILED
It's a good job you're not a computer program, you wouldn't have even compiled.
so, points to note:
This is a forum of volunteers. There's no such thing as an Urgent question here, and it's considered rude to suggest your question is urgent, as that indicates you want immediate attention from the people who are giving up their own time to help, and who have their own jobs to do. It's also rude for the other people who are asking questions, as everyone would like an answer to their problem as soon as possible, so what makes you any more special? An urgent issue is one where a live system is down potentially putting people's lives at risk or causing a company to lose money, or somehow damage their services. Such issues should be logged with Oracle Support, not on the free OTN forums.
Next, when you post your question, ensure you provide all the information that is needed for people to be able to help you. Read the FAQ posts which point to useful threads indicating what information is required, especially for tuning requests.
Finally, when your questions have been answered, it is common courtesy to mark them as answered (and award points if appropriate), otherwise it indicates that you have no respect for the people who are helping you.
If you follow all the advice above, you will end up creating a good question that people will be willing to help you with. If you don't follow the advice above, such as in this question you've posted, you will find that few experts will bother to help (or if they post it will not likely be helpful advise you receive). The choice is yours. -
Please help!!! Tuning the query
Hi,
I am using Oracle BDBXML 2.4.16. In the following, policyContainer.dbxml has around 1000 documents and productsContainer.dbxml around 10 documents. The following query is taking around 6 - 8 seconds to fetch the data of around 300 records. I have created node-element-equality-string indexes on PolicyEvent, PolicyStatus, Archived, IsLatest, ProductID and CompanyID.
I am novice on Query tuning. Can someone please help me to tune the following query. I have posted the query plan as well.
Thanks in Advance!!
Balakrishna.
Query:
query ' for $policy in collection("policyContainer.dbxml")/Policy[PolicyState/PolicyEvent=("APPLICATION","QUOTE","BINDER","POLICY","ENDORSEMENT QUOTE")]
[PolicyHeader/ProductID = (for $product in collection("productsContainer.dbxml")/Product/ProductsHeader[CompanyID=(1)] return $product/ProductID)]
[PolicyState/PolicyStatus !=("RATE","DECLINED ENDORSEMENT QUOTE","DECLINED NON-PRE ENDORSEMENT QUOTE","DECLINED EXTENSION QUOTE")]
[PolicyState/Archived !="true"]
[(PolicyState/IsLatest !="false"
and (PolicyState/PolicyStatus != ("ENDORSEMENT QUOTE","NON-PRE ENDORSEMENT QUOTE","EXTENSION QUOTE")))
or (PolicyState/IsLatest !="true"
and (PolicyState/PolicyStatus =("ENDORSEMENT QUOTE","NON-PRE ENDORSEMENT QUOTE","EXTENSION QUOTE")))]
let $state := $policy/PolicyState
let $header := $policy/PolicyHeader
let $datatable := $policy/DataTable/DataTableInfo
return
<policyDetail>
{$policy/SubmissionNumber},
{$policy/DocumentNumber},
{$policy/QuoteVersionNumber},
{$state/*,$header/*,$datatable/*}
</policyDetail>'
Query plan:
<XQuery>
<Return>
<LetTuple uri="" name="datatable">
<LetTuple uri="" name="header">
<LetTuple uri="" name="state">
<ForTuple uri="" name="policy">
<ContextTuple/>
<QueryPlanToAST>
<BufferQP id="2">
<NegativeNodePredicateFilterQP uri="" name="#tmp67">
<NegativeNodePredicateFilterQP uri="" name="#tmp73">
<NodePredicateFilterQP uri="" name="#tmp404">
<ParentOfChildJoinQP>
<StepQP axis="parent-of-child" name="PolicyState" nodeType="element">
<UnionQP>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyEvent" value="ENDORSEMENT QUOTE"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyEvent" value="APPLICATION"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyEvent" value="POLICY"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyEvent" value="BINDER"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyEvent" value="QUOTE"/>
</UnionQP>
</StepQP>
<StepQP axis="child" name="Policy" nodeType="element">
<SequentialScanQP container="policyContainer.dbxml" nodeType="document"/>
</StepQP>
</ParentOfChildJoinQP>
<ValueFilterQP comparison="eq" general="true">
<StepQP axis="child" name="ProductID" nodeType="element">
<StepQP axis="child" name="PolicyHeader" nodeType="element">
<VariableQP name="#tmp404"/>
</StepQP>
</StepQP>
<Atomize>
<Return>
<ForTuple uri="" name="product">
<ContextTuple/>
<QueryPlanToAST>
<ParentOfChildJoinQP>
<ValueFilterQP comparison="eq" general="true">
<PresenceQP container="productsContainer.dbxml" index="node-element-equality-string" operation="prefix" child="CompanyID"/>
<Sequence>
<NumericTypeConstructor value="1.0E0" typeuri="http://www.w3.org/2001/XMLSchema" typename="integer"/>
</Sequence>
</ValueFilterQP>
<StepQP axis="child" name="ProductsHeader" nodeType="element">
<StepQP axis="child" name="Product" nodeType="element">
<SequentialScanQP container="productsContainer.dbxml" nodeType="document"/>
</StepQP>
</StepQP>
</ParentOfChildJoinQP>
</QueryPlanToAST>
</ForTuple>
<QueryPlanToAST>
<StepQP axis="child" name="ProductID" nodeType="element">
<VariableQP name="product"/>
</StepQP>
</QueryPlanToAST>
</Return>
</Atomize>
</ValueFilterQP>
</NodePredicateFilterQP>
<ValueFilterQP comparison="ne" general="true">
<ValueFilterQP comparison="ne" general="true">
<ValueFilterQP comparison="ne" general="true">
<ValueFilterQP comparison="ne" general="true">
<StepQP axis="child" name="PolicyStatus" nodeType="element">
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="#tmp73"/>
</StepQP>
</StepQP>
<Sequence>
<AnyAtomicTypeConstructor value="RATE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
<Sequence>
<AnyAtomicTypeConstructor value="RATE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
<Sequence>
<AnyAtomicTypeConstructor value="RATE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
<Sequence>
<AnyAtomicTypeConstructor value="RATE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="DECLINED EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
</NegativeNodePredicateFilterQP>
<ChildJoinQP>
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="#tmp67"/>
</StepQP>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="Archived" value="true"/>
</ChildJoinQP>
</NegativeNodePredicateFilterQP>
<UnionQP>
<NegativeNodePredicateFilterQP uri="" name="#tmp18">
<NegativeNodePredicateFilterQP uri="" name="#tmp46">
<BufferReferenceQP id="2"/>
<ChildJoinQP>
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="#tmp46"/>
</StepQP>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="IsLatest" value="false"/>
</ChildJoinQP>
</NegativeNodePredicateFilterQP>
<ValueFilterQP comparison="ne" general="true">
<ValueFilterQP comparison="ne" general="true">
<ValueFilterQP comparison="ne" general="true">
<StepQP axis="child" name="PolicyStatus" nodeType="element">
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="#tmp18"/>
</StepQP>
</StepQP>
<Sequence>
<AnyAtomicTypeConstructor value="ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
<Sequence>
<AnyAtomicTypeConstructor value="ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
<Sequence>
<AnyAtomicTypeConstructor value="ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="NON-PRE ENDORSEMENT QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
<AnyAtomicTypeConstructor value="EXTENSION QUOTE" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ValueFilterQP>
</NegativeNodePredicateFilterQP>
<NegativeNodePredicateFilterQP uri="" name="#tmp56">
<ParentOfChildJoinQP>
<StepQP axis="parent-of-child" name="PolicyState" nodeType="element">
<UnionQP>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyStatus" value="NON-PRE ENDORSEMENT QUOTE"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyStatus" value="EXTENSION QUOTE"/>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="PolicyStatus" value="ENDORSEMENT QUOTE"/>
</UnionQP>
</StepQP>
<BufferReferenceQP id="2"/>
</ParentOfChildJoinQP>
<ChildJoinQP>
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="#tmp56"/>
</StepQP>
<ValueQP container="policyContainer.dbxml" index="node-element-equality-string" operation="eq" child="IsLatest" value="true"/>
</ChildJoinQP>
</NegativeNodePredicateFilterQP>
</UnionQP>
</BufferQP>
</QueryPlanToAST>
</ForTuple>
<QueryPlanToAST>
<StepQP axis="child" name="PolicyState" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</QueryPlanToAST>
</LetTuple>
<QueryPlanToAST>
<StepQP axis="child" name="PolicyHeader" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</QueryPlanToAST>
</LetTuple>
<QueryPlanToAST>
<StepQP axis="child" name="DataTableInfo" nodeType="element">
<StepQP axis="child" name="DataTable" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</StepQP>
</QueryPlanToAST>
</LetTuple>
<DOMConstructor type="element">
<Name>
<Sequence>
<ATQNameConstructor uri="" prefix="" localname="policyDetail" typeuri="http://www.w3.org/2001/XMLSchema" typename="QName"/>
</Sequence>
</Name>
<Children>
<ContentSequence>
<QueryPlanToAST>
<StepQP axis="child" name="SubmissionNumber" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</QueryPlanToAST>
</ContentSequence>
<ContentSequence>
<Sequence>
<AnyAtomicTypeConstructor value="," typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ContentSequence>
<ContentSequence>
<QueryPlanToAST>
<StepQP axis="child" name="DocumentNumber" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</QueryPlanToAST>
</ContentSequence>
<ContentSequence>
<Sequence>
<AnyAtomicTypeConstructor value="," typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ContentSequence>
<ContentSequence>
<QueryPlanToAST>
<StepQP axis="child" name="QuoteVersionNumber" nodeType="element">
<VariableQP name="policy"/>
</StepQP>
</QueryPlanToAST>
</ContentSequence>
<ContentSequence>
<Sequence>
<AnyAtomicTypeConstructor value="," typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/>
</Sequence>
</ContentSequence>
<ContentSequence>
<Parenthesized>
<QueryPlanToAST>
<ChildJoinQP>
<VariableQP name="state"/>
<SequentialScanQP container="policyContainer.dbxml" nodeType="element"/>
</ChildJoinQP>
</QueryPlanToAST>
<QueryPlanToAST>
<StepQP axis="child" uri="*" name="*" nodeType="element">
<VariableQP name="header"/>
</StepQP>
</QueryPlanToAST>
<QueryPlanToAST>
<ChildJoinQP>
<VariableQP name="datatable"/>
<SequentialScanQP container="policyContainer.dbxml" nodeType="element"/>
</ChildJoinQP>
</QueryPlanToAST>
</Parenthesized>
</ContentSequence>
</Children>
</DOMConstructor>
</Return>
</XQuery>The good news is that your indexes are being used (anywhere in the query plan where you see index="node-element-equality-string"), the bad news is that the entire policyContainer is being scanned several times (<SequentialScanQP container="policyContainer.dbxml" nodeType="element"/>). Your best bet is to upgrade to dbxml-2.5.16, since that has several improvements to the optimizer that should optimize away those scans. Failing that, use the shell command (dbxml) to add and remove indexes and see how that changes the query plan and speed. The following line is what is causing the scans:
{$state/*,$header/*,$datatable/*}So add indexes that will help to locate those nodes, or change that line so that the query is faster.
Lauren Foutz -
Parameters to be considered for tuning the QUERY Performance.
Hi Guys
I wanted to identify the Query which is taking more resources through the Dynamic performance views and not through OEM.I wanter to tune the Query.
Please suggest me on this. Also i wanted to know what are all the parameters to be considered for tuning a query like Query execution time, I/O Hits, Library cache hits, etc and from which performance view these paramaters can be taken. I also wanted to know how to find the size of library cache and how much queries can be holded in a library cache and what will be the retention of queries in library cache and how to retrive the queries from Library cache.
Thanks a lot
Edited by: user448837 on Sep 23, 2008 9:24 PMHmm there is a parameter called makemyquery=super_fast, check that ;-).
Ok jokes apart, your question is like asking a doctor that when a person is sick than how to troubleshoot his sickeness? So does a doctor start giving medicine immediately? No right? He has to check some symptoms of the patient. The same is applicable to the query also. There is no view as such which would tell you the performance of the query ie it is good or bad. Tell me if a query is taking up 5 minutes and I come and tell you this, what would you say its good or bad or the query took this much CPU time what would you say, its too much or too less? I am sure your answers would be "it depends". That's the key point.
The supermost point in the performance check is two things, one the plan of the query. What kind of plan optimizer took for the query and whether it was really good or not? There are millions os ways to do som ething but the idea is to do it in the best way. That's what the idea of reading explain plan. I would suggest get your self familiar with explain plan's various paths and their pros and cons. Also about the query's charectristics, you can check V$sql, v$sqlarea , V$sql_text views.
Your other question that you want to check the size of the library cache , its contents and the retention, I would say that its all internally managed. You never size library cache but shared pool only. Similary the best bet for a dba/developer is to check the queries are mostly shareable and there wont be any duplicate sqls. So the cursor_sharing parameter can be used for this. The control is not given to us to manage the rentention or the flushing of the queries from the cache.
HTH
Aman.... -
Tuning The Query By Using Xplain Plan
Hi Guys,
This particular query is taking a long time in the production reported by The SPE team .
SELECT
CASE
WHEN TPJRCSHDRW1.CASH_DRAWER_ID = 5000555
THEN 1
WHEN TPTRJO1.OTHER_CASH_DRAWER_ID = 5000555
THEN 2
END TRADE_TYPE,
TPDECO1.DENOMINATION_COUNT_ID,
TPDECO1.DENOMINATION_CATEGORY,
TPDECO1.DENOMINATION_VALUE,
TPDECO1.DENOMINATION_COUNT,
TPDECO1.DENOMINATION_TYPE,
TPDECO1.DENOMINATION_NAME,
TPTRJO1.TRANSACTION_ID,
TPTRJO1.TOTAL_VALUE,
TPTRJO1.TOTAL_VALUE_CCODE,
TPTRJO1.JOURNAL_ENTRY_ID,
TPJRCSHDRW1.CASH_DRAWER_ID,
TPTRJO1.OTHER_CASH_DRAWER_ID
FROM TRANSACTION_JOURNAL TPTRJO1
INNER JOIN JOURNAL_CASH_DRAWER TPJRCSHDRW1
ON TPTRJO1.JOURNAL_ENTRY_ID = TPJRCSHDRW1.JOURNAL_ENTRY_ID
LEFT OUTER JOIN DENOMINATION_COUNT TPDECO1
ON TPDECO1.JOURNAL_ENTRY_ID = TPJRCSHDRW1.JOURNAL_ENTRY_ID
WHERE ((TPJRCSHDRW1.CASH_DRAWER_ID = 5000555)
OR (TPTRJO1.OTHER_CASH_DRAWER_ID = 5000555))
AND (TPTRJO1.TRANSACTION_ID IN (563,590,1362,605,562,589,604))
AND (TPTRJO1.STATUS NOT IN ('I','V','R'))
AND ((TPTRJO1.REVERSED_BY) IS NULL) AND (TPJRCSHDRW1.CASH_DRAWER_DATE >= to_date('2009-07-24','yyyy-mm-dd') )
AND (TPTRJO1.TOTAL_VALUE <> 0)
AND ((TPTRJO1.OFFSET_ID) IS NULL);
When I am analysing the query by xplain_plan , I am getting this plan
Plan hash value: 3371088438
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 36557 | 3391K| 1445 (1)| 00:00:18 |
| 1 | CONCATENATION | | | | | |
| 2 | NESTED LOOPS OUTER | | 1 | 95 | 3 (0)| 00:00:01 |
| 3 | NESTED LOOPS | | 1 | 63 | 2 (0)| 00:00:01 |
|* 4 | TABLE ACCESS BY INDEX ROWID| TRANSACTION_JOURNAL | 1 | 40 | 1 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | I26_TRANSACTION_JOURNAL | 1 | | 1 (0)| 00:00:01 |
|* 6 | TABLE ACCESS BY INDEX ROWID| JOURNAL_CASH_DRAWER | 1 | 23 | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | PKC_JOURNAL_CASH_D | 1 | | 1 (0)| 00:00:01 |
| 8 | TABLE ACCESS BY INDEX ROWID | DENOMINATION_COUNT | 12 | 384 | 1 (0)| 00:00:01 |
|* 9 | INDEX RANGE SCAN | PKC_DENOMINATION_COUNT | 20 | | 1 (0)| 00:00:01 |
| 10 | NESTED LOOPS OUTER | | 36556 | 3391K| 1442 (1)| 00:00:18 |
| 11 | NESTED LOOPS | | 1817 | 111K| 715 (0)| 00:00:09 |
| 12 | TABLE ACCESS BY INDEX ROWID| JOURNAL_CASH_DRAWER | 1817 | 41791 | 351 (0)| 00:00:05 |
|* 13 | INDEX RANGE SCAN | SPE099_JOURNALCASHDRWR | 1817 | | 7 (0)| 00:00:01 |
|* 14 | TABLE ACCESS BY INDEX ROWID| TRANSACTION_JOURNAL | 1 | 40 | 1 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | PKC_TRANSACTION_JOURNAL | 1 | | 1 (0)| 00:00:01 |
| 16 | TABLE ACCESS BY INDEX ROWID | DENOMINATION_COUNT | 20 | 640 | 1 (0)| 00:00:01 |
|* 17 | INDEX RANGE SCAN | PKC_DENOMINATION_COUNT | 20 | | 1 (0)| 00:00:01 |
Predicate Information (identified by operation id):
4 - filter("TPTRJO1"."TOTAL_VALUE"<>0 AND "TPTRJO1"."REVERSED_BY" IS NULL AND
"TPTRJO1"."OFFSET_ID" IS NULL)
5 - access("TPTRJO1"."OTHER_CASH_DRAWER_ID"=5000555)
filter("TPTRJO1"."STATUS"<>U'I' AND "TPTRJO1"."STATUS"<>U'V' AND "TPTRJO1"."STATUS"<>U'R'
AND ("TPTRJO1"."TRANSACTION_ID"=562 OR "TPTRJO1"."TRANSACTION_ID"=563 OR
"TPTRJO1"."TRANSACTION_ID"=589 OR "TPTRJO1"."TRANSACTION_ID"=590 OR
"TPTRJO1"."TRANSACTION_ID"=604 OR "TPTRJO1"."TRANSACTION_ID"=605 OR
"TPTRJO1"."TRANSACTION_ID"=1362))
6 - filter("TPJRCSHDRW1"."DRAWER_SEQ" IS NOT NULL)
7 - access("TPTRJO1"."JOURNAL_ENTRY_ID"="TPJRCSHDRW1"."JOURNAL_ENTRY_ID" AND
"TPJRCSHDRW1"."CASH_DRAWER_DATE">=TO_DATE(' 2009-07-24 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
filter("TPJRCSHDRW1"."CASH_DRAWER_DATE">=TO_DATE(' 2009-07-24 00:00:00', 'syyyy-mm-dd
hh24:mi:ss'))
9 - access("TPDECO1"."JOURNAL_ENTRY_ID"(+)="TPJRCSHDRW1"."JOURNAL_ENTRY_ID")
13 - access("TPJRCSHDRW1"."CASH_DRAWER_ID"=5000555 AND
"TPJRCSHDRW1"."CASH_DRAWER_DATE">=TO_DATE(' 2009-07-24 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
filter("TPJRCSHDRW1"."DRAWER_SEQ" IS NOT NULL)
14 - filter("TPTRJO1"."STATUS"<>U'I' AND "TPTRJO1"."STATUS"<>U'V' AND "TPTRJO1"."STATUS"<>U'R'
AND ("TPTRJO1"."TRANSACTION_ID"=562 OR "TPTRJO1"."TRANSACTION_ID"=563 OR
"TPTRJO1"."TRANSACTION_ID"=589 OR "TPTRJO1"."TRANSACTION_ID"=590 OR
"TPTRJO1"."TRANSACTION_ID"=604 OR "TPTRJO1"."TRANSACTION_ID"=605 OR
"TPTRJO1"."TRANSACTION_ID"=1362) AND "TPTRJO1"."TOTAL_VALUE"<>0 AND "TPTRJO1"."REVERSED_BY" IS
NULL AND "TPTRJO1"."OFFSET_ID" IS NULL AND LNNVL("TPTRJO1"."OTHER_CASH_DRAWER_ID"=5000555))
15 - access("TPTRJO1"."JOURNAL_ENTRY_ID"="TPJRCSHDRW1"."JOURNAL_ENTRY_ID")
17 - access("TPDECO1"."JOURNAL_ENTRY_ID"(+)="TPJRCSHDRW1"."JOURNAL_ENTRY_ID")
--There is an index SPE099_JOURNALCASHDRWR which is on
CASH_DRAWER_ID
CASH_DRAWER_DATE
DRAWER_SEQ
But I am wondering why there is TABLE ACCESS BY INDEX ROWID| JOURNAL_CASH_DRAWER when this col is availabe in the indexed table .
Can anyone Please suggest what improvements can be done on this query.WIll change in the table order will have some performance boost.
Please suggest ..
Thanks
PrafullaCould you please execute your query reported here below (pay attention to the gather_plan_statistics hint)
select /*+ gather_plan_statistics */
case
when tpjrcshdrw1.cash_drawer_id = 5000555
then 1
when tptrjo1.other_cash_drawer_id = 5000555
then 2
end trade_type,
tpdeco1.denomination_count_id,
tpdeco1.denomination_category,
tpdeco1.denomination_value,
tpdeco1.denomination_count,
tpdeco1.denomination_type,
tpdeco1.denomination_name,
tptrjo1.transaction_id,
tptrjo1.total_value,
tptrjo1.total_value_ccode,
tptrjo1.journal_entry_id,
tpjrcshdrw1.cash_drawer_id,
tptrjo1.other_cash_drawer_id
from
transaction_journal tptrjo1
inner join journal_cash_drawer tpjrcshdrw1
on tptrjo1.journal_entry_id = tpjrcshdrw1.journal_entry_id
left outer join denomination_count tpdeco1
on tpdeco1.journal_entry_id = tpjrcshdrw1.journal_entry_id
where ((tpjrcshdrw1.cash_drawer_id = 5000555)
or (tptrjo1.other_cash_drawer_id = 5000555))
and (tptrjo1.transaction_id in (563,590,1362,605,562,589,604))
and (tptrjo1.status not in ('I','V','R'))
and ((tptrjo1.reversed_by) is null)
and (tpjrcshdrw1.cash_drawer_date >= to_date('2009-07-24','yyyy-mm-dd') )
and (tptrjo1.total_value 0)
and ((tptrjo1.offset_id) is null);and post the formatted explain plan you will get using
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));IS one of the following indexed columns NULLABLE?
CASH_DRAWER_ID
CASH_DRAWER_DATE
DRAWER_SEQ
Best Regards
Mohamed Houri
www.hourim.wordpress.com
Edited by: Mohamed Houri on 14-juin-2012 7:07 -
Pls see this attached query. This is hitting a table which has around 110 mil recs. And this takes around 60 min to execute. IS there any way to tune it better? I am assuming that because this uses the ' With tmp as' clauses, it might be using the Indexes.
Can anyone suggest some tuning tips?
Satish
WITH all_edbc_pending_edg
AS (SELECT
a.day_sk,
a.case_num,
a.edg_num,
a.edg_trace_id,
a.application_dt,
a.current_elig_ind,
a.payment_begin_dt payment_beg_dt
FROM fct_eligibility_2 a,
dim_edg_activity_type b
WHERE a.current_elig_ind IN ('P','S','A')
and mod(case_num,2)=0
AND b.eff_end_dt IS NULL
AND b.activity_type_cd IN ('IN','RE','IR','PR','OG')
AND a.activity_type_sk=b.activity_type_sk
, Pick_Latest_Prior_Med as
SELECT t3.case_num,
t3.edg_num,
t3.current_elig_ind,
t3.application_dt,
t3.day_sk,
t3.payment_beg_dt,
t3.edg_trace_id
FROM (SELECT t2.*,
Row_number()
OVER(PARTITION BY t2.case_num,t2.edg_num, t2.application_dt ORDER BY t2.day_sk DESC, t2.payment_beg_dt DESC, t2.edg_trace_id DESC) AS rn
FROM all_edbc_pending_edg t2) t3
WHERE t3.rn = 1
Select
case_num,
edg_num,
application_dt,
payment_beg_dt,
edg_trace_id,
current_elig_ind
FROM
SELECT t1.case_num,
t1.edg_num,
t1.application_dt,
t1.payment_beg_dt,
t1.edg_trace_id,
t1.current_elig_ind
FROM (SELECT t.*,
Row_number()
OVER(PARTITION BY t.case_num,t.edg_num ORDER BY t.day_sk DESC, t.payment_beg_dt DESC, t.edg_trace_id DESC) AS rn
FROM Pick_Latest_Prior_Med t) t1
WHERE t1.rn = 1
) p
WHERE
current_elig_ind IN ('P','S')Check this link and post what is required as mentioned in the link.
SQL and PL/SQL FAQ
>
I am assuming that because this uses the ' With tmp as' clauses, it might be using the Indexes.
>
You don't need to assume. You can find out what's exactly happening if you follow the steps described in the above mentioned link.
Regards
Raj -
Help tuning the query on NAST table .
I have the below query on NAST table which is performin very badly:
SELECT objky INTO TABLE i_objky
FROM nast
WHERE kappl = c_kappl
AND ( ( kschl = c_kschl_zbax )
OR ( kschl = c_kschl_zoem ) )
AND vstat = c_vstat_comp
AND objtype = c_likp
AND ( ( datvr EQ w_start_date AND
uhrvr GE w_start_time ) OR
( datvr EQ w_end_date AND
uhrvr LE w_end_time ) OR
( datvr GT w_start_date AND
datvr LT w_end_date ) ).
Further there is already an index on KAPPL and KSCHL.
Message was edited by:
Ashish kumarIf I understood your logic correctly - you are trying to select objects which have outputs processed within your date/time interval.
You can try to rewrite your select to force index 'A' usage as suggested by Christian, but it is not very helpful if you have too many records in NAST as in this case this index is not very selective and optimizer usually ignores it. Of course, you can ask your BASIS folks to tell you if you can use 'hint' addition in your select to force index usage as it depends on DB and some DBs require some work to be done on DB level to enable hints.
Other options could be
- try to provide a range (even if it is wide enough) for object key... it may really help as NAST contains too many records for different objects and this range may help with primary key usage.
- OR if you are interested in these 2 output types only - you can increase the speed of your select significally if you define a separate database table which you will update with these outputs (when they are just created in NAST) and your program (if it usually runs just once per your date.time range) will check the status of these outputs and then delete records from your table or just update them with "processed" status.
You can actually just create a copy of NAST table which is going to be updated when these outputs are processed (from corresponding processing program), so you will have records there with at least date, and then based on these records you can select actual date/time from NAST. It will be much faster... but it requires more design/coding. -
Please hep in tuning the query
Hi,
I have the following query
SELECT* FROM PRICE_LIST WHERE ITEM_CODE NOT IN (SELECT
PRODUCT_ATTR_VAL_DISP FROM QP_LIST_LINES_V WHERE LIST_HEADER_ID=6014)
AND COUNTER BETWEEN 10001 AND 20000
We have 10,000 rows in PRICE_LIST
and 24000 rows QP_LIST_LINES_V
Causing too much cardinality and cost.
Before we did not have any index on PRICE_LIST, later we created an index for COUNTER but the problem still exists.
It is taking too much time
ThanksSQL> select * from table(DBMS_XPLAN.DISPLAY);
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
| 0 | SELECT STATEMENT | | 1 | 47 | 151 (5)|
|* 1 | FILTER | | | | |
|* 2 | TABLE ACCESS FULL | PRICE_LIST | 9751 | 447K| 150 (4)|
|* 3 | FILTER | | | | |
| 4 | NESTED LOOPS | | | | |
| 5 | NESTED LOOPS | | 1 | 276 | 0 (0)|
| 6 | INLIST ITERATOR | | | | |
| 7 | TABLE ACCESS BY INDEX ROWID| QP_LIST_LINES | 1 | 69 | 0 (0)|
|* 8 | INDEX RANGE SCAN | QP_LIST_LINES_N5 | 1 | | 0 (0)|
|* 9 | INDEX RANGE SCAN | QP_PRICING_ATTRIBUTES_N2 | 1 | | 0 (0)|
|* 10 | TABLE ACCESS BY INDEX ROWID | QP_PRICING_ATTRIBUTES | 1 | 207 | 0 (0)|
|* 11 | TABLE ACCESS BY INDEX ROWID | QP_PRICING_ATTRIBUTES | 1 | 59 | 0 (0)|
|* 12 | INDEX RANGE SCAN | QP_PRICING_ATTRIBUTES_N2 | 1 | | 0 (0)|
|* 13 | TABLE ACCESS BY INDEX ROWID | QP_PRICING_ATTRIBUTES | 1 | 47 | 0 (0)|
|* 14 | INDEX RANGE SCAN | QP_PRICING_ATTRIBUTES_N2 | 1 | | 0 (0)|
|* 15 | TABLE ACCESS BY INDEX ROWID | QP_PRICING_ATTRIBUTES | 1 | 59 | 0 (0)|
|* 16 | INDEX RANGE SCAN | QP_PRICING_ATTRIBUTES_N2 | 1 | | 0 (0)|
Predicate Information (identified by operation id):
1 - filter( EXISTS (SELECT 0 FROM "QP"."QP_PRICING_ATTRIBUTES"
"SYS_ALIAS_3","QP"."QP_LIST_LINES" "QPLL" WHERE ("QPPR".ROWID= (SELECT ROWID FROM
"QP"."QP_PRICING_ATTRIBUTES" "QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B1 AND
"PRICING_ATTRIBUTE_CONTEXT"='PRICING ATTRIBUTE' AND
"PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11') OR NOT EXISTS (SELECT 0 FROM
"QP"."QP_PRICING_ATTRIBUTES" "QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B2 AND
"PRICING_ATTRIBUTE_CONTEXT"='PRICING ATTRIBUTE' AND
"PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11') AND "QPPR".ROWID= (SELECT ROWID FROM
"QP"."QP_PRICING_ATTRIBUTES" "QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B3 AND
"PRICING_ATTRIBUTE_CONTEXT" IS NULL AND "PRICING_ATTRIBUTE" IS NULL)) AND
"QPLL"."LIST_HEADER_ID"=6014 AND ("QPLL"."QUALIFICATION_IND"=4 OR
"QPLL"."QUALIFICATION_IND"=6 OR "QPLL"."QUALIFICATION_IND"=20 OR
"QPLL"."QUALIFICATION_IND"=22) AND "QPLL"."PRICING_PHASE_ID"=1 AND
("QPLL"."LIST_LINE_TYPE_CODE"='PBH' OR "QPLL"."LIST_LINE_TYPE_CODE"='PLL') AND
"QPPR"."LIST_LINE_ID"="QPLL"."LIST_LINE_ID" AND "QPPR"."PRICING_PHASE_ID"=1 AND
("QPPR"."QUALIFICATION_IND"=4 OR "QPPR"."QUALIFICATION_IND"=6 OR
"QPPR"."QUALIFICATION_IND"=20 OR "QPPR"."QUALIFICATION_IND"=22) AND
"QP_PRICE_LIST_LINE_UTIL"."GET_PRODUCT_VALUE"('QP_ATTR_DEFNS_PRICING',"QPPR"."PRODUCT_ATTR
IBUTE_CONTEXT","QPPR"."PRODUCT_ATTRIBUTE","QPPR"."PRODUCT_ATTR_VALUE")=:B4))
2 - filter("COUNTER"<=20000 AND "COUNTER">=10000)
3 - filter("QPPR".ROWID= (SELECT ROWID FROM "QP"."QP_PRICING_ATTRIBUTES"
"QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B1 AND "PRICING_ATTRIBUTE_CONTEXT"='PRICING
ATTRIBUTE' AND "PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11') OR NOT EXISTS (SELECT 0 FROM
"QP"."QP_PRICING_ATTRIBUTES" "QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B2 AND
"PRICING_ATTRIBUTE_CONTEXT"='PRICING ATTRIBUTE' AND
"PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11') AND "QPPR".ROWID= (SELECT ROWID FROM
"QP"."QP_PRICING_ATTRIBUTES" "QP_PRICING_ATTRIBUTES" WHERE "LIST_LINE_ID"=:B3 AND
"PRICING_ATTRIBUTE_CONTEXT" IS NULL AND "PRICING_ATTRIBUTE" IS NULL))
8 - access("QPLL"."PRICING_PHASE_ID"=1 AND ("QPLL"."QUALIFICATION_IND"=4 OR
"QPLL"."QUALIFICATION_IND"=6 OR "QPLL"."QUALIFICATION_IND"=20 OR
"QPLL"."QUALIFICATION_IND"=22) AND "QPLL"."LIST_HEADER_ID"=6014)
filter("QPLL"."LIST_LINE_TYPE_CODE"='PBH' OR "QPLL"."LIST_LINE_TYPE_CODE"='PLL')
9 - access("QPPR"."LIST_LINE_ID"="QPLL"."LIST_LINE_ID")
10 - filter("QPPR"."PRICING_PHASE_ID"=1 AND ("QPPR"."QUALIFICATION_IND"=4 OR
"QPPR"."QUALIFICATION_IND"=6 OR "QPPR"."QUALIFICATION_IND"=20 OR
"QPPR"."QUALIFICATION_IND"=22) AND "QP_PRICE_LIST_LINE_UTIL"."GET_PRODUCT_VALUE"('QP_ATTR_
DEFNS_PRICING',"QPPR"."PRODUCT_ATTRIBUTE_CONTEXT","QPPR"."PRODUCT_ATTRIBUTE","QPPR"."PRODU
CT_ATTR_VALUE")=:B1)
11 - filter("PRICING_ATTRIBUTE_CONTEXT"='PRICING ATTRIBUTE' AND
"PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11')
12 - access("LIST_LINE_ID"=:B1)
13 - filter("PRICING_ATTRIBUTE_CONTEXT"='PRICING ATTRIBUTE' AND
"PRICING_ATTRIBUTE"='PRICING_ATTRIBUTE11')
14 - access("LIST_LINE_ID"=:B1)
15 - filter("PRICING_ATTRIBUTE_CONTEXT" IS NULL AND "PRICING_ATTRIBUTE" IS NULL)
16 - access("LIST_LINE_ID"=:B1) Edited by: user9075673 on May 29, 2011 8:40 AM
Edited by: user9075673 on May 29, 2011 8:45 AM -
Please help me in tuning the query....
SELECT /*+ LEADING (WCL_EXPO) */
MAX (a.clm_id) clm, a.clm_nbr, b.expo_nbr, b.entps_covg_cd_id,
'open' status, a.uw_cmpy_map_id, a.rt_st_id, a.src_sys_id, suit_nbr
FROM wcl_clm a,
wcl_expo b,
(SELECT DISTINCT clm_fil_nbr, expo_nbr, suit_nbr
FROM wcl_suit
WHERE ((litg_opn_dtm BETWEEN TO_DATE ('12/31/2010',
'MM/DD/YYYY'
AND TO_DATE ('12/30/2011',
'MM/DD/YYYY'
)) c,
wrd_st st,
wrd_src_sys s
WHERE a.clm_nbr = b.clm_nbr
AND st.st_id = a.rt_st_id
AND b.src_sys_id = a.src_sys_id
AND b.clm_nbr = c.clm_fil_nbr
AND b.expo_nbr = c.expo_nbr
AND a.lob_map_id IN (18, 19)
AND a.src_sys_id IN (1, 3, 4, 12, 13)
AND a.pol_nbr IS NOT NULL
AND a.row_log_del_ind = 'N'
GROUP BY a.clm_nbr,
b.entps_covg_cd_id,
b.expo_nbr,
a.uw_cmpy_map_id,
a.rt_st_id,
a.src_sys_id,
suit_nbrSELECT /*+ LEADING (WCL_EXPO) */
MAX (a.clm_id) clm, a.clm_nbr, b.expo_nbr, b.entps_covg_cd_id,
'open' status, a.uw_cmpy_map_id, a.rt_st_id, a.src_sys_id, suit_nbr
FROM wcl_clm a,
wcl_expo b,
(SELECT DISTINCT clm_fil_nbr, expo_nbr, suit_nbr
FROM wcl_suit
WHERE ((litg_opn_dtm BETWEEN TO_DATE ('12/31/2010',
'MM/DD/YYYY'
AND TO_DATE ('12/30/2011',
'MM/DD/YYYY'
)) c
-- wrd_st st--,
---- wrd_src_sys s --not used any where
WHERE a.clm_nbr = b.clm_nbr
-- AND st.st_id = a.rt_st_id
AND b.src_sys_id = a.src_sys_id
AND b.clm_nbr = c.clm_fil_nbr
AND b.expo_nbr = c.expo_nbr
AND a.lob_map_id IN (18, 19)
AND a.src_sys_id IN (1, 3, 4, 12, 13)
AND a.pol_nbr IS NOT NULL
AND a.row_log_del_ind = 'N'
AND EXISTS (SELECT 1
FROM wrd_st st
WHERE st.st_id = a.rt_st_id)
GROUP BY a.clm_nbr,
b.entps_covg_cd_id,
b.expo_nbr,
a.uw_cmpy_map_id,
a.rt_st_id,
a.src_sys_id,
suit_nbrregards,
Friend -
Please help me to increase the performance of the query
Hello
I am not an oracle expert or developer and i have a problem to resolve.
Below is the query and explaiation plan and seeking the help to improve the performance of the query.
Our Analysis,
The query runs good,takes less one minute and fetches the results but during peak time it takes 8 minutes
Require anyone suggestion's to improve the query.
The query is generated from the Microsft dll so we dont have SQL code and require some help on tuning the tables.
If tuning the query improves then also fine please suggest for that also.
Enviroment: Solaris 8
DB : oracle 9i
(SELECT vw.dispapptobjid, vw.custsiteobjid, vw.emplastname, vw.empfirstname,
vw.scheduledonsite AS starttime, vw.appttype, vw.latestart,
vw.endtime, vw.typetitle, vw.empobjid, vw.latitude, vw.longitude,
vw.workduration AS DURATION, vw.dispatchtype, vw.availability
FROM ora_appt_disp_view vw
WHERE ( ( vw.starttime >=
TO_DATE ('2/12/2007 4:59 PM', 'MM/DD/YYYY HH12:MI AM')
AND vw.starttime <
TO_DATE ('2/21/2007 3:59 PM', 'MM/DD/YYYY HH12:MI AM')
OR vw.endtime >
TO_DATE ('2/12/2007 4:59 PM', 'MM/DD/YYYY HH12:MI AM')
AND vw.endtime <=
TO_DATE ('2/21/2007 3:59 PM', 'MM/DD/YYYY HH12:MI AM')
OR ( vw.starttime <=
TO_DATE ('2/12/2007 4:59 PM', 'MM/DD/YYYY HH12:MI AM')
AND vw.endtime >=
TO_DATE ('2/21/2007 3:59 PM', 'MM/DD/YYYY HH12:MI AM')
UNION
(SELECT 0 AS dispapptobjid, emp.emp_physical_site2site AS custsiteobjid,
emp.last_name AS emplastname, emp.first_name AS empfirstname,
TO_DATE ('1/1/3000', 'MM/DD/YYYY') AS starttime, 'E' AS appttype,
NULL AS latestart, NULL AS endtime, '' AS typetitle,
emp.objid AS empobjid, 0 AS latitude, 0 AS longitude, 0 AS DURATION,
'' AS dispatchtype, 0 AS availability
FROM table_employee emp, table_user usr
WHERE emp.employee2user = usr.objid AND emp.field_eng = 1 AND usr.status = 1)
ORDER BY empobjid, starttime, endtime DESC
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=HINT: ALL_ROWS 23 K 11312
SORT UNIQUE 23 K 3 M 11140
UNION-ALL
VIEW ORA_APPT_DISP_VIEW 17 K 3 M 10485
UNION-ALL
CONCATENATION
NESTED LOOPS OUTER 68 24 K 437
NESTED LOOPS 68 23 K 369
NESTED LOOPS OUTER 68 25 K 505
NESTED LOOPS OUTER 68 24 K 505
NESTED LOOPS 68 23 K 369
NESTED LOOPS 68 22 K 369
NESTED LOOPS OUTER 68 22 K 369
NESTED LOOPS 19 6 K 312
NESTED LOOPS 19 5 K 312
HASH JOIN 19 5 K 293
NESTED LOOPS 19 5 K 274
NESTED LOOPS 19 4 K 236
NESTED LOOPS 19 4 K 198
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 4 K 160
NESTED LOOPS OUTER 19 1 K 103
NESTED LOOPS OUTER 19 2 K 103
NESTED LOOPS OUTER 19 2 K 103
TABLE ACCESS BY INDEX ROWID TABLE_DISPTCHFE 19 1 K 46
INDEX RANGE SCAN GSA_SCHED_REPAIR 44 3
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22 3
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28 3
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_CASE 1 30 2
INDEX UNIQUE SCAN CASE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_SITE 1 12 2
INDEX UNIQUE SCAN SITE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_ADDRESS 1 12 2
INDEX UNIQUE SCAN ADDRESS_OBJINDEX 1 1
TABLE ACCESS FULL TABLE_EMPLOYEE 1 34 1
INDEX UNIQUE SCAN SITE_OBJINDEX 1 6 1
INDEX UNIQUE SCAN USER_OBJINDEX 1 6
TABLE ACCESS BY INDEX ROWID TABLE_X_GSA_TIME_STAMPS 4 48 3
INDEX RANGE SCAN GSAIDX_TS2DISP 1 2
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
TABLE ACCESS BY INDEX ROWID TABLE_MOD_LEVEL 1 12 1
INDEX UNIQUE SCAN MOD_LEVEL_OBJINDEX 1
INDEX UNIQUE SCAN PART_NUM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN SUBCASE_OBJINDX 1 6 1
NESTED LOOPS OUTER 68 25 K 505
NESTED LOOPS OUTER 68 24 K 505
NESTED LOOPS OUTER 68 24 K 437
NESTED LOOPS 68 23 K 369
NESTED LOOPS 68 23 K 369
NESTED LOOPS 68 22 K 369
NESTED LOOPS OUTER 68 22 K 369
NESTED LOOPS 19 6 K 312
NESTED LOOPS 19 5 K 312
NESTED LOOPS 19 5 K 293
NESTED LOOPS 19 5 K 274
NESTED LOOPS 19 4 K 236
NESTED LOOPS 19 4 K 198
NESTED LOOPS OUTER 19 4 K 160
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 2 K 103
NESTED LOOPS OUTER 19 2 K 103
NESTED LOOPS OUTER 19 1 K 103
TABLE ACCESS BY INDEX ROWID TABLE_DISPTCHFE 19 1 K 46
INDEX RANGE SCAN GSA_SCHED_REPAIR 44 3
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22 3
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28 3
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_CASE 1 30 2
INDEX UNIQUE SCAN CASE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_SITE 1 12 2
INDEX UNIQUE SCAN SITE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_ADDRESS 1 12 2
INDEX UNIQUE SCAN ADDRESS_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_EMPLOYEE 1 34 1
INDEX UNIQUE SCAN EMPLOYEE_OBJINDEX 1
INDEX UNIQUE SCAN SITE_OBJINDEX 1 6 1
INDEX UNIQUE SCAN USER_OBJINDEX 1 6
TABLE ACCESS BY INDEX ROWID TABLE_X_GSA_TIME_STAMPS 4 48 3
INDEX RANGE SCAN GSAIDX_TS2DISP 1 2
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN SUBCASE_OBJINDX 1 6 1
TABLE ACCESS BY INDEX ROWID TABLE_MOD_LEVEL 1 12 1
INDEX UNIQUE SCAN MOD_LEVEL_OBJINDEX 1
INDEX UNIQUE SCAN PART_NUM_OBJINDEX 1 6
NESTED LOOPS OUTER 68 25 K 505
NESTED LOOPS OUTER 68 24 K 505
NESTED LOOPS OUTER 68 24 K 437
NESTED LOOPS 68 23 K 369
NESTED LOOPS 68 23 K 369
NESTED LOOPS 68 22 K 369
NESTED LOOPS OUTER 68 22 K 369
NESTED LOOPS 19 6 K 312
NESTED LOOPS 19 5 K 312
NESTED LOOPS 19 5 K 293
NESTED LOOPS 19 5 K 274
NESTED LOOPS 19 4 K 236
NESTED LOOPS 19 4 K 198
NESTED LOOPS OUTER 19 4 K 160
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 3 K 160
NESTED LOOPS OUTER 19 2 K 103
NESTED LOOPS OUTER 19 2 K 103
NESTED LOOPS OUTER 19 1 K 103
TABLE ACCESS BY INDEX ROWID TABLE_DISPTCHFE 19 1 K 46
INDEX RANGE SCAN GSA_REQ_ETA 44 3
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22 3
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 22
INDEX RANGE SCAN GSA_COMDFE 1 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28 3
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_COMMIT_LOG 1 28
INDEX RANGE SCAN IND_CASE_COMMIT2CASE 2 2
TABLE ACCESS BY INDEX ROWID TABLE_CASE 1 30 2
INDEX UNIQUE SCAN CASE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_SITE 1 12 2
INDEX UNIQUE SCAN SITE_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_ADDRESS 1 12 2
INDEX UNIQUE SCAN ADDRESS_OBJINDEX 1 1
TABLE ACCESS BY INDEX ROWID TABLE_EMPLOYEE 1 34 1
INDEX UNIQUE SCAN EMPLOYEE_OBJINDEX 1
INDEX UNIQUE SCAN SITE_OBJINDEX 1 6 1
INDEX UNIQUE SCAN USER_OBJINDEX 1 6
TABLE ACCESS BY INDEX ROWID TABLE_X_GSA_TIME_STAMPS 4 48 3
INDEX RANGE SCAN GSAIDX_TS2DISP 1 2
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN GBST_ELM_OBJINDEX 1 6
INDEX UNIQUE SCAN SUBCASE_OBJINDX 1 6 1
TABLE ACCESS BY INDEX ROWID TABLE_MOD_LEVEL 1 12 1
INDEX UNIQUE SCAN MOD_LEVEL_OBJINDEX 1
INDEX UNIQUE SCAN PART_NUM_OBJINDEX 1 6
NESTED LOOPS 16 K 2 M 5812
HASH JOIN 16 K 2 M 5812
HASH JOIN 16 K 2 M 5286
TABLE ACCESS FULL TABLE_EMPLOYEE 13 K 441 K 28
HASH JOIN 16 K 1 M 5243
TABLE ACCESS FULL TABLE_SCHEDULE 991 11 K 2
HASH JOIN OUTER 16 K 1 M 5240
HASH JOIN OUTER 16 K 1 M 3866
HASH JOIN OUTER 16 K 1 M 450
HASH JOIN 16 K 1 M 44
TABLE ACCESS FULL TABLE_GBST_ELM 781 14 K 2
TABLE ACCESS FULL TABLE_APPOINTMENT 16 K 822 K 41
INDEX FAST FULL SCAN CASE_OBJINDEX 1 M 6 M 201
TABLE ACCESS FULL TABLE_SITE 967 K 11 M 3157
TABLE ACCESS FULL TABLE_ADDRESS 961 K 11 M 1081
INDEX FAST FULL SCAN SITE_OBJINDEX 967 K 5 M 221
INDEX UNIQUE SCAN USER_OBJINDEX 1 6
HASH JOIN 6 K 272 K 51
TABLE ACCESS FULL TABLE_USER 6 K 51 K 21
TABLE ACCESS FULL TABLE_EMPLOYEE 6 K 220 K 28Hi,
First-off, it appear that you are querying a view. I would redo the auery against the base table.
Next, look at a function-based index for the DATE column. Here are my notes:
http://www.dba-oracle.com/t_function_based_indexes.htm
http://www.dba-oracle.com/oracle_tips_index_scan_fbi_sql.htm
Also, make sure you are analyzed properly with dbms_stats:
http://www.dba-oracle.com/art_builder_dbms_stats.htm
And histograms, if appropriate:
http://www.dba-oracle.com/art_builder_histo.htm
Lasty, look at increasing hash_area_size or pga_aggregate_tagtet, depending on your table sizes:
http://www.dba-oracle.com/art_so_undocumented_pga_parameters.htm
Hope this helps. . . .
Donald K. Burleson
Oracle Press Author -
How will the query improve performance when we use hint index_ss
hi,
I got a SQLquery from our Reports team. initially when I ran the query it took long time and I tuned the query using SQL TOAD optimizer ..I ran the tuned query and it fetched the rows faster than the last one. I observed that a new Hint was added to that query. Index_ss+ > can some explain me how this index_ss increase the performance with an exampleAs always the online documentation (at http://tahiti.oracle.com) comes with the answer.
Sadly you need an extra pair of voluntary fingers to search and read it.
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements006.htm#SQLRF50415
Sybrand Bakker
Senior Oracle DBA -
Need help th tuning query or re write the query--
Hi,
Need help to tune the below query or rewrite th query for reducing the execution time Please find the query and explain plan.
QUERY
explain plan FOR SELECT consumer_key,product_key,days_in_product,20100201 period_key FROM
(SELECT consumer_key,
product_key,
days_in_product,
row_number() over ( Partition BY consumer_key order by Days_in_product DESC) row_num
FROM
(SELECT consumer_key,
product_key,
SUM(no_ofdays) days_in_product
FROM
(SELECT pcv.consumer_key,
pcv.product_key,
pcv.product_consumer_valid_from,
pcv.product_consumer_valid_to,
DECODE (SIGN(20100201000000-product_consumer_valid_from),1,20100201000000,product_consumer_valid_from) period_start,
DECODE (SIGN(20100228235959-product_consumer_valid_to),1,product_consumer_valid_to,20100228235959) period_end,
CASE
WHEN to_number(TO_CHAR(cd.activation_date,'YYYYMMDDHH24MISS')) BETWEEN 20100201000000 AND 20100228235959
AND activation_date > to_Date(product_consumer_valid_to,'YYYYMMDDHH24MISS')
THEN 0
WHEN to_number(TO_CHAR(cd.activation_date,'YYYYMMDDHH24MISS')) BETWEEN 20100201000000 AND 20100228235959
AND activation_date BETWEEN to_Date(product_consumer_valid_from,'YYYYMMDDHH24MISS') AND to_Date(product_consumer_valid_to,'YYYYMMDDHH24MISS')
THEN
--to_char(activation_date,'MON-YYYY')='PERIOD_ACTIVE' and activation_date >= to_Date(product_consumer_valid_from,'YYYYMMDDHH24MISS') then
(to_date(DECODE (SIGN(20100228235959-product_consumer_valid_to),1,product_consumer_valid_to,20100228235959),'YYYYMMDDHH24MISS') - to_date(TO_CHAR(activation_date,'YYYYMMDDHH24MISS'),'YYYYMMDDHH24MISS') )
WHEN to_number(TO_CHAR(cd.activation_date,'YYYYMMDDHH24MISS')) < 20100201000000
THEN (to_date(DECODE (SIGN(20100228235959-product_consumer_valid_to),1,product_consumer_valid_to,20100228235959),'YYYYMMDDHH24MISS') - to_Date(DECODE (SIGN(20100201000000-product_consumer_valid_from),1,20100201000000,product_consumer_valid_from),'YYYYMMDDHH24MISS') )
WHEN to_number(TO_CHAR(cd.activation_date,'YYYYMMDDHH24MISS')) > 20100228235959
THEN 0
ELSE
--unusual situation
(to_date(DECODE (SIGN(20100228235959-product_consumer_valid_to),1,product_consumer_valid_to,20100228235959),'YYYYMMDDHH24MISS') - to_Date(DECODE (SIGN(20100201000000-product_consumer_valid_from),1,20100201000000,product_consumer_valid_from),'YYYYMMDDHH24MISS') )
END No_ofDays
FROM cimtran.product_consumer_validity pcv,
consumer_dimension cd
WHERE pcv.consumer_key =cd.consumer_key
AND product_consumer_valid_to >= 20100201000000
AND product_consumer_valid_from <= 20100228235959
--and product_consumer_valid_from > '20090801000000'
ORDER BY consumer_key,
product_key,
product_consumer_valid_from
) a
GROUP BY consumer_key,
product_key
ORDER BY consumer_key,
product_key
) WHERE row_num=1 ;EXPLAIN PLAN
"PLAN_TABLE_OUTPUT"
"Plan hash value: 3823907703"
"| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |"
"| 0 | SELECT STATEMENT | | 4665K| 231M| | 133K (1)| 00:31:08 |"
"|* 1 | VIEW | | 4665K| 231M| | 133K (1)| 00:31:08 |"
"|* 2 | WINDOW SORT PUSHED RANK| | 4665K| 173M| 232M| 133K (1)| 00:31:08 |"
"| 3 | VIEW | | 4665K| 173M| | 104K (1)| 00:24:18 |"
"| 4 | SORT GROUP BY | | 4665K| 182M| 729M| 104K (1)| 00:24:18 |"
"|* 5 | HASH JOIN | | 13M| 533M| 65M| 44241 (1)| 00:10:20 |"
"| 6 | TABLE ACCESS FULL | CONSUMER_DIMENSION | 2657K| 35M| | 4337 (1)| 00:01:01 |"
"|* 7 | TABLE ACCESS FULL | PRODUCT_CONSUMER_VALIDITY | 13M| 351M| | 15340 (2)| 00:03:35 |"
"Predicate Information (identified by operation id):"
" 1 - filter(""ROW_NUM""=1)"
" 2 - filter(ROW_NUMBER() OVER ( PARTITION BY ""CONSUMER_KEY"" ORDER BY "
" INTERNAL_FUNCTION(""DAYS_IN_PRODUCT"") DESC )<=1)"
" 5 - access(""PCV"".""CONSUMER_KEY""=""CD"".""CONSUMER_KEY"")"
" 7 - filter(""PRODUCT_CONSUMER_VALID_FROM""<=20100228235959 AND "
" ""PRODUCT_CONSUMER_VALID_TO"">=20100201000000)"I doubt that this query can be tuned without using indexes. There is a lot of unnecessary work specified in your query, like unnecessary intermediate sorting and selecting unused columns. The cost based optimizer recognized it and skips some of that unnecessary work, it seems. For clarity's sake, I would rewrite your query like below. Note that the query is untested:
select consumer_key
, max(product_key) keep (dense_rank last order by days_in_product) product_key
, max(days_in_product) days_in_product
, 20100201 period_key
from ( select pcv.consumer_key
, pcv.product_key
, sum
( case
when to_number(to_char(cd.activation_date,'yyyymmddhh24miss')) between 20100201000000 and 20100228235959
then
case
when cd.activation_date > to_date(pcv.product_consumer_valid_to,'yyyymmddhh24miss')
then
0
when cd.activation_date between to_date(pcv.product_consumer_valid_from,'yyyymmddhh24miss') and to_date(product_consumer_valid_to,'yyyymmddhh24miss')
then
to_date(to_char(pcv.product_consumer_valid_to),'yyyymmddhh24miss'))
- to_date(to_char(activation_date,'yyyymmddhh24miss'),'yyyymmddhh24miss')
end
when to_number(to_char(cd.activation_date,'yyyymmddhh24miss')) < 20100201000000
then
to_date(to_char(pcv.product_consumer_valid_to),'yyyymmddhh24miss'))
- to_date(to_char(pcv.product_consumer_valid_from),'yyyymmddhh24miss'))
when to_number(to_char(cd.activation_date,'yyyymmddhh24miss')) > 20100228235959
then
0
end
) days_in_product
from cimtran.product_consumer_validity pcv
, consumer_dimension cd
where pcv.consumer_key = cd.consumer_key
and product_consumer_valid_to >= 20100201000000
and product_consumer_valid_from <= 20100228235959
group by consumer_key
, product_key
group by consumer_keyRegards,
Rob. -
Need Help in tuning of the query
Hi all,
Can any body help me how we can rewrite this query in
optimized way.
SELECT A.C1 AS COLUMN_1, B.C2 AS COLUMN_2
FROM A,B
WHERE A.C1 IN (
SELECT COLUMN_1 FROM(
(SELECT A.C1 AS COLUMN_1,
COUNT(C1) AS COUNT,
RANK() OVER (ORDER BY COUNT(C1) DESC) AS RANK
FROM A, B, C
WHERE A.C1 = B.C3
AND B.C2 = C.C1
AND <other conditions>
GROUP BY A.C1)
WHERE RANK <= 10)
AND A.C1 = B.C3
AND <other conditions>
ORDER BY A.C1
I am using <other conditions> are same in outer query and inner query also.
Thanks in Advance,Hi,
Yes exactly I am looking TOP-10 results the query is like this
SELECT A.C1 AS COLUMN_1, B.C2 AS COLUMN_2
FROM A,B
WHERE B.C2 IN (
SELECT COLUMN_1 FROM(
(SELECT B.C2 AS COLUMN_1,
COUNT(A.C1) AS COUNT,
RANK() OVER (ORDER BY COUNT(C1) DESC) AS RANK
FROM A, B, C
WHERE A.C1 = B.C3
AND B.C2 = C.C1
AND <other conditions>
GROUP BY B.C2)
WHERE RANK <= 10)
AND A.C1 = B.C3
AND <other conditions>
ORDER BY B.C2
Thanks -
Tuning the sql query when we have 30 Million records
Hi Friends,
I have query which takes around 25 to 30 Minutes to retrieve 9 Million records.
Oracle version=11.2.0.2
OS=Solaris 10 64bit
query details
CREATE OR REPLACE VIEW TIBEX_ORDERSBYQSIDVIEW
AS
SELECT A."ORDERID", A."USERORDERID", A."ORDERSIDE", A."ORDERTYPE",
A.ORDERSTATUS, A.BOARDID, A.TIMEINFORCE, A.INSTRUMENTID,
A.REFERENCEID, A.PRICETYPE, A.PRICE, A.AVERAGEPRICE,
A.QUANTITY, A.MINIMUMFILL, A.DISCLOSEDQTY, A.REMAINQTY,
A.AON, A.PARTICIPANTID, A.ACCOUNTTYPE, A.ACCOUNTNO,
A.CLEARINGAGENCY, A.LASTINSTRESULT, A.LASTINSTMESSAGESEQUENCE,
A.LASTEXECUTIONID, A.NOTE, A.TIMESTAMP, A.QTYFILLED, A.MEID,
A.LASTINSTREJECTCODE, A.LASTEXECPRICE, A.LASTEXECQTY,
A.LASTINSTTYPE, A.LASTEXECUTIONCOUNTERPARTY, A.VISIBLEQTY,
A.STOPPRICE, A.LASTEXECCLEARINGAGENCY, A.LASTEXECACCOUNTNO,
A.LASTEXECCPCLEARINGAGENCY, A.MESSAGESEQUENCE,
A.LASTINSTUSERALIAS, A.BOOKTIMESTAMP, A.PARTICIPANTIDMM,
A.MARKETSTATE, A.PARTNEREXID, A.LastExecSETTLEMENTCYCLE,
A.LASTEXECPOSTTRADEVENUETYPE, A.PRICELEVELPOSITION,
A.PREVREFERENCEID, A.EXPIRYTIMESTAMP, matchType,
a.lastExecutionRole, a.MDEntryID, a.PegOffset,
a.haltReason, A.COMPARISONPRICE, A.ENTEREDPRICETYPE,
A.ISPEX, A.CLEARINGHANDLING, B.qsid
FROM tibex_Order A,
tibex_Participant b
WHERE a.participantID = b.participantID
AND (A.MessageSequence, A.OrderID) IN (
SELECT max(C.MessageSequence), C.OrderID
FROM tibex_Order C
WHERE LastInstRejectCode = 'OK'
GROUP By C.OrderID
AND a.OrderStatus IN (
SELECT OrderStatus
FROM tibex_orderStatusEnum
WHERE ShortDesc IN (
'ORD_OPEN', 'ORD_EXPIRE', 'ORD_CANCEL', 'ORD_FILLED','ORD_CREATE','ORD_PENDAMD','ORD_PENDCAN'
UNION ALL
SELECT A.ORDERID, A.USERORDERID, A.ORDERSIDE, A.ORDERTYPE,
A.ORDERSTATUS, A.BOARDID, A.TIMEINFORCE, A.INSTRUMENTID,
A.REFERENCEID, A.PRICETYPE, A.PRICE, A.AVERAGEPRICE,
A.QUANTITY, A.MINIMUMFILL, A.DISCLOSEDQTY, A.REMAINQTY,
A.AON, A.PARTICIPANTID, A.ACCOUNTTYPE, A.ACCOUNTNO,
A.CLEARINGAGENCY, A.LASTINSTRESULT, A.LASTINSTMESSAGESEQUENCE,
A.LASTEXECUTIONID, A.NOTE, A.TIMESTAMP, A.QTYFILLED, A.MEID,
A.LASTINSTREJECTCODE, A.LASTEXECPRICE, A.LASTEXECQTY,
A.LASTINSTTYPE, A.LASTEXECUTIONCOUNTERPARTY, A.VISIBLEQTY,
A.STOPPRICE, A.LASTEXECCLEARINGAGENCY, A.LASTEXECACCOUNTNO,
A.LASTEXECCPCLEARINGAGENCY, A.MESSAGESEQUENCE,
A.LASTINSTUSERALIAS, A.BOOKTIMESTAMP, A.PARTICIPANTIDMM,
A.MARKETSTATE, A.PARTNEREXID, A.LastExecSETTLEMENTCYCLE,
A.LASTEXECPOSTTRADEVENUETYPE, A.PRICELEVELPOSITION,
A.PREVREFERENCEID, A.EXPIRYTIMESTAMP, matchType,
a.lastExecutionRole, A.MDEntryID, a.PegOffset,
a.haltReason, A.COMPARISONPRICE, A.ENTEREDPRICETYPE,
A.ISPEX, A.CLEARINGHANDLING, B.qsid
FROM tibex_Order A,
tibex_Participant b
WHERE a.participantID = b.participantID
AND orderstatus in (
SELECT orderstatus
FROM tibex_orderStatusEnum
WHERE ShortDesc in ('ORD_REJECT')
AND 1 IN (
SELECT count(*)
FROM tibex_order c
WHERE c.orderid=a.orderid
AND c.instrumentID=a.instrumentID
/Tried by modifying the query but same result was not retrieved but it was Quicker 6 min.Can Somebody check where i am going wrong.
CREATE OR REPLACE VIEW TIBEX_ORDERSBYQSIDVIEW
AS
WITH REJ AS
SELECT ROWID RID
FROM TIBEX_ORDER
WHERE ORDERSTATUS = (SELECT ORDERSTATUS
FROM TIBEX_ORDERSTATUSENUM
WHERE SHORTDESC = 'ORD_REJECT')
REJ1 AS
SELECT ROWID RID
FROM TIBEX_ORDER
WHERE ORDERSTATUS NOT IN (SELECT ORDERSTATUS
FROM TIBEX_ORDERSTATUSENUM
WHERE SHORTDESC = 'ORD_NOTFND'
OR SHORTDESC = 'ORD_REJECT')
SELECT O.*,
P.QSID
FROM TIBEX_ORDER O,
TIBEX_PARTICIPANT P
WHERE O.PARTICIPANTID = P.PARTICIPANTID
AND O.ROWID IN (
SELECT RID
FROM (
SELECT ROWID RID,
ORDERSTATUS,
RANK () OVER (PARTITION BY ORDERID ORDER BY MESSAGESEQUENCE ASC) R
FROM TIBEX_ORDER
WHERE R = 1
AND RID IN (SELECT RID FROM REJ)
UNION ALL
SELECT O.*,
P.QSID
FROM TIBEX_ORDER O,
TIBEX_PARTICIPANT P
WHERE O.PARTICIPANTID = P.PARTICIPANTID
AND O.ROWID IN (
SELECT RID
FROM (
SELECT ROWID RID,
ORDERSTATUS,
RANK () OVER (PARTITION BY ORDERID ORDER BY MESSAGESEQUENCE DESC) R
FROM TIBEX_ORDER
WHERE R = 1
AND RID IN (SELECT RID FROM REJ1)
);Regards
NMHi Satish,
CREATE OR REPLACE VIEW TIBEX_ORDERSBYQSIDVIEW
(ORDERID, USERORDERID, ORDERSIDE, ORDERTYPE, ORDERSTATUS,
BOARDID, TIMEINFORCE, INSTRUMENTID, REFERENCEID, PRICETYPE,
PRICE, AVERAGEPRICE, QUANTITY, MINIMUMFILL, DISCLOSEDQTY,
REMAINQTY, AON, PARTICIPANTID, ACCOUNTTYPE, ACCOUNTNO,
CLEARINGAGENCY, LASTINSTRESULT, LASTINSTMESSAGESEQUENCE, LASTEXECUTIONID, NOTE,
TIMESTAMP, QTYFILLED, MEID, LASTINSTREJECTCODE, LASTEXECPRICE,
LASTEXECQTY, LASTINSTTYPE, LASTEXECUTIONCOUNTERPARTY, VISIBLEQTY, STOPPRICE,
LASTEXECCLEARINGAGENCY, LASTEXECACCOUNTNO, LASTEXECCPCLEARINGAGENCY, MESSAGESEQUENCE, LASTINSTUSERALIAS,
BOOKTIMESTAMP, PARTICIPANTIDMM, MARKETSTATE, PARTNEREXID, LASTEXECSETTLEMENTCYCLE,
LASTEXECPOSTTRADEVENUETYPE, PRICELEVELPOSITION, PREVREFERENCEID, EXPIRYTIMESTAMP, MATCHTYPE,
LASTEXECUTIONROLE, MDENTRYID, PEGOFFSET, HALTREASON, COMPARISONPRICE,
ENTEREDPRICETYPE, ISPEX, CLEARINGHANDLING, QSID)
AS
SELECT A."ORDERID", A."USERORDERID", A."ORDERSIDE", A."ORDERTYPE",
A.ORDERSTATUS, A.BOARDID, A.TIMEINFORCE, A.INSTRUMENTID,
A.REFERENCEID, A.PRICETYPE, A.PRICE, A.AVERAGEPRICE,
A.QUANTITY, A.MINIMUMFILL, A.DISCLOSEDQTY, A.REMAINQTY,
A.AON, A.PARTICIPANTID, A.ACCOUNTTYPE, A.ACCOUNTNO,
A.CLEARINGAGENCY, A.LASTINSTRESULT, A.LASTINSTMESSAGESEQUENCE,
A.LASTEXECUTIONID, A.NOTE, A.TIMESTAMP, A.QTYFILLED, A.MEID,
A.LASTINSTREJECTCODE, A.LASTEXECPRICE, A.LASTEXECQTY,
A.LASTINSTTYPE, A.LASTEXECUTIONCOUNTERPARTY, A.VISIBLEQTY,
A.STOPPRICE, A.LASTEXECCLEARINGAGENCY, A.LASTEXECACCOUNTNO,
A.LASTEXECCPCLEARINGAGENCY, A.MESSAGESEQUENCE,
A.LASTINSTUSERALIAS, A.BOOKTIMESTAMP, A.PARTICIPANTIDMM,
A.MARKETSTATE, A.PARTNEREXID, A.LastExecSETTLEMENTCYCLE,
A.LASTEXECPOSTTRADEVENUETYPE, A.PRICELEVELPOSITION,
A.PREVREFERENCEID, A.EXPIRYTIMESTAMP, matchType,
a.lastExecutionRole, a.MDEntryID, a.PegOffset,
a.haltReason, A.COMPARISONPRICE, A.ENTEREDPRICETYPE,
A.ISPEX, A.CLEARINGHANDLING, B.qsid
FROM tibex_Order A,
tibex_Participant b
WHERE a.participantID = b.participantID
AND (A.MessageSequence, A.OrderID) IN ( SELECT MAX (C.MessageSequence), C.OrderID
FROM tibex_Order C
WHERE c.LastInstRejectCode = 'OK'
and a.OrderID=c.OrderID
GROUP BY C.OrderID)
AND a.OrderStatus IN (2,4,5,6,1,9,10)
UNION ALL
SELECT A.ORDERID, A.USERORDERID, A.ORDERSIDE, A.ORDERTYPE,
A.ORDERSTATUS, A.BOARDID, A.TIMEINFORCE, A.INSTRUMENTID,
A.REFERENCEID, A.PRICETYPE, A.PRICE, A.AVERAGEPRICE,
A.QUANTITY, A.MINIMUMFILL, A.DISCLOSEDQTY, A.REMAINQTY,
A.AON, A.PARTICIPANTID, A.ACCOUNTTYPE, A.ACCOUNTNO,
A.CLEARINGAGENCY, A.LASTINSTRESULT, A.LASTINSTMESSAGESEQUENCE,
A.LASTEXECUTIONID, A.NOTE, A.TIMESTAMP, A.QTYFILLED, A.MEID,
A.LASTINSTREJECTCODE, A.LASTEXECPRICE, A.LASTEXECQTY,
A.LASTINSTTYPE, A.LASTEXECUTIONCOUNTERPARTY, A.VISIBLEQTY,
A.STOPPRICE, A.LASTEXECCLEARINGAGENCY, A.LASTEXECACCOUNTNO,
A.LASTEXECCPCLEARINGAGENCY, A.MESSAGESEQUENCE,
A.LASTINSTUSERALIAS, A.BOOKTIMESTAMP, A.PARTICIPANTIDMM,
A.MARKETSTATE, A.PARTNEREXID, A.LastExecSETTLEMENTCYCLE,
A.LASTEXECPOSTTRADEVENUETYPE, A.PRICELEVELPOSITION,
A.PREVREFERENCEID, A.EXPIRYTIMESTAMP, matchType,
a.lastExecutionRole, A.MDEntryID, a.PegOffset,
a.haltReason, A.COMPARISONPRICE, A.ENTEREDPRICETYPE,
A.ISPEX, A.CLEARINGHANDLING, B.qsid
FROM tibex_Order A,
tibex_Participant b
WHERE a.participantID = b.participantID
AND orderstatus=3
AND 1 IN (
SELECT count(*)
FROM tibex_order c
WHERE c.orderid=a.orderid
AND c.instrumentID=a.instrumentID
select * from TIBEX_ORDERSBYQSIDVIEW where participantid='NITE';
Current SQL using Temp Segment and Look for Column TEMPSEG_SIZE_MB
SID TIME OPERATION ESIZE MEM MAX MEM PASS TEMPSEG_SIZE_MB
183 11/10/2011:13:38:44 HASH-JOIN 43 43 1556 1 1024
183 11/10/2011:13:38:44 GROUP BY (HASH) 2043 2072 2072 0 4541Edited by: NM on 11-Oct-2011 04:38 -
Hi All,
I have query in using oracle report , its taking long time to run the report when we run for 1 month period , even its taking time trying with 1 or 2 days also .
below is the query , here we are using most of the VIew also , please help me how to improve the perfomance of this.what needs to concentrate mainly here . please help me out. Thanks in advance.
SELECT
pd.segment20 discipline,
ppx.employee_number,
SUBSTR (ppx.full_name, 1, 50) fullname,
pj.NAME designation,
horg.NAME department,
SUM (a.measure) hours,
d.segment1 projectnumber,
d.NAME projectname,
pat.task_name
FROM per_analysis_criteria pd,
per_people_x ppx,
per_jobs_v pj,
hr_all_organization_units horg,
hxc_time_building_blocks a,
pa_projects_all d,
pa_tasks pat,
hxc_time_attribute_usages b,
hxc_time_attributes c,
hxc_time_building_blocks DAY,
hxc_time_building_blocks TIME,
per_assignments_x pax,
hxc_timecard_summary summary,
per_person_analyses pe,
per_special_info_types_v pf
WHERE pax.organization_id = horg.organization_id
AND pd.id_flex_num = pf.id_flex_num
AND pd.analysis_criteria_id = pe.analysis_criteria_id
AND pax.job_id = pj.job_id
AND c.attribute1 = pat.project_id
AND c.attribute2 = pat.task_id
AND a.time_building_block_id = b.time_building_block_id
AND d.project_id = c.attribute1
AND pat.task_id = c.attribute2
AND b.time_attribute_id = c.time_attribute_id
AND a.parent_building_block_id = DAY.time_building_block_id
AND a.parent_building_block_ovn = DAY.object_version_number
AND DAY.parent_building_block_id = TIME.time_building_block_id
AND DAY.parent_building_block_ovn= TIME.object_version_number
AND TIME.time_building_block_id = summary.timecard_id
AND TIME.object_version_number = summary.timecard_ovn
AND a.resource_id = ppx.person_id
AND ppx.person_id = pax.person_id
AND pf.id_flex_num = pe.id_flex_num
AND pe.person_id = ppx.person_id
AND pf.business_group_id = pe.business_group_id
AND a.object_version_number = b.time_building_block_ovn
AND pax.primary_flag = 'Y'
AND summary.approval_status = 'APPROVED'
AND a.SCOPE = 'DETAIL'
AND pf.NAME = 'SEC Staff Movement'
AND c.attribute_category = 'PROJECTS'
AND d.segment1 LIKE '905%'
AND DAY.start_time >= :p_start_date
AND TRUNC (DAY.stop_time, 'DD') <= :p_end_date
AND SYSDATE BETWEEN a.date_from AND a.date_to
AND SYSDATE BETWEEN DAY.date_from AND DAY.date_to
AND SYSDATE BETWEEN TIME.date_from AND TIME.date_to
AND a.object_version_number =
(SELECT MAX (b.object_version_number)
FROM hxc_time_building_blocks b
WHERE b.time_building_block_id = a.time_building_block_id)
AND pe.date_from = (SELECT MAX (xsm.date_from)
FROM xsec_staff_movement xsm
WHERE xsm.emp_person_id = ppx.person_id)
GROUP BY pd.segment20,
ppx.employee_number,
SUBSTR (ppx.full_name, 1, 50),
pj.NAME,
horg.NAME,
d.segment1,
d.NAME,
pat.task_name
[\pre]
Thanks
RG
Message was edited by:
user549459Hi Rob , I managed to recreate the plan table and below is the out put. please help me out
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 1 | 573 | 383 |
| 1 | SORT GROUP BY | | 1 | 573 | 380 |
|* 2 | FILTER | | | | |
| 3 | NESTED LOOPS | | 1 | 573 | 355 |
| 4 | NESTED LOOPS | | 1 | 554 | 353 |
| 5 | NESTED LOOPS | | 1 | 529 | 351 |
| 6 | NESTED LOOPS | | 1 | 484 | 349 |
| 7 | NESTED LOOPS | | 1 | 461 | 348 |
| 8 | NESTED LOOPS | | 1 | 417 | 347 |
| 9 | NESTED LOOPS | | 1 | 394 | 345 |
| 10 | NESTED LOOPS | | 1 | 379 | 342 |
| 11 | NESTED LOOPS | | 1 | 328 | 181 |
| 12 | NESTED LOOPS | | 1 | 305 | 180 |
| 13 | NESTED LOOPS | | 1 | 297 | 179 |
| 14 | NESTED LOOPS | | 1 | 287 | 178 |
| 15 | NESTED LOOPS | | 1 | 256 | 177 |
| 16 | NESTED LOOPS | | 1 | 215 | 173 |
PLAN_TABLE_OUTPUT
| 17 | NESTED LOOPS | | 1 | 97 | 171 |
| 18 | NESTED LOOPS | | 1 | 71 | 169 |
|* 19 | HASH JOIN | | 1 | 59 | 5 |
| 20 | NESTED LOOPS | | 1 | 51 | 2 |
|* 21 | TABLE ACCESS BY INDEX ROWID | FND_ID_FLEX_STRUCTURES_TL | 1 | 37 | 2 |
|* 22 | INDEX RANGE SCAN | FND_ID_FLEX_STRUCTURES_TL_N1 | 1 | | 1 |
|* 23 | INDEX UNIQUE SCAN | FND_ID_FLEX_STRUCTURES_U1 | 1 | 14 | |
| 24 | TABLE ACCESS FULL | PER_SPECIAL_INFO_TYPES | 45 | 360 | 2 |
| 25 | TABLE ACCESS BY INDEX ROWID | PER_ANALYSIS_CRITERIA | 1527 | 18324 | 164 |
|* 26 | INDEX RANGE SCAN | PER_ANALYSIS_CRITERIA_N1 | 1768 | | 6 |
|* 27 | TABLE ACCESS BY INDEX ROWID | PER_PERSON_ANALYSES | 1 | 26 | 2 |
|* 28 | INDEX RANGE SCAN | PER_PERSON_ANALYSES_FK2 | 3 | | 1 |
|* 29 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 118 | 2 |
|* 30 | INDEX RANGE SCAN | PER_PEOPLE_F_PK | 1 | | 1 |
| 31 | SORT AGGREGATE | | 1 | 417 | |
| 32 | NESTED LOOPS OUTER | | 1 | 417 | 25 |
| 33 | NESTED LOOPS OUTER | | 1 | 319 | 23 |
| 34 | NESTED LOOPS OUTER | | 1 | 221 | 21 |
| 35 | NESTED LOOPS OUTER | | 1 | 217 | 21 |
| 36 | NESTED LOOPS OUTER | | 1 | 213 | 21 |
| 37 | NESTED LOOPS OUTER | | 1 | 209 | 21 |
PLAN_TABLE_OUTPUT
| 38 | NESTED LOOPS OUTER | | 1 | 205 | 21 |
|* 39 | HASH JOIN | | 1 | 201 | 21 |
| 40 | NESTED LOOPS | | 1 | 177 | 18 |
| 41 | NESTED LOOPS | | 1 | 51 | 17 |
|* 42 | TABLE ACCESS BY INDEX ROWID| PER_ALL_ASSIGNMENTS_F | 1 | 33 | 5 |
|* 43 | INDEX RANGE SCAN | PER_ASSIGNMENTS_F_N12 | 3 | | 2 |
| 44 | TABLE ACCESS BY INDEX ROWID| PER_PERSON_ANALYSES | 1 | 18 | 12 |
|* 45 | INDEX RANGE SCAN | PER_PERSON_ANALYSES_N3 | 1 | | 1 |
| 46 | TABLE ACCESS BY INDEX ROWID | PER_ANALYSIS_CRITERIA | 1 | 126 | 1 |
|* 47 | INDEX UNIQUE SCAN | PER_ANALYSIS_CRITERIA_PK | 1 | | |
|* 48 | TABLE ACCESS FULL | FND_ID_FLEX_STRUCTURES | 1 | 24 | 2 |
|* 49 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | 4 | |
|* 50 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | 4 | |
|* 51 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | 4 | |
|* 52 | INDEX UNIQUE SCAN | PA_PROJECTS_U1 | 1 | 4 | |
|* 53 | INDEX UNIQUE SCAN | PA_PROJECTS_U1 | 1 | 4 | |
|* 54 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 98 | 2 |
|* 55 | INDEX RANGE SCAN | PER_PEOPLE_F_PK | 1 | | 1 |
|* 56 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 98 | 2 |
|* 57 | INDEX RANGE SCAN | PER_PEOPLE_F_PK | 1 | | 1 |
|* 58 | TABLE ACCESS BY INDEX ROWID | PER_ALL_ASSIGNMENTS_F | 1 | 41 | 4 |
PLAN_TABLE_OUTPUT
|* 59 | INDEX RANGE SCAN | PER_ASSIGNMENTS_F_N12 | 3 | | 1 |
| 60 | TABLE ACCESS BY INDEX ROWID | HR_ALL_ORGANIZATION_UNITS | 1 | 31 | 1 |
|* 61 | INDEX UNIQUE SCAN | HR_ORGANIZATION_UNITS_PK | 1 | | |
| 62 | TABLE ACCESS BY INDEX ROWID | PER_JOBS | 1 | 10 | 1 |
|* 63 | INDEX UNIQUE SCAN | PER_JOBS_PK | 1 | | |
|* 64 | TABLE ACCESS BY INDEX ROWID | PER_JOB_GROUPS | 1 | 8 | 1 |
|* 65 | INDEX UNIQUE SCAN | PER_JOB_GROUPS_PK | 1 | | |
| 66 | TABLE ACCESS BY INDEX ROWID | PER_JOBS_TL | 1 | 23 | 1 |
|* 67 | INDEX UNIQUE SCAN | PER_JOBS_TL_PK | 1 | | |
|* 68 | TABLE ACCESS BY INDEX ROWID | HXC_TIME_BUILDING_BLOCKS | 8 | 408 | 161 |
|* 69 | INDEX RANGE SCAN | HXC_TIME_BUILDING_BLOCKS_FK2 | 543 | | 5 |
| 70 | TABLE ACCESS BY INDEX ROWID | HXC_TIME_ATTRIBUTE_USAGES | 1 | 15 | 3 |
|* 71 | INDEX RANGE SCAN | HXC_TIME_ATTRIBUTE_USAGES_FK2 | 1 | | 2 |
|* 72 | TABLE ACCESS BY INDEX ROWID | HXC_TIME_ATTRIBUTES | 1 | 23 | 2 |
|* 73 | INDEX UNIQUE SCAN | HXC_TIME_ATTRIBUTES_PK | 1 | | 1 |
|* 74 | TABLE ACCESS BY INDEX ROWID | PA_PROJECTS_ALL | 1 | 44 | 1 |
|* 75 | INDEX UNIQUE SCAN | PA_PROJECTS_U1 | 1 | | |
|* 76 | TABLE ACCESS BY INDEX ROWID | PA_TASKS | 1 | 23 | 1 |
|* 77 | INDEX UNIQUE SCAN | PA_TASKS_U1 | 1 | | |
|* 78 | TABLE ACCESS BY INDEX ROWID | HXC_TIME_BUILDING_BLOCKS | 1 | 45 | 2 |
|* 79 | INDEX UNIQUE SCAN | HXC_TIME_BUILDING_BLOCKS_PK | 1 | | 1 |
PLAN_TABLE_OUTPUT
|* 80 | TABLE ACCESS BY INDEX ROWID | HXC_TIME_BUILDING_BLOCKS | 1 | 25 | 2 |
|* 81 | INDEX UNIQUE SCAN | HXC_TIME_BUILDING_BLOCKS_PK | 1 | | 1 |
|* 82 | TABLE ACCESS BY INDEX ROWID | HXC_TIMECARD_SUMMARY | 1 | 19 | 2 |
|* 83 | INDEX UNIQUE SCAN | HXC_TIMECARD_SUMMARY_PK | 1 | | 1 |
| 84 | SORT AGGREGATE | | 1 | 9 | |
| 85 | FIRST ROW | | 1 | 9 | 3 |
|* 86 | INDEX RANGE SCAN (MIN/MAX) | HXC_TIME_BUILDING_BLOCKS_PK | 10M| | 3 |
Predicate Information (identified by operation id):
2 - filter("SYS_ALIAS_1"."OBJECT_VERSION_NUMBER"= (SELECT /*+ */ MAX("B"."OBJECT_VERSION_NUMBER")
"HXC"."HXC_TIME_BUILDING_BLOCKS" "B" WHERE "B"."TIME_BUILDING_BLOCK_ID"=:B1))
19 - access("X"."ID_FLEX_NUM"="B"."ID_FLEX_NUM")
21 - filter("T"."ID_FLEX_CODE"='PEA')
22 - access("T"."ID_FLEX_STRUCTURE_NAME"='SEC Staff Movement' AND "T"."LANGUAGE"=:B1)
23 - access("B"."APPLICATION_ID"="T"."APPLICATION_ID" AND "B"."ID_FLEX_CODE"="T"."ID_FLEX_CODE" AN
"B"."ID_FLEX_NUM"="T"."ID_FLEX_NUM")
filter("B"."ID_FLEX_CODE"='PEA')
26 - access("PD"."ID_FLEX_NUM"="X"."ID_FLEX_NUM")
PLAN_TABLE_OUTPUT
27 - filter("X"."ID_FLEX_NUM"="PE"."ID_FLEX_NUM" AND "X"."BUSINESS_GROUP_ID"="PE"."BUSINESS_GROUP_
28 - access("PD"."ANALYSIS_CRITERIA_ID"="PE"."ANALYSIS_CRITERIA_ID")
29 - filter(DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS"."HR_SECURITY"."SHOW_PERSON"
ID","SYS_ALIAS_2"."CURRENT_APPLICANT_FLAG","SYS_ALIAS_2"."CURRENT_EMPLOYEE_FLAG","SYS_ALIAS_2
S_2"."EMPLOYEE_NUMBER","SYS_ALIAS_2"."APPLICANT_NUMBER","SYS_ALIAS_2"."NPW_NUMBER"))='TRUE' A
"SYS_ALIAS_2"."BUSINESS_GROUP_ID"=DECODE("APPS"."HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"SYS_ALI
S"."HR_GENERAL"."GET_BUSINESS_GROUP_ID"()))
30 - access("PE"."PERSON_ID"="SYS_ALIAS_2"."PERSON_ID" AND "SYS_ALIAS_2"."EFFECTIVE_END_DATE">=TRU
"SYS_ALIAS_2"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!))
filter("SYS_ALIAS_2"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!) AND
"SYS_ALIAS_2"."EFFECTIVE_END_DATE">=TRUNC(SYSDATE@!) AND "PE"."DATE_FROM"= (SELECT /*+ */ MAX
"PA"."PA_TASKS" "PAT3","PA"."PA_TASKS" "PAT2","PA"."PA_TASKS" "PAT1","HR"."PER_ALL_PEOPLE_F"
"PAP","PA"."PA_PROJECTS_ALL" "PAP2","PA"."PA_PROJECTS_ALL" "PAP1","APPLSYS"."FND_ID_FLEX_STRU
"D","HR"."PER_ALL_ASSIGNMENTS_F" "PAA","HR"."PER_PERSON_ANALYSES" "B","HR"."PER_ANALYSIS_CRIT
"A"."ANALYSIS_CRITERIA_ID"="B"."ANALYSIS_CRITERIA_ID" AND "B"."PERSON_ID"="PAA"."PERSON_ID" A
"PAA"."PERSON_ID"=:B2 AND "PAA"."PRIMARY_FLAG"='Y' AND DECODE("APPS"."HR_SECURITY"."VIEW_ALL"
ITY"."SHOW_RECORD"('PER_ALL_ASSIGNMENTS_F',"PAA"."ASSIGNMENT_ID",TO_CHAR("PAA"."PERSON_ID"),"
' AND "PAA"."BUSINESS_GROUP_ID"=DECODE("APPS"."HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAA"."BUS
ERAL"."GET_BUSINESS_GROUP_ID"()) AND "PAA"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!) AND
"PAA"."EFFECTIVE_END_DATE">=TRUNC(SYSDATE@!) AND "A"."ID_FLEX_NUM"="D"."ID_FLEX_NUM" AND
"D"."ID_FLEX_STRUCTURE_CODE"='SEC_STAFF_MOVEMENT' AND "PAP1"."PROJECT_ID"(+)=TO_NUMBER("A"."S
PLAN_TABLE_OUTPUT
"PAP2"."PROJECT_ID"(+)=TO_NUMBER("A"."SEGMENT3") AND "PAP"."PERSON_ID"(+)=TO_NUMBER("A"."SEGM
DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS"."HR_SECURITY"."SHOW_PERSON"("PAP".
APPLICANT_FLAG"(+),"PAP"."CURRENT_EMPLOYEE_FLAG"(+),"PAP"."CURRENT_NPW_FLAG"(+),"PAP"."EMPLOY
NUMBER"(+),"PAP"."NPWNUMBER"(+)))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"(+)=DECODE("APPS"."HR
'Y',"PAP"."BUSINESS_GROUP_ID"(+),"APPS"."HR_GENERAL"."GET_BUSINESS_GROUP_ID"()) AND
"PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!) AND "PAP"."EFFECTIVE_END_DATE"(+)>=TRUNC(SY
"PAP"."PERSON_ID"(+)=TO_NUMBER("A"."SEGMENT11") AND DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),
"."SHOW_PERSON"("PAP"."PERSON_ID"(+),"PAP"."CURRENT_APPLICANT_FLAG"(+),"PAP"."CURRENT_EMPLOYE
FLAG"(+),"PAP"."EMPLOYEE_NUMBER"(+),"PAP"."APPLICANT_NUMBER"(+),"PAP"."NPW_NUMBER"(+)))='TRUE
"PAP"."BUSINESS_GROUP_ID"(+)=DECODE("APPS"."HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINE
ERAL"."GET_BUSINESS_GROUP_ID"()) AND "PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!) AND
"PAP"."EFFECTIVE_END_DATE"(+)>=TRUNC(SYSDATE@!) AND "PAT1"."TASK_ID"(+)=TO_NUMBER("A"."SEGMEN
"PAT2"."TASK_ID"(+)=TO_NUMBER("A"."SEGMENT18") AND "PAT3"."TASK_ID"(+)=TO_NUMBER("A"."SEGMENT
39 - access("A"."ID_FLEX_NUM"="D"."ID_FLEX_NUM")
42 - filter("PAA"."PRIMARY_FLAG"='Y' AND DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS
ECORD"('PER_ALL_ASSIGNMENTS_F',"PAA"."ASSIGNMENT_ID",TO_CHAR("PAA"."PERSON_ID"),"PAA"."ASSIGN
"PAA"."BUSINESS_GROUP_ID"=DECODE("APPS"."HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAA"."BUSINESS_
"GET_BUSINESS_GROUP_ID"()))
43 - access("PAA"."PERSON_ID"=:B1 AND "PAA"."EFFECTIVE_END_DATE">=TRUNC(SYSDATE@!) AND
"PAA"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!))
filter("PAA"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!) AND "PAA"."EFFECTIVE_END_DATE">=TRUNC(S
PLAN_TABLE_OUTPUT
45 - access("B"."PERSON_ID"="PAA"."PERSON_ID")
filter("B"."PERSON_ID"=:B1)
47 - access("A"."ANALYSIS_CRITERIA_ID"="B"."ANALYSIS_CRITERIA_ID")
48 - filter("D"."ID_FLEX_STRUCTURE_CODE"='SEC_STAFF_MOVEMENT')
49 - access("PAT3"."TASK_ID"(+)=TO_NUMBER("A"."SEGMENT21"))
50 - access("PAT2"."TASK_ID"(+)=TO_NUMBER("A"."SEGMENT18"))
51 - access("PAT1"."TASK_ID"(+)=TO_NUMBER("A"."SEGMENT2"))
52 - access("PAP2"."PROJECT_ID"(+)=TO_NUMBER("A"."SEGMENT3"))
53 - access("PAP1"."PROJECT_ID"(+)=TO_NUMBER("A"."SEGMENT1"))
54 - filter(DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS"."HR_SECURITY"."SHOW_PERSON"
PAP"."CURRENT_APPLICANT_FLAG"(+),"PAP"."CURRENT_EMPLOYEE_FLAG"(+),"PAP"."CURRENT_NPW_FLAG"(+)
AP"."APPLICANT_NUMBER"(+),"PAP"."NPW_NUMBER"(+)))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"(+)=DEC
BG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID"(+),"APPS"."HR_GENERAL"."GET_BUSINESS_GROUP_ID"())
55 - access("PAP"."PERSON_ID"(+)=TO_NUMBER("A"."SEGMENT11") AND "PAP"."EFFECTIVE_END_DATE"(+)>=TRU
"PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!))
filter("PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!) AND "PAP"."EFFECTIVE_END_DATE"(+)>=T
56 - filter(DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS"."HR_SECURITY"."SHOW_PERSON"
PAP"."CURRENT_APPLICANT_FLAG"(+),"PAP"."CURRENT_EMPLOYEE_FLAG"(+),"PAP"."CURRENT_NPW_FLAG"(+)
AP"."APPLICANT_NUMBER"(+),"PAP"."NPW_NUMBER"(+)))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"(+)=DEC
BG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID"(+),"APPS"."HR_GENERAL"."GET_BUSINESS_GROUP_ID"())
57 - access("PAP"."PERSON_ID"(+)=TO_NUMBER("A"."SEGMENT4") AND "PAP"."EFFECTIVE_END_DATE"(+)>=TRUN
PLAN_TABLE_OUTPUT
"PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!))
filter("PAP"."EFFECTIVE_START_DATE"(+)<=TRUNC(SYSDATE@!) AND "PAP"."EFFECTIVE_END_DATE"(+)>=T
58 - filter("PAA"."PRIMARY_FLAG"='Y' AND DECODE("APPS"."HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"APPS
ECORD"('PER_ALL_ASSIGNMENTS_F',"PAA"."ASSIGNMENT_ID",TO_CHAR("PAA"."PERSON_ID"),"PAA"."ASSIGN
"PAA"."BUSINESS_GROUP_ID"=DECODE("APPS"."HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAA"."BUSINESS_
"GET_BUSINESS_GROUP_ID"()))
59 - access("SYS_ALIAS_2"."PERSON_ID"="PAA"."PERSON_ID" AND "PAA"."EFFECTIVE_END_DATE">=TRUNC(SYSD
"PAA"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!))
filter("PAA"."EFFECTIVE_START_DATE"<=TRUNC(SYSDATE@!) AND "PAA"."EFFECTIVE_END_DATE">=TRUNC(S
61 - access("PAA"."ORGANIZATION_ID"="HORG"."ORGANIZATION_ID")
63 - access("PAA"."JOB_ID"="JOB"."JOB_ID")
64 - filter("JGR"."INTERNAL_NAME"='HR_'||TO_CHAR("JOB"."BUSINESS_GROUP_ID"))
65 - access("JOB"."JOB_GROUP_ID"="JGR"."JOB_GROUP_ID")
67 - access("JBT"."JOB_ID"="JOB"."JOB_ID" AND "JBT"."LANGUAGE"=:B1)
68 - filter("SYS_ALIAS_1"."PARENT_BUILDING_BLOCK_ID" IS NOT NULL AND "SYS_ALIAS_1"."PARENT_BUILDIN
NULL AND "SYS_ALIAS_1"."DATE_FROM"<=SYSDATE@! AND "SYS_ALIAS_1"."DATE_TO">=SYSDATE@!)
69 - access("SYS_ALIAS_1"."RESOURCE_ID"="SYS_ALIAS_2"."PERSON_ID" AND "SYS_ALIAS_1"."SCOPE"='DETAI
71 - access("SYS_ALIAS_1"."TIME_BUILDING_BLOCK_ID"="B"."TIME_BUILDING_BLOCK_ID" AND
"SYS_ALIAS_1"."OBJECT_VERSION_NUMBER"="B"."TIME_BUILDING_BLOCK_OVN")
72 - filter("C"."ATTRIBUTE_CATEGORY"='PROJECTS')
73 - access("B"."TIME_ATTRIBUTE_ID"="C"."TIME_ATTRIBUTE_ID")
PLAN_TABLE_OUTPUT
74 - filter("D"."SEGMENT1" LIKE '905%')
75 - access("D"."PROJECT_ID"=TO_NUMBER("C"."ATTRIBUTE1"))
76 - filter("PAT"."PROJECT_ID"=TO_NUMBER("C"."ATTRIBUTE1"))
77 - access("PAT"."TASK_ID"=TO_NUMBER("C"."ATTRIBUTE2"))
78 - filter("DAY"."PARENT_BUILDING_BLOCK_ID" IS NOT NULL AND "DAY"."PARENT_BUILDING_BLOCK_OVN" IS
"DAY"."START_TIME">=:Z AND TRUNC("DAY"."STOP_TIME",'fmdd')<=:Z AND "DAY"."DATE_FROM"<=SYSDATE
"DAY"."DATE_TO">=SYSDATE@!)
79 - access("SYS_ALIAS_1"."PARENT_BUILDING_BLOCK_ID"="DAY"."TIME_BUILDING_BLOCK_ID" AND
"SYS_ALIAS_1"."PARENT_BUILDING_BLOCK_OVN"="DAY"."OBJECT_VERSION_NUMBER")
80 - filter("TIME"."DATE_FROM"<=SYSDATE@! AND "TIME"."DATE_TO">=SYSDATE@!)
81 - access("DAY"."PARENT_BUILDING_BLOCK_ID"="TIME"."TIME_BUILDING_BLOCK_ID" AND
"DAY"."PARENT_BUILDING_BLOCK_OVN"="TIME"."OBJECT_VERSION_NUMBER")
82 - filter("TIME"."OBJECT_VERSION_NUMBER"="SUMMARY"."TIMECARD_OVN" AND "SUMMARY"."APPROVAL_STATUS
83 - access("TIME"."TIME_BUILDING_BLOCK_ID"="SUMMARY"."TIMECARD_ID")
86 - access("B"."TIME_BUILDING_BLOCK_ID"=:B1)
[\pre]
Note: cpu costing is off
Message was edited by:
user549459
Maybe you are looking for
-
Loading flash through ajax does not work in IE 6.
Hi all, I am having some problems on a site I'm developing. When I load a video from youtube, etc, and do so dynamically through ajax, it does not work on IE 6. Mind you it does work on all other browsers. This problem happens with multiple copies of
-
Hi all, I am working on HR ABAP reports. I want to hide a select option icon which uses no intervals and appears as a parameters but actually a select option. suggest how to do this. thanks Sanket
-
I frequently take screen shots while in Google Maps for use in navigation. The problem is the screenshots invariably mount the wrong way in Photo, I.e. In portrait mode instead of landscape. That's one bug. Second, Some photos (those imported from my
-
Problems opening/updating/installing Spotify
Hi. I've been having problems with Spotify freezing and not closing unless I restarted my laptop completely for a while now. I've tried to update it and this just seems to make the whole problem worse. I can open the log in window and then I get a "P
-
how to connect the OMS(Oracle management Server) i am using oracle 9i when i try to connect the OMS, the oracle ask the following thing Administrator: passward: management server: tell the correct ways to connect the oms, my host name is localhost se