Performance of polygon query
Oracle 8.1.7.4
I am doing some complex processing within which
an SQL statement like the following one gets executed:
SELECT mdsys.sdo_geom.sdo_intersection(a.shape,b.diminfo,c.shape,b.diminfo)
FROM mdcadm.base_smz_a a,
(select diminfo from all_sdo_geom_metadata where owner = 'MDCADM' and column_name = 'SHAPE' and table
name = 'BASESMZ_A' ) b,
(select shape from temp_shape_table ) c
WHERE retiredate is null and MDSYS.SDO_RELATE(a.shape,c.shape,'mask=ANYINTERACT querytype=window') = 'TRUE';
All shapes involved are POLYGONS.
There is only a single shape in the temp_shape_table.
Generally, the query performs quite quickly (eg 30
seconds) as long as the shape in temp_shape_table
does not get too complex. However, one particularly
snakey polygon (one representing a wildlife habitat corridor that snakes all over the landscape), choked
the query - it ran for over 9 hours!
Since this query is part of some processing that is
done via triggers, we can't allow situations to occur
where this statement blows out from sub-minute processing
to over 9 hours! (Given that nighly backups disconnect
any connections that exist at the time of the backup,
processing MUST be completed before 1am in the morning!)
Now I solved the problem with a hack - I overlayed the
offending source data polygon with a mapsheet index
and so split the single polygon into about 40 separate
polygons (modifying my primary key to allow for multiple records per key where previously only one was allowed).
Processing dropped back to 30 seconds.
Some, some questions:
1. Is this sort of polygon performance scalability issue
specific to 8.1.7.x versions of Oracle Spatial and
2. Can I expect improvements in 9.x and above to warrant being able to move back the original single polygon shape?
3. Any other suggestions as to improvements?
regards
Simon
Dan,
So I can expect a performance improvement in 9i but
probably not enough for us to go back to single
complex geometries. OK so we will continue with
our practice of splitting them up and having a more
complex primary key (and pl/sql processing). At least
I know. Thanks.
With regards the query the actual original query
was within a PL/SQL function as follows...
OPEN shapeCur FOR
'SELECT mdsys.sdo_geom.sdo_intersection(a.shape,:1,:2,:3)
FROM &owner.base_smz_a a
WHERE retiredate is null and MDSYS.SDO_RELATE(a.shape,:4,''mask=ANYINTERACT querytype=window'') = ''TRUE'''
USING v_diminfo, v_union_shape, v_diminfo, v_union_shape;
LOOP
FETCH shapeCur INTO v_shape;
EXIT WHEN shapeCur%NOTFOUND;
So your comment about query ordering is not important
here but I will look at other code that I have
elsewhere to see if I can improve query performance.
Finally, I have discovered that the above SDO_INTERSECTION
is generating bad geometries which suprises me given
that I supply it with the DIMINFO structure such that
it won't do that. The bad geometry was causing
an MDSYS.SDO_GEOM.RELATE call to fail with the following
error messages:
ORA-13050: unable to construct spatial object
ORA-06512: at "MDSYS.SDO_3GL", line 41
ORA-06512: at "MDSYS.MD2", line 732
ORA-06512: at "MDSYS.SDO_GEOM", line 3164
ORA-06512: at "MDCADM.REBUILDSMZLABELS", line 109
So, as an experiment, I included the following line
immediately after the EXIT WHEN statement above...
--- Ignore shape if it fails validation (maybe it is a sliver?)
IF MDSYS.SDO_GEOM.VALIDATE_GEOMETRY(v_shape,v_diminfo) = 'TRUE' THEN
v_compare := SDO_GEOM.RELATE(v_shape,v_diminfo,'DETERMINE',v_union_shape,v_diminfo);
and now my code works fine. (I only get TRUE or FALSE
for the VALIDATE_GEOMETRY.)
Any comments on this?
regards
Simon
Similar Messages
-
Point-in-polygon query with SDO_GEOMETRY.RELATE
Hello All,
I'm trying to perform a simple point-in-polygon query using
SDO_GEOMETRY.RELATE. Only the "anyinteract" mask seems to return
the correct answer. Can someone point out what I'm doing wrong
and/or suggest a better way to do this. My objective is simply
to return a count of the number of features in the point table
that fall with the selected feature in the polygon table.
select count(*) count from pnttest pnt, polytest poly,
user_sdo_geom_metadata m where SDO_GEOM.RELATE(pnt.shape,
m.diminfo, 'anyinteract',poly.shape,m.diminfo) = 'TRUE'
and m.table_name = 'POLYTEST' and m.column_name = 'SHAPE' and
poly.ADMIN_NAME = 'California'
I would have thought the "inside" mask would be what I want but
it returns 0 instead of the correct answer of 6.
Thanks for any help or suggestions!
-- johnHi John,
If I wanted to do this as fast as possible, and didn't mind
returning points that touch the boundary of the polygon, I would
do something like this (assuming the point layer is indexed):
select /*+ ordered */count(*) count
from polytest poly, pnttest pnt
where SDO_RELATE(pnt.shape,poly.shape,
'mask=anyinteract querytype=window') = 'TRUE'
and poly.ADMIN_NAME = 'California';
If you are wondering what relationship Oracle Spatial thinks
there is between the 6 points and the state, try using the
determine mask with the 6 geometries that return from
anyinteract.
If you are using Oracle Spatial pre-9i, you might also want to
add layer_gtype=point in the quotes.
Hope this is useful.
dan -
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 -
Bad performance of af:query
I am working on Oracle Jdeveloper 11g Release 1
I have a VO which gets executed when the first page gets loaded. suppose the VO is RuleLibraryVO
I have a view criteria RuleLibraryVOCriteria in the VO which is used in the af:query panel in the page.
When i do search for any attribute using the query panel the VO gets executed again everytime even if the VO is in the memory. This is hampering the performance of my query panel as it is again calling getters for all 2000+ rows and then searching. The VO Criteria used is:
<ViewCriteria
Name="RuleLibraryVOCriteria"
ViewObjectName="oracle.sysman.core.gccompliance.model.library.rule.view.RuleLibraryVO"
Conjunction="AND"
Mode="3">
<Properties>
<CustomProperties>
<Property
Name="displayOperators"
Value="InAdvancedMode"/>
<Property
Name="autoExecute"
Value="true"/>
<Property
Name="allowConjunctionOverride"
Value="true"/>
<Property
Name="showInList"
Value="false"/>
<Property
Name="mode"
Value="Basic"/>
<Property
Name="displayName"
ResId="DEFAULT_SEARCH"/>
</CustomProperties>
</Properties>
<ViewCriteriaRow
Name="vcrow3"
UpperColumns="1">
<ViewCriteriaItem
Name="RuleDnameTransient"
ViewAttribute="RuleDnameTransient"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional">
<CompOper
Name="LessThan"
ToDo="-1"
Oper="<"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="LessThanOrEqualTo"
ToDo="-1"
Oper="<="
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThan"
ToDo="-1"
Oper=">"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThanOrEqualTo"
ToDo="-1"
Oper=">="
MinCardinality="0"
MaxCardinality="0"/>
</ViewCriteriaItem>
<ViewCriteriaItem
Name="DescriptionTransient"
ViewAttribute="DescriptionTransient"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional">
<CompOper
Name="LessThan"
ToDo="-1"
Oper="<"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="LessThanOrEqualTo"
ToDo="-1"
Oper="<="
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThan"
ToDo="-1"
Oper=">"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThanOrEqualTo"
ToDo="-1"
Oper=">="
MinCardinality="0"
MaxCardinality="0"/>
</ViewCriteriaItem>
<ViewCriteriaItem
Name="IsSystem"
ViewAttribute="IsSystem"
Operator="="
Conjunction="AND"
Required="Optional"/>
<ViewCriteriaItem
Name="RuleType"
ViewAttribute="RuleType"
Operator="="
Conjunction="AND"
Required="Optional"/>
<ViewCriteriaItem
Name="TargetType"
ViewAttribute="TargetType"
Operator="="
Conjunction="AND"
Required="Optional"
Value=":targetType"
IsBindVarValue="true"/>
<ViewCriteriaItem
Name="KeywordsTransient"
ViewAttribute="KeywordsTransient"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional"/>
</ViewCriteriaRow>
</ViewCriteria>The query panel in jspx is:
<af:query id="qryId2"
headerText="#{coregccomplianceuiBundle.COMPLIANCE_SEARCH}"
disclosed="false"
value="#{bindings.RuleLibraryVOCriteriaQuery.queryDescriptor}"
model="#{bindings.RuleLibraryVOCriteriaQuery.queryModel}"
queryListener="#{bindings.RuleLibraryVOCriteriaQuery.processQuery}"
queryOperationListener="#{bindings.RuleLibraryVOCriteriaQuery.processQueryOperation}"
resultComponentId="::pc1:ruleLib" rows="3" maxColumns="2"
saveQueryMode="hidden"/>How can i optimize the search behavior so that it only searches using the vo data already loaded in memory.Hi Frank,
Thanks for quick response,
As suggested i made the Query Execution Mode to - In-Memory. And my view criteria now is:
<ViewCriteria
Name="RuleLibraryVOCriteria"
ViewObjectName="oracle.sysman.core.gccompliance.model.library.rule.view.RuleLibraryVO"
Conjunction="AND"
Mode="2">
<Properties>
<CustomProperties>
<Property
Name="displayOperators"
Value="InAdvancedMode"/>
<Property
Name="autoExecute"
Value="true"/>
<Property
Name="allowConjunctionOverride"
Value="true"/>
<Property
Name="showInList"
Value="false"/>
<Property
Name="mode"
Value="Basic"/>
<Property
Name="displayName"
ResId="DEFAULT_SEARCH"/>
</CustomProperties>
</Properties>
<ViewCriteriaRow
Name="vcrow3"
UpperColumns="1">
<ViewCriteriaItem
Name="RuleDnameTransient"
ViewAttribute="RuleDnameTransient"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional">
<CompOper
Name="LessThan"
ToDo="-1"
Oper="<"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="LessThanOrEqualTo"
ToDo="-1"
Oper="<="
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThan"
ToDo="-1"
Oper=">"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThanOrEqualTo"
ToDo="-1"
Oper=">="
MinCardinality="0"
MaxCardinality="0"/>
</ViewCriteriaItem>
<ViewCriteriaItem
Name="DescriptionTransient"
ViewAttribute="DescriptionTransient"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional">
<CompOper
Name="LessThan"
ToDo="-1"
Oper="<"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="LessThanOrEqualTo"
ToDo="-1"
Oper="<="
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThan"
ToDo="-1"
Oper=">"
MinCardinality="0"
MaxCardinality="0"/>
<CompOper
Name="GreaterThanOrEqualTo"
ToDo="-1"
Oper=">="
MinCardinality="0"
MaxCardinality="0"/>
</ViewCriteriaItem>
<ViewCriteriaItem
Name="IsSystem"
ViewAttribute="IsSystem"
Operator="="
Conjunction="AND"
Required="Optional"/>
<ViewCriteriaItem
Name="RuleType"
ViewAttribute="RuleType"
Operator="="
Conjunction="AND"
Required="Optional"/>
<ViewCriteriaItem
Name="TargetType"
ViewAttribute="TargetType"
Operator="="
Conjunction="AND"
Required="Optional"
Value=":targetType"
IsBindVarValue="true"/>
<ViewCriteriaItem
Name="KeywordsTransient"
ViewAttribute="*KeywordsTransient*"
Operator="CONTAINS"
Conjunction="AND"
Required="Optional"
UpperColumns="0"/>
</ViewCriteriaRow>
</ViewCriteria>
The performance hit is when i search for attribute: KeywordsTransient.
The attribute is as :
<ViewAttribute
Name="KeywordsTransient"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.String"
ColumnType="VARCHAR2"
AliasName="VIEW_ATTR"
SQLType="VARCHAR">
<RecalcCondition><![CDATA[return (adf.object.isAttributeChanged("Keywords")]]></RecalcCondition>
<TransientExpression><![CDATA[object.Keywords]]></TransientExpression>
<Dependencies>
<Item
Value="Keywords"/>
</Dependencies>
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="KEYWORDS"/>
</SchemaBasedProperties>
</Properties>
</ViewAttribute>
This attribute is dependent on Keywords attribute of the VO , The keyword getter is as below:
* Gets the attribute value for the calculated attribute Keywords.
* @return the Keywords
public String getKeywords() {
if (((String) getAttributeInternal(KEYWORDS)) == null)
long startTime = System.currentTimeMillis();
String keyword = "";
CSRUtil csrUtil = new CSRUtil();
// get the keyword name list from RuleKeywordTableVO which stores ruleGuid to KeywordName mapping. This VO is Loaded in memory as soon as bean initailizes.
Set<String> keywordList =
csrUtil.getRuleKeywordListFromKeywordMapVO(getRuleGuid());
if (keywordList != null)
Iterator rowIter = keywordList.iterator();
while (rowIter.hasNext())
keyword =
keyword.concat(csrUtil.getKeywordNlsIdFromTable((String) rowIter.next())) +
if (keyword.endsWith(", "))
keyword = keyword.substring(0, keyword.length() - 2);
setKeywords(keyword);
setKeywordsTransient(keyword);
long endTime = System.currentTimeMillis();
logger.severe("Time taken for this rule in millis : "+ (endTime-startTime));
return (String) getAttributeInternal(KEYWORDS);
This getter is creating keyword list using nlsid translation based on other tables data for a rule.
Also, I have loaded the rule vo data in memory using invokeAction on my page as below:
<invokeAction id="ExecuteRuleInvoke" Binds="ExecuteRULE"
Refresh="renderModel" RefreshCondition="#{sdk_core_uifwk_refresh_ctrl.executeNeeded}"/>
<action IterBinding="RuleLibraryVO1Iterator" id="ExecuteRULE"
InstanceName="ComplianceLibraryAMDataControl.RuleLibraryVO1"
DataControl="ComplianceLibraryAMDataControl"
RequiresUpdateModel="true" Action="iteratorExecute"/>
So now when i search for a keywordTransient attribute using query panel the getter is always called for keywords even if the VO data is in memory.
So what am i missing, is the data loaded by invokeAction not visible to the query, or i have to use some other optimization. -
Performance of my query based on cube ? and ods?
hi all,
how to identify the performance of my query based on a cube nor ods. I have requirement which enables to do flat file extraction and the extraction is only once and the records are less too. I need to sort whether my query will be faster based upon cube nor on ods.
Can anyone let me know how to measure the performance of my query based upon cube and ods and how to find out which one will be faster. bcos i need to explain them the entire process of going to load the data directly to ods and do reporting from there nor data loaded directly to cube and do reporting from cube.
thanxs
harithaHi,
ODS is 2 Dimensional so avoid reporting on ODS,
Cube is MultiDim, for analysis perpose we can go reporting on Cube only
Records in ODS are Overwritten whereas in Cube records are Aggregated
and can also do compression on Cube, which will increase the query performance and so data retrieval in cube is faster
Thanks -
Need help in optimising the performance of a query
Need help in optimising the performance of a query. Below is the query that is executed on TABLE_A, TABLE_B and TABLE_C with record counts as 10M, 10m and 42 (only) respectively and it takes around 5-7 minutes to get 40 records:
SELECT DISTINCT a.T_ID_, a.FIRSTNAME, b.T_CODE, b.PRODUCT,
CASE WHEN TRUNC(b.DATE) +90 = TRUNC(SYSDATE) THEN -90 WHEN TRUNC(b.DATE) +30 = TRUNC(SYSDATE) THEN -30 ELSE 0 END AS T_DATE FROM TABLE_B b
INNER JOIN TABLE_A a ON (a.T_ID_ = b.T_ID_) LEFT JOIN TABLE_C c ON b.PRODUCT = c.PRODUCT
WHERE b.STATUS = 'T' AND (b.TYPE = 'ACTION'
AND ( TRUNC(b.DATE) + 1 = TRUNC(SYSDATE) ) ) AND b.PRODUCT = 2;
Note: Indices on the join columns are available in the respective tables
Please let me know if there is any better way to write it.
Edited by: 862944 on Aug 18, 2011 9:52 AM862944 wrote:
Need help in optimising the performance of a query. Below is the query that is executed on TABLE_A, TABLE_B and TABLE_C with record counts as 10M, 10m and 42 (only) respectively and it takes around 5-7 minutes to get 40 records:
SELECT DISTINCT a.T_ID_, a.FIRSTNAME, b.T_CODE, b.PRODUCT,
CASE WHEN TRUNC(b.DATE) +90 = TRUNC(SYSDATE) THEN -90 WHEN TRUNC(b.DATE) +30 = TRUNC(SYSDATE) THEN -30 ELSE 0 END AS T_DATE FROM TABLE_B b
INNER JOIN TABLE_A a ON (a.T_ID_ = b.T_ID_) LEFT JOIN TABLE_C c ON b.PRODUCT = c.PRODUCT
WHERE b.STATUS = 'T' AND (b.TYPE = 'ACTION'
AND ( TRUNC(b.DATE) + 1 = TRUNC(SYSDATE) ) ) AND b.PRODUCT = 2;
Note: Indices on the join columns are available in the respective tables
Please let me know if there is any better way to write it.
Edited by: 862944 on Aug 18, 2011 9:52 AM[When Your Query Takes Too Long|https://forums.oracle.com/forums/thread.jspa?messageID=1812597] -
How to improve the performance of the query
Hi,
Help me by giving tips how to improve the performance of the query. Can I post the query?
SureshBelow is the formatted query and no wonder it is taking lot of time. Will give you a list of issues soon after analyzing more. Till then understand the pitfalls yourself from this formatted query.
SELECT rt.awb_number,
ar.activity_id as task_id,
t.assignee_org_unit_id,
t.task_type_code,
ar.request_id
FROM activity_task ar,
request_task rt,
task t
WHERE ar.activity_id =t.task_id
AND ar.request_id = rt.request_id
AND ar.complete_status != 'act.stat.closed'
AND t.assignee_org_unit_id in (SELECT org_unit_id
FROM org_unit
WHERE org_unit_id in (SELECT oo.org_unit_id
FROM org_unit oo
WHERE oo.org_unit_id='3'
OR oo.parent_id ='3'
OR parent_id in (SELECT oo.org_unit_id
FROM org_unit oo
WHERE oo.org_unit_id='3'
OR oo.parent_id ='3'
AND has_queue=1
AND ar.parent_task_id not in (SELECT tt.task_id
FROM task tt
WHERE tt.assignee_org_unit_id in (SELECT org_unit_id
FROM org_unit
WHERE org_unit_id in (SELECT oo.org_unit_id
FROM org_unit oo
WHERE oo.org_unit_id='3'
OR oo.parent_id ='3'
OR parent_id in (SELECT oo.org_unit_id
FROM org_unit oo
WHERE oo.org_unit_id='3'
OR oo.parent_id ='3'
AND has_queue=1
AND rt.awb_number is not null
ORDER BY rt.awb_numberCheers
Sarma. -
HI All, How to improve the performance in given query?
HI All,
How to improve the performance in given query?
Query is..
PARAMETERS : p_vbeln type lips-vbeln.
DATA : par_charg TYPE LIPS-CHARG,
par_werks TYPE LIPS-WERKS,
PAR_MBLNR TYPE MSEG-MBLNR .
SELECT SINGLE charg
werks
INTO (par_charg, par_werks)
FROM lips
WHERE vbeln = p_vbeln.
IF par_charg IS NOT INITIAL.
SELECT single max( mblnr )
INTO par_mblnr
FROM mseg
WHERE bwart EQ '101'
AND werks EQ par_werks (index on werks only)
AND charg EQ par_charg.
ENDIF.
Regards
SteveHi steve,
Can't you use the material in your query (and not only the batch)?
I am assuming your system has an index MSEG~M by MANDT + MATNR + WERKS (+ other fields). Depending on your system (how many different materials you have), this will probably speed up the query considerably.
Anyway, in our system we ended up by creating an index by CHARG, but leave as a last option, only if selecting by matnr and werks is not good enough for your scenario.
Hope this helps,
Rui Dantas -
Please help me how to improve the performance of this query further.
Hi All,
Please help me how to improve the performance of this query further.
Thanks.Hi,
this is not your first SQL tuning request in this community -- you really should learn how to obtain performance diagnostics.
The information you posted is not nearly enough to even start troubleshooting the query -- you haven't specified elapsed time, I/O, or the actual number of rows the query returns.
The only piece of information we have is saying that your query executes within a second. If we believe this, then your query doesn't need tuning. If we don't, then we throw it away
and we're left with nothing.
Start by reading this blog post: Kyle Hailey &raquo; Power of DISPLAY_CURSOR
and applying this knowledge to your case.
Best regards,
Nikolay -
Hello Guys,
iam having performance problem with query .when i run the the query with intial variables its displaying report quickly but when i go drilling with filter values its taking 10 minutes to display report.can anybody suggest me possible solutions for the performance improvement.
Regards
PriyaHi Priya,
First, you have to check what is causing the performance issue. You can do this by running the query in transaction RSRT. Execute the query in debug mode with the option "Display Statistics Data". You can navigate the query as you would normally. After that, check the statistics information and see what causes the performance issue. My guess is that you need to build an aggregate.
If rhe Data Manager time is high (a large % of the total runtime) and the ratio of the number of records selected VS the number of records transfered is high (e.g. > 10), then try to build an aggregate to help on the performance. To check for aggregate suggestions, run RSRT again with the option "Display Aggregates Found". It will show you what characteristics and characteristics selections would help (note that the suggestion might not always be the optimal one).
If OLAP Data Transfer time is high, then try optimizing the query design (e.g. try reducing the amount of restricted KFs or try calculating some KFs during the data flow instead of calculating them in the query).
Hope this helps. -
Performance of the query is poor
Hi All,
This is Prasad. I have a problem with the query it is taking more time to retrieve the data from the Cube. In the query they are using a Variable of type Customer Exit. The Cube is not at compressed. I think the issue with the F fact table is due to the high number of table partitions (requests) that it has to select from. If I compress the cube, the performance of the query is increased r not? Is there any alternative for improving the performance of the query. Somebody suggested Result set query, iam not aware of this technique if u know let me know.
Thanks in advanceHi Prasad,
Query performance will depend on many factors like
1. Aggregates
2. Compression of requests
3. Query read mode setting
4. Cache memory setting
5. By Creating BI Accelerator Indexes on Infocubes
6. Indexes
Proposing aggregates to improve query performance:
First try to execute the query in RSRT on which u required to build aggregates. Check how much time it is taking to execute.....and whether it is required to build aggregate on this querry?? To get this information, Goto SE11> Give tabl name RSDDSTAT_DM in BI7.0 or RSDDSTAT in BW3.x.> Disply -> Contnts-> Give from date and to date values as today, user name as Ur user name, and give the query name
--> execute.
Now u'll get a list with fields like Object anme(Report anme), Time read, Infoprovider name(Multiprovider), Partprovider name (Cube), Aggregate name... etc. If the time read is less than 100,000,000 (100 sec) is acceptable. If the time read is more than 100 sec then it is recommended to create Aggregates for that query to increase performance. Keep in mind this time read.
Again goto RSRT> Give query name> Execute+Debug-->
A popup will come in that select the check box display aggregates found--> continue. If any aggregates or exist for that
query it will display first if u press on continue button, it will display from which cube which fields are coming it will display...try to copy this list of objects on which aggregate can be created into one text file...
then select that particular cube in RSA1>context>Maintain Aggregates-> Create by own> click on create aggregate button on top left side> Give discription of the aggregate>continue> take first object from list and fclick on find button in aggregates creation screen> give the object name and search... drag and drop that object into aggregate name right side (Drag and drop all the fields like this into aggregate).---->
Activate the aggregate--> it will take some time once the activation finishes --> make sure that aggregate is in switch on mode.
Try to xecute the query from RSRT again and find out the time read and compare this with first time read. If it is less tahn first time read then u can propose this aggregate to incraese the performance of the query.
I hope this will help u... go through the below links to know about aggregates more clear.
http://help.sap.com/saphelp_nw04s/helpdata/en/10/244538780fc80de10000009b38f842/frameset.htm
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3f66ba90-0201-0010-ac8d-b61d8fd9abe9
Follow this thread for creation of BIA Indexes:
Re: BIA Creation
Hopr this helps...
Regards,
Ramki. -
Hi All
I have one SAP query which collects data from VBRK, VBUK, VBPA,, VBRP, VBFA and KONV tables.
Some times it is taking a lot of time.
How can I improve the performance of this query.hi,
You can get by using the JOIN's in the query, please take care of these
1, promary index and secondary index.
2, don't join all the table, split them into different queries..bu using FOR ALL ENTRIES
3. give where conditions as many as possible..
4. Sort the result finally..
hope this will help u.
Pradeep -
Performance of the query incresed to 1 hour 15 mins....
the view is working, but the performance of the query is horrible.
Our pull time has increased from 25 minutes to 1 hour and 15 minutes.Can you please advice me the same solution pplies for prodction box also...
Production database details::::
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The query in production database::::
SELECT /*+ALL_ROWS*/
2 a .lcl_id AS Ora_Order, --Order_Number,
3 a.closed_date AS Closed_Date,
4 a.modified_date AS Modified_Date,
5 a.received_date AS Received_Date,
6 a.status AS Status,
7 b.seq AS Ora_Line, --Line_Number
8 b.sub_seq AS Ora_sub_line,
9 c.seq AS Unit_Number,
10 SUBSTR (c.olig_group_id, INSTR (c.olig_group_id,
11 '.',
12 -1,
13 1)
14 + 1)
15 AS shipment_number,
16 c.tag AS Tag,
17 c.special_tag AS Customer_Tag,
18 h.fmly_serial_id AS Serial_Number,
19 d.allocation_timestamp AS Alloc_Date,
20 MIN (f.closed_timestamp) AS First_Event_On_Floor,
21 -- CALIBRATION
22 MAX (DECODE (f.uutt_mstr_id, 1, f.closed_timestamp, NULL))
23 AS Calibration_Date,
24 -- PACKAGING
25 MAX (DECODE (f.uutt_mstr_id, 50, f.closed_timestamp, NULL))
26 AS Package_Date,
27 -- CAPS KITTING
28 MAX(DECODE (
29 f.uutt_mstr_id,
30 100,
31 DECODE (f.stnd_seq, 2024961, f.closed_timestamp, NULL)
32 ))
33 AS Caps_Kitting_Date,
34 lastprodsn.pm_mstr_id AS Tagged_Model,
35 b.CEP AS ETO_Number,
36 j.VALUE AS Product_Options,
37 a.PO AS PO_Number,
38 -- lastprodsn.uut_glbl_id as LastProdSN_UUT_Glbl_ID -- replaced on 3/31/2011 BJACK
39 MAX (DECODE (f.uutt_mstr_id, 2, f.glbl_id, NULL))
40 AS LastProdSN_UUT_Glbl_ID
41 FROM ssc.ordr_hdrs a, -- glbl_id = sales order number
42 ssc.ordr_lns b, -- oh_glbl_id = SO #, SEQ = line number
43 ssc.ordr_ln_itms c, -- ol_oh_glbl_id = SO #, ol_seq = line #, seq = unit #, olig_group_id = shipment #
44 ssc.omar_track_maps d, -- for tracking id, holds the allocation timestamp
45 (SELECT x.uut_glbl_id,
46 x.oli_ol_oh_glbl_id,
47 x.oli_ol_seq,
48 x.oli_ol_sub_seq,
49 x.oli_seq,
50 x.sm_glbl_id,
51 x.pm_mstr_id
52 FROM ssc.serial_prod_uut_maps x
53 JOIN
54 ( SELECT oli_ol_oh_glbl_id,
55 oli_ol_seq,
56 oli_ol_sub_seq,
57 oli_seq,
58 MAX (uut_glbl_id) Max_oli_uut_glbl_id
59 FROM ssc.serial_prod_uut_maps
60 GROUP BY oli_ol_oh_glbl_id,
61 oli_ol_seq,
62 oli_ol_sub_seq,
63 oli_seq) MAXOLIUUT
64 ON MAXOLIUUT.Max_oli_uut_glbl_id = x.uut_glbl_id
65 AND MAXOLIUUT.oli_ol_oh_glbl_id =
66 x.oli_ol_oh_glbl_id
67 AND MAXOLIUUT.oli_ol_seq = x.oli_ol_seq
68 AND MAXOLIUUT.oli_ol_sub_seq = x.oli_ol_sub_seq
69 AND MAXOLIUUT.oli_seq = x.oli_seq) lastprodsn, -- find latest uut for OLI (assumes UUT ids are in sequence so max is latest; needed to deal with SN or product chgs for OLI)
70 ssc.serial_prod_uut_maps e, -- go get all UUT IDs for the OLI's latest product number and serial number
71 ssc.uuts f, -- go get UUT details for all of the good OLI-product-SNs
72 ssc.uut_params g, -- go get the package void parameter (so can exclude them)
73 ssc.serial_mstrs h, -- go get serial number for the SN id
74 ssc.ORDR_LN_PARAMS j -- go get options for product number
75 WHERE -- join a to b sales orders to sales order lines
76 a .glbl_id = b.oh_glbl_id
77 AND -- join b to c to get sales order line items (units for a line item)
78 b.oh_glbl_id = c.ol_oh_glbl_id
79 AND b.seq = c.ol_seq
80 AND b.sub_seq = c.ol_sub_seq
81 AND -- join c to d to get allocation date if available (outer join)
82 c.otm_track_id = d.track_id(+)
83 AND -- join c to lastprodsn
84 c.ol_oh_glbl_id = lastprodsn.oli_ol_oh_glbl_id(+)
85 AND c.ol_seq = lastprodsn.oli_ol_seq(+)
86 AND c.ol_sub_seq = lastprodsn.oli_ol_sub_seq(+)
87 AND c.seq = lastprodsn.oli_seq(+)
88 AND -- join lastprodsn to k to get serial number for last product/serial number processed
89 lastprodsn.sm_glbl_id = h.glbl_id(+)
90 AND -- join lastprodsn to e to go get all the UUT ids for this OLI + Product # + Serial #
91 lastprodsn.oli_ol_oh_glbl_id = e.oli_ol_oh_glbl_id(+)
92 AND lastprodsn.oli_ol_seq = e.oli_ol_seq(+)
93 AND lastprodsn.oli_ol_sub_seq = e.oli_ol_sub_seq(+)
94 AND lastprodsn.oli_seq = e.oli_seq(+)
95 AND lastprodsn.pm_mstr_id = e.pm_mstr_id(+)
96 AND lastprodsn.sm_glbl_id = e.sm_glbl_id(+)
97 AND --join e to f to get UUT details for the good OLI-Product-SN combos
98 e.uut_glbl_id = f.glbl_id(+)
99 AND -- join f to g to get the voided parameter
100 f.glbl_id = g.uut_glbl_id(+)
101 AND -- join c to j to get the option codes for the product number (parameter 2070)
102 c.ol_oh_glbl_id = j.ol_oh_glbl_id(+)
103 AND c.ol_seq = j.ol_seq(+)
104 AND c.ol_sub_seq = j.ol_sub_seq(+)
105 AND c.seq = j.seq(+)
106 AND j.par_mstr_id(+) = 2070
107 AND j.VALUE(+) IS NOT NULL
108 AND -- un-voided packages only
109 g.par_mstr_id(+) = 1003
110 AND (g.uut_glbl_id IS NULL OR g.VALUE = 'N')
111 /* AND -- 1003 = package void status parameter
112 g.VALUE(+) = 'N' */
113 GROUP BY a.lcl_id,
114 b.seq,
115 b.sub_seq,
116 c.seq,
117 c.olig_group_id,
118 a.closed_date,
119 a.modified_date,
120 a.received_date,
121 a.status,
122 c.tag,
123 c.special_tag,
124 h.fmly_serial_id,
125 d.allocation_timestamp,
126 lastprodsn.pm_mstr_id,
127 b.CEP,
128 j.VALUE,
129 a.PO
130 /
SQL>=================
explain plan:::
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 82182 | 29M| | 160K (2)| 00:32:09 |
| 1 | HASH GROUP BY | | 82182 | 29M| 30M| 160K (2)| 00:32:09 |
| 2 | NESTED LOOPS OUTER | | 82182 | 29M| | 154K (2)| 00:30:51 |
| 3 | NESTED LOOPS OUTER | | 82182 | 26M| | 145K (2)| 00:29:12 |
|* 4 | HASH JOIN | | 82182 | 23M| 10M| 137K (2)| 00:27:33 |
| 5 | TABLE ACCESS FULL | ORDR_HDRS | 159K| 8716K| | 397 (4)| 00:00:05 |
|* 6 | HASH JOIN | | 89664 | 20M| 15M| 135K (2)| 00:27:09 |
| 7 | TABLE ACCESS FULL | ORDR_LNS | 506K| 9882K| | 688 (5)| 00:00:09 |
|* 8 | HASH JOIN RIGHT OUTER | | 89424 | 19M| 17M| 133K (2)| 00:26:39 |
| 9 | TABLE ACCESS FULL | OMAR_TRACK_MAPS | 567K| 10M| | 725 (5)| 00:00:09 |
|* 10 | FILTER | | | | | | |
|* 11 | HASH JOIN RIGHT OUTER | | 89424 | 17M| 4440K| 130K (2)| 00:26:09 |
|* 12 | TABLE ACCESS FULL | UUT_PARAMS | 133K| 2869K| | 3608 (7)| 00:00:44 |
|* 13 | HASH JOIN RIGHT OUTER | | 3244K| 563M| 85M| 96934 (3)| 00:19:24 |
| 14 | TABLE ACCESS FULL | UUTS | 2247K| 60M| | 4893 (4)| 00:00:59 |
|* 15 | HASH JOIN RIGHT OUTER | | 3244K| 476M| 239M| 62078 (3)| 00:12:25 |
| 16 | TABLE ACCESS FULL | SERIAL_PROD_UUT_MAPS | 3639K| 197M| | 6481 (4)| 00:01:18 |
|* 17 | HASH JOIN RIGHT OUTER | | 3244K| 300M| | 26716 (4)| 00:05:21 |
| 18 | VIEW | | 1 | 48 | | 18639 (4)| 00:03:44 |
|* 19 | FILTER | | | | | | |
| 20 | HASH GROUP BY | | 1 | 85 | | 18639 (4)| 00:03:44 |
|* 21 | HASH JOIN | | 308K| 25M| 40M| 18587 (4)| 00:03:44 |
|* 22 | TABLE ACCESS FULL| SERIAL_PROD_UUT_MAPS | 1060K| 28M| | 6520 (5)| 00:01:19 |
|* 23 | TABLE ACCESS FULL| SERIAL_PROD_UUT_MAPS | 1060K| 57M| | 6520 (5)| 00:01:19 |
| 24 | TABLE ACCESS FULL | ORDR_LN_ITMS | 3244K| 151M| | 8011 (4)| 00:01:37 |
|* 25 | TABLE ACCESS BY INDEX ROWID | ORDR_LN_PARAMS | 1 | 35 | | 1 (0)| 00:00:01 |
|* 26 | INDEX RANGE SCAN | OLP_OL_FK_I | 1 | | | 1 (0)| 00:00:01 |
| 27 | TABLE ACCESS BY INDEX ROWID | SERIAL_MSTRS | 1 | 37 | | 1 (0)| 00:00:01 |
|* 28 | INDEX RANGE SCAN | SM_PK | 1 | | | 1 (0)| 00:00:01 |
Predicate Information (identified by operation id):
4 - access("A"."GLBL_ID"="B"."OH_GLBL_ID")
6 - access("B"."OH_GLBL_ID"="C"."OL_OH_GLBL_ID" AND "B"."SEQ"="C"."OL_SEQ" AND
"B"."SUB_SEQ"="C"."OL_SUB_SEQ")
8 - access("C"."OTM_TRACK_ID"="D"."TRACK_ID"(+))
10 - filter("G"."UUT_GLBL_ID" IS NULL OR "G"."VALUE"='N')
11 - access("F"."GLBL_ID"="G"."UUT_GLBL_ID"(+))
12 - filter("G"."PAR_MSTR_ID"(+)=1003)
13 - access("E"."UUT_GLBL_ID"="F"."GLBL_ID"(+))
15 - access("LASTPRODSN"."OLI_OL_OH_GLBL_ID"="E"."OLI_OL_OH_GLBL_ID"(+) AND
"LASTPRODSN"."OLI_OL_SEQ"="E"."OLI_OL_SEQ"(+) AND "LASTPRODSN"."OLI_OL_SUB_SEQ"="E"."OLI_OL_SUB_SEQ"(+)
AND "LASTPRODSN"."OLI_SEQ"="E"."OLI_SEQ"(+) AND "LASTPRODSN"."PM_MSTR_ID"="E"."PM_MSTR_ID"(+) AND
"LASTPRODSN"."SM_GLBL_ID"="E"."SM_GLBL_ID"(+))
17 - access("C"."OL_OH_GLBL_ID"="LASTPRODSN"."OLI_OL_OH_GLBL_ID"(+) AND
"C"."OL_SEQ"="LASTPRODSN"."OLI_OL_SEQ"(+) AND "C"."OL_SUB_SEQ"="LASTPRODSN"."OLI_OL_SUB_SEQ"(+) AND
"C"."SEQ"="LASTPRODSN"."OLI_SEQ"(+))
19 - filter("X"."UUT_GLBL_ID"=MAX("UUT_GLBL_ID"))
21 - access("OLI_OL_OH_GLBL_ID"="X"."OLI_OL_OH_GLBL_ID" AND "OLI_OL_SEQ"="X"."OLI_OL_SEQ" AND
"OLI_OL_SUB_SEQ"="X"."OLI_OL_SUB_SEQ" AND "OLI_SEQ"="X"."OLI_SEQ")
22 - filter("OLI_OL_OH_GLBL_ID" IS NOT NULL AND "OLI_OL_SEQ" IS NOT NULL AND "OLI_SEQ" IS NOT NULL AND
"OLI_OL_SUB_SEQ" IS NOT NULL)
23 - filter("X"."OLI_OL_OH_GLBL_ID" IS NOT NULL AND "X"."OLI_OL_SEQ" IS NOT NULL AND "X"."OLI_SEQ" IS
NOT NULL AND "X"."OLI_OL_SUB_SEQ" IS NOT NULL)
25 - filter("J"."PAR_MSTR_ID"(+)=2070 AND "J"."VALUE"(+) IS NOT NULL AND "C"."SEQ"="J"."SEQ"(+))
26 - access("C"."OL_OH_GLBL_ID"="J"."OL_OH_GLBL_ID"(+) AND "C"."OL_SEQ"="J"."OL_SEQ"(+) AND
"C"."OL_SUB_SEQ"="J"."OL_SUB_SEQ"(+))
28 - access("LASTPRODSN"."SM_GLBL_ID"="H"."GLBL_ID"(+))
SQL>mod. action : adding tags , is that so difficult ? -
Performance Dialogue error - Query "Status Overview is already open in ano
Hi All,
We implemented ESS MSS on Portal 7.01 SP8. With With SAP_ESS 603 SP7 and BP_ERP5ESS 1.41 SP9
This is for country Qatar and it has made as a copy of GB as SAP doesnt provide any country structure for Qatar.
We are facing error in Performance Dialog saying "Query "Status Overview is already open in another session" when click / display button is clicked after selecting the Appriasal document in ESS.
This is working fine for all other countries and also this works fine if another country's portal role is assigned to same PRNR or test user.
We cant see any locks in backend / portal.
Please can someone help.Hi Siddharth,
We have already checked and there were/are no locks in Sm12.
I tried deleting the locks using the mentioned program, in result is does say that ! query found but when I go to Portal and open the Performance Dialogue document , I still get the error Query " " is already open in another session
Note 1432358 is for SAP_BASIS >= 701 which is suitable for our case but, just wanted to check, Performance dialogue works fine for all other countries and only for this particular country it's not working.
We are able to replicate this in Development and Test, both the environments.
Also, when this particular user is assigned, another country's portal roles the problem doesnt occur.
Any clues? -
Imporving the performance of a query
Hi,
I have the following query in Oracle:
SELECT distinct VECTOR_ID FROM SUMMARY_VECTOR where CASE_NAME like 'BASECASE_112_ECLIPSE100'
"SUMMARY_VECTOR" contains approximately 120 million records or tuples. So the total time for this query is about 62 seconds
I want to improve the performance of this query. How can I achieve this ?
any hint ?
ThanksPLAN_TABLE_OUTPUT
Plan hash value: 3042243244
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
PLAN_TABLE_OUTPUT
| 0 | SELECT STATEMENT | | 1 | 29 | 182K (3)| 00:36
:28 |
| 1 | SORT AGGREGATE | | 1 | 29 | |
|
|* 2 | TABLE ACCESS FULL| SUMMARY_VECTOR | 4323K| 119M| 182K (3)| 00:36
:28 |
PLAN_TABLE_OUTPUT
Predicate Information (identified by operation id):
2 - filter("CASE_NAME"='BASECASE_112_ECLIPSE100')
14 rows selected.
Maybe you are looking for
-
After upgrading to Mavericks on my MacBook, I'm not able to download third party applications like Dropbox and MyCleanMac 2. After clicking the download button, the screen just turns dark and is frozen. Any idea what is happening?
-
How to install adobe flash blocked plug in?
I am attempting to install adobe flash and it will not install so I continue to get blocked plug in
-
How can I recover these saved emails???
-
X301 and pre-installed Lenovo Software
Hello to everybody. I'm new in this community. I've been a ThinkPad user since 1997 (600, R52, T60p) and now I've bought a X301 with Win 7 32 bit. Comparing the Laptop with my previous T60p with Win XP, I have some doubts about the configuration and
-
The way I've done security in the past is to define, in an external XML file or database, the roles that can perform certain actions. Then, using Struts, I create a SecureAction that extends Action. This class looks up the requested action, checks it