Two different HASH GROUP BY in execution plan
Hi ALL;
Oracle version
select *From v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - ProductionSQL
select company_code, account_number, transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,
(last_day(to_date('04/21/2010','MM/DD/YYYY')) - min(z.accounting_date) ) age,sum(z.amount)
from
select /*+ PARALLEL(use, 2) */ company_code,substr(account_number, 1, 5) account_number,transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,use.amount,use.accounting_date
from financials.unbalanced_subledger_entries use
where use.accounting_date >= to_date('04/21/2010','MM/DD/YYYY')
and use.accounting_date < to_date('04/21/2010','MM/DD/YYYY') + 1
UNION ALL
select /*+ PARALLEL(se, 2) */ company_code, substr(se.account_number, 1, 5) account_number,transaction_id,
decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type) transaction_id_type,se.amount,se.accounting_date
from financials.temp2_sl_snapshot_entries se,financials.account_numbers an
where se.account_number = an.account_number
and an.subledger_type in ('C', 'AC')
) z
group by company_code,account_number,transaction_id,decode(transaction_id_type, 'CollectionID', 'SettlementGroupID', transaction_id_type)
having abs(sum(z.amount)) >= 0.01explain plan
Plan hash value: 1993777817
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | SELECT STATEMENT | | | | 76718 (100)| | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10002 | 15M| 2055M| 76718 (2)| 00:15:21 | Q1,02 | P->S | QC (RAND) |
|* 3 | FILTER | | | | | | Q1,02 | PCWC | |
| 4 | HASH GROUP BY | | 15M| 2055M| 76718 (2)| 00:15:21 | Q1,02 | PCWP | |
| 5 | PX RECEIVE | | 15M| 2055M| 76718 (2)| 00:15:21 | Q1,02 | PCWP | |
| 6 | PX SEND HASH | :TQ10001 | 15M| 2055M| 76718 (2)| 00:15:21 | Q1,01 | P->P | HASH |
| 7 | HASH GROUP BY | | 15M| 2055M| 76718 (2)| 00:15:21 | Q1,01 | PCWP | |
| 8 | VIEW | | 15M| 2055M| 76116 (1)| 00:15:14 | Q1,01 | PCWP | |
| 9 | UNION-ALL | | | | | | Q1,01 | PCWP | |
| 10 | PX BLOCK ITERATOR | | 11 | 539 | 1845 (1)| 00:00:23 | Q1,01 | PCWC | |
|* 11 | TABLE ACCESS FULL | UNBALANCED_SUBLEDGER_ENTRIES | 11 | 539 | 1845 (1)| 00:00:23 | Q1,01 | PCWP | |
|* 12 | HASH JOIN | | 15M| 928M| 74270 (1)| 00:14:52 | Q1,01 | PCWP | |
| 13 | BUFFER SORT | | | | | | Q1,01 | PCWC | |
| 14 | PX RECEIVE | | 21 | 210 | 2 (0)| 00:00:01 | Q1,01 | PCWP | |
| 15 | PX SEND BROADCAST | :TQ10000 | 21 | 210 | 2 (0)| 00:00:01 | | S->P | BROADCAST |
|* 16 | TABLE ACCESS FULL| ACCOUNT_NUMBERS | 21 | 210 | 2 (0)| 00:00:01 | | | |
| 17 | PX BLOCK ITERATOR | | 25M| 1250M| 74183 (1)| 00:14:51 | Q1,01 | PCWC | |
|* 18 | TABLE ACCESS FULL | TEMP2_SL_SNAPSHOT_ENTRIES | 25M| 1250M| 74183 (1)| 00:14:51 | Q1,01 | PCWP | |
Predicate Information (identified by operation id):
3 - filter(ABS(SUM(SYS_OP_CSR(SYS_OP_MSR(SUM("Z"."AMOUNT"),MIN("Z"."ACCOUNTING_DATE")),0)))>=.01)
11 - access(:Z>=:Z AND :Z<=:Z)
filter(("USE"."ACCOUNTING_DATE"<TO_DATE(' 2010-04-22 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
"USE"."ACCOUNTING_DATE">=TO_DATE(' 2010-04-21 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
12 - access("SE"."ACCOUNT_NUMBER"="AN"."ACCOUNT_NUMBER")
16 - filter(("AN"."SUBLEDGER_TYPE"='AC' OR "AN"."SUBLEDGER_TYPE"='C'))
18 - access(:Z>=:Z AND :Z<=:Z)I have few doubts regarding this execution plan and i am sure my questions would get answered here.
Q-1: Why am i getting two different HASH GROUP BY operations (Operation id 4 & 7) even though there is only a single GROUP BY clause ? Is that due to UNION ALL operator that is merging two different row sources and HASH GROUP BY is being applied on both of them individually ?
Q-2: What does 'BUFFER SORT' (Operation id 13) indicate ? Some time i got this operation and sometime i am not. For some other queries, i have observing around 10GB TEMP space and high cost against this operation. So just curious about whether it is really helpful ? if no, how to avoid that ?
Q-3: Under PREDICATE Section, what does step 18 suggest ? I am not using any filter like this ? access(:Z>=:Z AND :Z<=:Z)
aychin wrote:
Hi,
About BUFFER SORT, first of all it is not specific for Parallel Executions. This step in the plan indicates that internal sorting have a place. It doesn't mean that rows will be returned sorted, in other words it doesn't guaranty that rows will be sorted in resulting row set, because it is not the main purpose of this operation. I've previously suggested that the "buffer sort" should really simply say "buffering", but that it hijacks the buffering mechanism of sorting and therefore gets reported completely spuriously as a sort. (see http://jonathanlewis.wordpress.com/2006/12/17/buffer-sorts/ ).
In this case, I think the buffer sort may be a consequence of the broadcast distribution - and tells us that the entire broadcast is being buffered before the hash join starts. It's interesting to note that in the recent of the two plans with a buffer sort the second (probe) table in the hash join seems to be accessed first and broadcast before the first table is scanned to allow the join to occur.
Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
http://www.jlcomp.demon.co.uk
To post code, statspack/AWR report, execution plans or trace files, start and end the section with the tag {noformat}{noformat} (lowercase, curly brackets, no spaces) so that the text appears in fixed format.
There is a +"Preview"+ tab at the top of the text entry panel. Use this to check what your message will look like before you post the message. If it looks a complete mess you're unlikely to get a response. (Click on the +"Plain text"+ tab if you want to edit the text to tidy it up.)
+"Science is more than a body of knowledge; it is a way of thinking"+
+Carl Sagan+
Similar Messages
-
Same number range for two different series groups?
Dear all,
There are two scenarios
1.Normal export under bond case, series group is 20 and number range maintained,running number is 300016
2.Another scenario,where ARE1 document generation for Deemed exp customer(already customised) , series group is 30.
But, client requirement is , for this second scenario also, system should pickup running number range of series group 20(under bond case) as per excise legal requirement
Ie running number is for series group 20 is 300016
For the above deemed exp case (second scenario)it should pickup 300017
And again when they do under bond case(first scenario), it should pick up 300018 like that
Is it possible to maintain the same number range for two different series groups(20 and 30)?
Even if you maintain the same number range for 30, as per running number range of 20
Will the system update simultaneously the same number range for 20 and 30 series groups?
Please suggest the way.With two different series groups, it is not possible to have the same number range. Even if you maintain it, they will be treated independently.
Normally, you should not use different series groups if the same number range has to be used. In fact, the concept of series group has been developed to ensure that number ranges can be maintained separately.
Regards,
Aroop -
SQL - Need Tunning tips for group by [LATEST EXECUTION PLAN IS ATTACHED]
Hi All Experts,
My SQL is taking so much time to execute. If I remove the group by clause it is running within a minute but as soon as I am putting sum() and group by clause it is taking ages to run the sql. Number of records are wihout group by clause is almost 85 Lachs (8 Million). Is hugh dataset is killing this? Is there any way to tune the data on Group by clause. Below is my Select hints and execution plan. Please help.
SQL
SELECT /*+ CURSOR_SHARING_EXACT gather_plan_statistics all_rows no_index(atm) no_expand
leading (src cpty atm)
index(bk WBKS_PK) index(src WSRC_UK1) index(acct WACC_UK1)
use_nl(acct src ccy prd cpty grate sb) */
EXECUTION PLAN
PLAN_TABLE_OUTPUT
SQL_ID 1y5pdhnb9tks5, child number 0
SELECT /*+ CURSOR_SHARING_EXACT gather_plan_statistics all_rows no_index(atm) no_expand leading (src cpty atm) index(bk
WBKS_PK) index(src WSRC_UK1) index(acct WACC_UK1) use_nl(acct src ccy prd cpty grate sb) */ atm.business_date,
atm.entity legal_entity, TO_NUMBER (atm.set_of_books) setofbooksid, atm.source_system_id sourcesystemid,
ccy.ccy_currency_code ccy_currency_code, acct.acct_account_code, 0 gl_bal, SUM (atm.amount)
atm_bal, 0 gbp_equ, ROUND (SUM (atm.amount * grate.rate), 4) AS
atm_equ, prd.prd_product_code, glacct.parentreportingclassification parentreportingclassification,
cpty_counterparty_code FROM wh_sources_d src,
Plan hash value: 4193892926
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem |
| 1 | HASH GROUP BY | | 1 | 1 | 471 |00:31:38.26 | 904M| 76703 | 649K| 649K| 1149K (0)|
| 2 | NESTED LOOPS | | 1 | 1 | 8362K|00:47:06.06 | 904M| 76703 | | | |
| 3 | NESTED LOOPS | | 1 | 1 | 10M|00:28:48.84 | 870M| 17085 | | | |
| 4 | NESTED LOOPS | | 1 | 1 | 10M|00:27:56.05 | 849M| 17084 | | | |
| 5 | NESTED LOOPS | | 1 | 8 | 18M|00:14:10.93 | 246M| 17084 | | | |
| 6 | NESTED LOOPS | | 1 | 22 | 18M|00:11:58.96 | 189M| 17084 | | | |
| 7 | NESTED LOOPS | | 1 | 22 | 18M|00:10:24.69 | 152M| 17084 | | | |
| 8 | NESTED LOOPS | | 1 | 1337 | 18M|00:06:00.74 | 95M| 17083 | | | |
| 9 | NESTED LOOPS | | 1 | 1337 | 18M|00:02:52.20 | 38M| 17073 | | | |
|* 10 | HASH JOIN | | 1 | 185K| 18M|00:03:46.38 | 1177K| 17073 | 939K| 939K| 575K (0)|
| 11 | NESTED LOOPS | | 1 | 3 | 3 |00:00:00.01 | 11 | 0 | | | |
| 12 | TABLE ACCESS BY INDEX ROWID | WH_SOURCES_D | 1 | 3 | 3 |00:00:00.01 | 3 | 0 | | | |
|* 13 | INDEX RANGE SCAN | WSRC_UK1 | 1 | 3 | 3 |00:00:00.01 | 2 | 0 | | | |
|* 14 | TABLE ACCESS BY INDEX ROWID | WH_COUNTERPARTIES_D | 3 | 1 | 3 |00:00:00.01 | 8 | 0 | | | |
|* 15 | INDEX UNIQUE SCAN | WCPY_U1 | 3 | 1 | 3 |00:00:00.01 | 5 | 0 | | | |
| 16 | PARTITION RANGE SINGLE | | 1 | 91M| 91M|00:00:00.08 | 1177K| 17073 | | | |
|* 17 | TABLE ACCESS FULL | WH_ATM_BALANCES_F | 1 | 91M| 91M|00:00:00.04 | 1177K| 17073 | | | |
|* 18 | TABLE ACCESS BY INDEX ROWID | WH_PRODUCTS_D | 18M| 1 | 18M|00:01:43.88 | 37M| 0 | | | |
|* 19 | INDEX UNIQUE SCAN | WPRD_UK1 | 18M| 1 | 18M|00:00:52.13 | 18M| 0 | | | |
|* 20 | TABLE ACCESS BY GLOBAL INDEX ROWID| WH_BOOKS_D | 18M| 1 | 18M|00:02:53.01 | 56M| 10 | | | |
|* 21 | INDEX UNIQUE SCAN | WBKS_PK | 18M| 1 | 18M|00:01:08.32 | 37M| 10 | | | |
|* 22 | TABLE ACCESS BY INDEX ROWID | T_SDM_SOURCEBOOK | 18M| 1 | 18M|00:03:43.66 | 56M| 1 | | | |
|* 23 | INDEX RANGE SCAN | TSSB_N5 | 18M| 2 | 23M|00:01:11.50 | 18M| 1 | | | |
|* 24 | TABLE ACCESS BY INDEX ROWID | WH_CURRENCIES_D | 18M| 1 | 18M|00:01:51.21 | 37M| 0 | | | |
|* 25 | INDEX UNIQUE SCAN | WCUR_PK | 18M| 1 | 18M|00:00:49.26 | 18M| 0 | | | |
| 26 | TABLE ACCESS BY INDEX ROWID | WH_GL_DAILY_RATES_F | 18M| 1 | 18M|00:01:55.84 | 56M| 0 | | | |
|* 27 | INDEX UNIQUE SCAN | WGDR_U2 | 18M| 1 | 18M|00:01:10.89 | 37M| 0 | | | |
| 28 | INLIST ITERATOR | | 18M| | 10M|00:22:40.03 | 603M| 0 | | | |
|* 29 | TABLE ACCESS BY INDEX ROWID | WH_ACCOUNTS_D | 150M| 1 | 10M|00:20:19.05 | 603M| 0 | | | |
|* 30 | INDEX UNIQUE SCAN | WACC_UK1 | 150M| 5 | 150M|00:10:16.81 | 452M| 0 | | | |
| 31 | TABLE ACCESS BY INDEX ROWID | T_SDM_GLACCOUNT | 10M| 1 | 10M|00:00:50.64 | 21M| 1 | | | |
|* 32 | INDEX UNIQUE SCAN | TSG_PK | 10M| 1 | 10M|00:00:26.17 | 10M| 0 | | | |
|* 33 | TABLE ACCESS BY INDEX ROWID | WH_COMMON_TRADES_D | 10M| 1 | 8362K|00:18:52.56 | 33M| 59618 | | | |
|* 34 | INDEX UNIQUE SCAN | WCTD_PK | 10M| 1 | 10M|00:03:06.56 | 21M| 5391 | | | |
Edited by: user535789 on Mar 17, 2011 9:45 PM
Edited by: user535789 on Mar 20, 2011 8:33 PMuser535789 wrote:
Hi All Experts,
My SQL is taking so much time to execute. If I remove the group by clause it is running within a minute but as soon as I am putting sum() and group by clause it is taking ages to run the sql. Number of records are wihout group by clause is almost 85 Lachs (*8 Million*). Is hugh dataset is killing this? Is there any way to tune the data on Group by clause. Below is my Select hints and execution plan. Please help.I doubt that your 8 million records are shown within minutes.
I guess that the output started after a few minutes. But this does not mean that the full resultset is there. It just means the database is able to return to you the first few records after a few minutes.
Once you add a group by (or an order by) then this requires that all the rows need to be fetched before the database can start showing them to you.
But maybe you could run some tests to compare the full output. I find it useful to SET AUTOTRACE TRACEONLY for such a purpose (in sql plus). This avoids to print the selection on the screen. -
SQL Server Reporting Services- Coloring a Cell Background Based on two different column group values
Hello All,
I have a matrix report with time scale on the x axis and Resources on Y axis Showing the tasks assigned to each resource for a period of time. Here I have to color a matrix cell showing task details on tool tip with background color of the cell.
So Please help me on this.I have a expression like this...
In my case the color should be filled for the cell with name "Fields!task_name.Value" based on the values of "Fields!Day_Wise.Value " where we have the values for Daywise as S,M,T,W,T,F,S. So i need the background for the cell with name
task_name as Light Grey on Friday and Saturday, But we have the same name S for sunday also, which should come in different color.
=iif(Fields!Day_Wise.Value ="F","LightGrey",
IIF(PREVIOUS(Fields!Day_Wise.Value) ="F","LightGrey",
iif(Fields!task_name.Value="","White",
iif(InStr(Fields!task_name.Value,"||")>0,"Maroon",
iif(InStr(Fields!task_name.Value,"NULL")>0,"Sienna",
iif(InStr(Fields!task_name.Value,"Pink")>0,"Pink",
iif(InStr(Fields!task_name.Value,"Red")>0,"Red",
iif(InStr(Fields!task_name.Value,"Purple")>0,"Purple",
iif(InStr(Fields!task_name.Value,"Green")>0,"Green",
iif(InStr(Fields!task_name.Value,"White")>0,"White",
iif(InStr(Fields!task_name.Value,"Cyan (Teal)")>0,"Teal",
iif(InStr(Fields!task_name.Value,"Olive")>0,"Olive",
iif(InStr(Fields!task_name.Value,"Blue")>0,"Blue",
iif(InStr(Fields!task_name.Value,"Light Blue (Aqua)")>0,"LightBlue",
iif(InStr(Fields!task_name.Value,"Yellow")>0,"Yellow","Black"
Thanks
AJ HameedHi AJ Hameed,
According to your description, you want to set the background color for the cells based on the values inside of cells and the values the column group. You want to set grey for cells on Friday and Saturday, set colors based on the task name on other weekdays.
Right?
In Reporting Services, there's no problem if we have two different data values in conditional expression, so we can set background color based on Day_Wise or task_name. One issue in this scenario is, we can't have value "S" for both Saturday and Sunday when
working in a matrix. Otherwise the task_name will overwrite the previous task_name (for numeric values, it will do sum calculation). So we suggest you change the values for weekdays in database. The expression you have posted was correct. It only has a small
issue: the "Light Blue(Aqua)" also contains "Blue", so when doing conditional judging, the expression will return "Blue" instead of "Light Blue". We have tested in our local environment. For viewing convenience, we used the Switch() function in our expression:
=IIf(Fields!Day_Wise.Value="Fri" or Fields!Day_Wise.Value="Sat","LightGrey",
Switch(
InStr(Fields!Task_name.Value,"White")>0,"White",
InStr(Fields!Task_name.Value,"||")>0,"Maroon",
InStr(Fields!Task_name.Value,"Pink")>0,"Pink",
InStr(Fields!Task_name.Value,"Red")>0,"Red",
InStr(Fields!Task_name.Value,"Purple")>0,"Purple",
InStr(Fields!Task_name.Value,"Green")>0,"Green",
InStr(Fields!Task_name.Value,"Cyan(Teal)")>0,"Teal",
Fields!Task_name.Value="","White",
InStr(Fields!Task_name.Value,"Olive")>0,"Olive",
InStr(Fields!Task_name.Value,"Blue")>0,"Blue",
InStr(Fields!Task_name.Value,"Aqua")>0,"LightBlue",
InStr(Fields!Task_name.Value,"Yellow")>0,"Yellow",
InStr(Fields!Task_name.Value,"Orange")>0,"Orange",
InStr(Fields!Task_name.Value,"Null")>0,"Sienna",
true,"Black"
The result looks like below:
Reference:
Matrices (Report Builder and SSRS)
If you have any question, please feel free to ask.
Best Regards,
Simon Hou -
'HASH GROUP BY' and 'SORT GROUP BY' 11.2.0.2
deleting this thread..
Edited by: OraDBA02 on Oct 3, 2012 2:35 PMselect * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Optimizer parameter
NAME TYPE VALUE
optimpeek_user_binds boolean FALSE
filesystemio_options string setall
object_cache_optimal_size integer 102400
optimizer_capture_sql_plan_baselines boolean FALSE
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 11.2.0.2
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_mode string ALL_ROWS
optimizer_secure_view_merging boolean TRUE
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean FALSE
db_file_multiblock_read_count integer 128
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
SQL
SELECT sum(this_.AMOUNT) as y0_, count(this_.GC_ID) as y1_,count(distinct this_.GC_ID) as y2_, this_.GC_TRANSACTION_TYPE_ID as y3_
from GC_TRANSACTIONS this_ where this_.MARKETPLACE_ID=:1 and this_.CUSTOMER_ID=:2 and this_.EXTERNAL_GC_TRANSACTION_ID=:3
group by this_.GC_TRANSACTION_TYPE_ID;
Indexes and Histograms
INDEX_NAME LAST_ANALYZED COLUMN_NAME COLUMN_POSITION NUM_ROWS BLEVEL CLUSTERING_FACTOR DESCEND
I_GCT_CUSMKTLSTUPD 17-jul-2012:00:15:09 CUSTOMER_ID 1 222812460 3 150983660 ASC
MARKETPLACE_ID 2 3 150983660 ASC
GC_TRANSACTION_TYPE_ID 3 3 150983660 ASC
I_GCT_EXT_GC_TRANS_ID_EXE 17-jul-2012:00:17:35 EXTERNAL_GC_TRANSACTION_ID 1 234832560 3 165680180 ASC
C_ID
EXTERNAL_GC_EXECUTION_ID 2 3 165680180 ASC
Histograms
COLUMN_NAME NUM_DISTINCT NUM_NULLS LAST_ANALYZED SAMPLE_SIZE AVG_COL_LEN HISTOGRAM
COLUMN_NAME NUM_DISTINCT NUM_NULLS LAST_ANALYZED SAMPLE_SIZE AVG_COL_LEN HISTOGRAM
EXTERNAL_GC_EXECUTION_I 21657463 54047480 24.Jul.12/00:21:28 8788182 12 HEIGHT BALANCED
D
EXTERNAL_GC_TRANSACTION 20790576 0 24.Jul.12/00:21:28 11481216 18 HEIGHT BALANCED
_ID
CUSTOMER_ID 5130572 0 24.Jul.12/00:21:28 11483246 7 HEIGHT BALANCED
MARKETPLACE_ID 6 0 24.Jul.12/00:21:28 11482295 4 FREQUENCY
GC_TRANSACTION_TYPE_ID 21 0 24.Jul.12/00:21:28 11483039 3 FREQUENCY
GC_TRANSACTION_ID 229686260 0 24.Jul.12/00:21:28 11484313 8 NONE
Histograms distibution for MARKTEPLACE_ID
Enter value for column_name: MARKETPLACE_ID
COLUMN_NAME ENDPOINT_VALUE CUMMULATIVE_FREQUENCY FREQUENCY ENDPOINT_ACTUAL_VALU
MARKETPLACE_ID 3 6543166 6543166
MARKETPLACE_ID 4 11041781 4498615
MARKETPLACE_ID 5 11459282 417501
MARKETPLACE_ID 35691 11469536 10254
MARKETPLACE_ID 44551 11475336 5800
MARKETPLACE_ID 78931 11482295 6959
6 rows selected.
CBO switches between two plans
plan-1
Plan hash value: 2380563624
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | | | 13 (100)| |
| 1 | HASH GROUP BY | | 1 | 42 | 13 (8)| 00:00:01 |
| 2 | VIEW | VW_DAG_0 | 1 | 42 | 13 (8)| 00:00:01 |
| 3 | HASH GROUP BY | | 1 | 43 | 13 (8)| 00:00:01 |
|* 4 | TABLE ACCESS BY INDEX ROWID| GC_TRANSACTIONS | 1 | 43 | 12 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | I_GCT_EXT_GC_TRANS_ID_EXEC_ID | 11 | | 4 (0)| 00:00:01 |
Predicate Information (identified by operation id):
4 - filter(("THIS_"."CUSTOMER_ID"=:2 AND "THIS_"."MARKETPLACE_ID"=:1))
5 - access("THIS_"."EXTERNAL_GC_TRANSACTION_ID"=:3)
Bind (child_curosr=1)
select SQL_ID,CHILD_NUMBER,HASH_VALUE,NAME,DATATYPE,WAS_CAPTURED,LAST_CAPTURED,VALUE_STRING from V$SQL_BIND_CAPTURE where SQL_ID='&sql_id'
order by LAST_CAPTURED;
Enter value for sql_id: 1hc1r8qubfdnh
1hc1r8qubfdnh 1 3031905936 :1 2 YES 24.Jul.12/00:52:29 3
1hc1r8qubfdnh 1 3031905936 :2 2 YES 24.Jul.12/00:52:29 535098352
1hc1r8qubfdnh 1 3031905936 :3 1 YES 24.Jul.12/00:52:29 203-2351701-6925919
Plan-2
Bind (child_curosr=6)
Plan hash value: 700639342
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | | | 13 (100)| |
| 1 | SORT GROUP BY | | 1 | 43 | 13 (8)| 00:00:01 |
|* 2 | TABLE ACCESS BY INDEX ROWID| GC_TRANSACTIONS | 1 | 43 | 12 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | I_GCT_EXT_GC_TRANS_ID_EXEC_ID | 11 | | 4 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - filter(("THIS_"."CUSTOMER_ID"=:2 AND "THIS_"."MARKETPLACE_ID"=:1))
3 - access("THIS_"."EXTERNAL_GC_TRANSACTION_ID"=:3)
bind values
select SQL_ID,CHILD_NUMBER,HASH_VALUE,NAME,DATATYPE,WAS_CAPTURED,LAST_CAPTURED,VALUE_STRING from V$SQL_BIND_CAPTURE where SQL_ID='&sql_id'
order by LAST_CAPTURED;
Enter value for sql_id: 1hc1r8qubfdnh
1hc1r8qubfdnh 6 3031905936 :1 2 YES 24.Jul.12/03:06:04 5
1hc1r8qubfdnh 6 3031905936 :2 2 YES 24.Jul.12/03:06:04 1278126152
1hc1r8qubfdnh 6 3031905936 :3 1 YES 24.Jul.12/03:06:04 171-5012459-0045134
Why is CBO using two different 'HASH GROUP BY' with view 'VW_DAG_0' in first plan ?
Is that due to difference in MARKETPLACE_ID =4 And 5 ? -
Can My Dad and I Swap iPhones between two different accounts???
Last week I purchased an iPhone 3g. Now I find out the 3gs is available. My dad saw my 3g and is going to purchase one when he switches from Verizon in August.
I want the 3gs.
He wants the 3g.
Here is what we want to do. He wants to purchase the 3gs and swap it with my 3g. Is this possible? If so, what do I need to do? These are two different accounts - its not a family plan.
Thanks!
Message was edited by: HardshellerThanks, I did just that. They said since I'm a premier customer that I had a 30 day buyers remorse policy and they allowed me to upgrade for the difference I paid for the 3G (16GB) and the 3G S (32 GB)!
-
Match different AAA Groups per source IP
Dear Colleagues,
The issue that Im facing right now is the following:
I have an external device that run auto-commissioning on my router and doesn't support "username" loggin, only "password" when attempt to loggin through telnet in order to access and run the script. In addition I have AAA TACACs running on the same router so this device is unable mow to access to the router as the first loggin request is the "username". I can not change the telnet command executed by the external device, its doing a single telnet to the destination IP of my router so I discard any option like adding a TCP port dedicated for this external device access. To be clear, what is expecting to receive after execute the telnet is:
c:/> telnet 1.1.1.1
Trying 1.1.1.1...
Connected to 1.1.1.1.
Escape character is '^]'.
User Access Verification
Password:
To fix this issue my idea is try to configure two different AAA groups, one AAA_GROUP that request normal authentication to TACACs for all telnet session and one EXCEPTION with authentication "none" and exec "local". The configuration should be something like this:
aaa new-model
aaa group server tacacs+ AAA_GROUP
server-private A.B.C.D key 7 ###################
ip tacacs source-interface Loopback0
aaa authentication login default group AAA_GROUP local
aaa authentication login EXCEPTION none
aaa authentication enable default group AAA_GROUP enable
aaa authorization console
aaa authorization config-commands
aaa authorization exec default group AAA_GROUP local
aaa authorization exec EXCEPTION local
aaa authorization commands 15 default group AAA_GROUP none
aaa accounting exec default start-stop group AAA_GROUP
aaa accounting commands 15 default stop-only group AAA_GROUP
aaa accounting connection default stop-only group AAA_GROUP
aaa accounting system default start-stop group AAA_GROUP
aaa session-id common
Then match in some way all telnet session with source IP of the external device with the group EXCEPTION and the rest with AAA_GROUP. Finally, configure only a "password" in the VTY lines so when the device attempt to loggin in the group EXCEPTION with no authentication and loggin local will be just requested to set the "password".
The main issue is do this AAA groups discrimination between AAA_GROUP and EXCEPTION lists per source IP of the host originating the telnet session to my router. Is that possible?
Thanks in advance for your support.Hi,
problem is in you config, both class are pointing to same VIP and PORT, so first class will be only HIT.
try this confgiuration
policy-map type loadbalance first-match NON_AUTHENT_PM
class NON_AUTHENT_CM --------for desired client source IP's
serverfarm PROXY_HTTP_SF
nat dynamic 6 vlan 1601 serverfarm primary
class class-default ------for rest of client IP's
serverfarm PROXY_HTTP_SF
nat dynamic 5 vlan 1601 serverfarm primary
and remove NAT from multi-match policy. use single class, so rest of config will be
serverfarm host PROXY_HTTP_SF
description Proxied Internet Connections
probe PROXY_HTTP_PROBE
fail-on-all
rserver ELFCPRXY1
inservice
rserver ELFCPRXY2
inservice
rserver ELFCPRXY3
inservice
class-map match-any NONAUTHENT_HTTP_VIP
3 match virtual-address 10.10.240.5 tcp eq 80
class-map type http loadbalance match-any NON_AUTHENT_CM
description Subnets from which Internet Authentication is not Required
3 match source-address 10.10.16.0 255.255.240.0
4 match source-address 10.10.32.0 255.255.240.0
5 match source-address 10.10.48.0 255.255.240.0
policy-map type loadbalance first-match NON_AUTHENT_PM
class NON_AUTHENT_CM
serverfarm PROXY_HTTP_SF
nat dynamic 6 vlan 1601 serverfarm primary
class class-default
serverfarm PROXY_HTTP_SF
nat dynamic 5 vlan 1601 serverfarm primary
policy-map multi-match LOAD_BAL
class NONAUTHENT_HTTP_VIP
loadbalance vip inservice
loadbalance policy NON_AUTHENT_PM
loadbalance vip icmp-reply
Hope this help -
Discussion Forum Portlet - Different Page Groups
I want to deploy the Discussion Forum Portlet on two different page groups which contain their own products and threads. Is this possible?
The DBA upgraded the portlet and now it looks like we have a db connection problem. Getting error
Unable to perform the operation: JBO-30003: The application pool (config.AppModuleLocal) failed to checkout an application module due to the following exception:
The DBA is now working on this. -
Create different network share shortcut in desktop for different security groups using GPO
Hi,
I have an OU named TECH that contains two different security groups ENG and PRESS.
When users in ENG group logs in desktop should show a network share \\server1\eng-share and
when users in PRESS group logs in desktop should show a network share \\server1\press-share.
How to create a GPO for this ?
regards, FaisalYou could use group policy preferences shortcuts. You would create a shortcut to each of these shares and then use Item Level Targeting. The target would point to the security group needed.
If my answer helped you, check out my blog:
DeployHappiness. Subscribe by
RSS or
email. -
Same query at same time, but different execution plans from two schemas
Hi!
We just had some performance problems in our production system and I would like to ask for some advice from you.
We had a select-query that was run from USER1 on SCHEMA1, and it ran a table scan on a huge table.
Using session browser in TOAD I copied the Sql-statement, logged on SCHEMA1 and ran the same query. I got a different execution plan where I avoided the table scan.
So my question is:
How is it possible that the same query get different execution plans when running in two different schemas at the same time.
Some more information:
The user USER1 runs "alter session set current_schema=SCHEMA1;" when it logs on. Besides that it doesn't do anything so session parameter values are the same for USER1 and SCHEMA1.
SCHEMA1 is the schema owning the tables.
ALL_ROWS is used for both USER1 and SCHEMA1
Our database:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
PL/SQL Release 9.2.0.8.0 - Production
CORE 9.2.0.8.0 Production
TNS for Linux: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production
Anybody has some suggestions to why I experience different execution plan for the same query, run at the same time, but from different users?Thanks for clarification of the schema structure.
What happens if instead of setting the current session schema to SCHEMA1, if you simply add the schema name to alle tables, views and other objects inside your select statement?
As in select * from schema1.dual;I know that this is not what you want eventually, but it might help to find any misleading objects.
Furthermore it is not clear what you meant with: "avoided a table scan".
Did you avoid a full table scan (FTS) or was the table completely removed from the execution plan?
Can you post both plans?
Edited by: Sven W. on Mar 30, 2010 5:27 PM -
Same Query returning different result (Different execution plan)
Hi all,
To day i have discovered a strange thing: a query that return a different result when using a different execution plan.
The query :
SELECT *
FROM schema.table@database a
WHERE column1 IN ('3')
AND column2 = '101'
AND EXISTS
(SELECT null
FROM schema.table2 c
WHERE a.column3 = SUBSTR (c.column1, 2, 12));where schema.table@database is a remote table.
when executed with the hint /*+ ordered use_nl(a c) */ these query return no result and its execution plan is :
Rows Row Source Operation
0 NESTED LOOPS (cr=31 r=0 w=0 time=4894659 us)
4323 SORT UNIQUE (cr=31 r=0 w=0 time=50835 us)
4336 TABLE ACCESS FULL TABLE2 (cr=31 r=0 w=0 time=7607 us)
0 REMOTE (cr=0 r=0 w=0 time=130536 us)When i changed the execution plan with the hint /*+ use_hash(c a) */
Rows Row Source Operation
3702 HASH JOIN SEMI (cr=35 r=0 w=0 time=497839 us)
22556 REMOTE (cr=0 r=0 w=0 time=401176 us)
4336 TABLE ACCESS FULL TABLE2 (cr=35 r=0 w=0 time=7709 us)It seem that when the execution plan have changed the remote query return no result.
It'is a bug or i have missed somthing ?
PS: The two table are no subject to insert or update statement.
Oracle version : 9.2.0.2.0
System version : HP-UX v1
Thanks.H.Mahmoud wrote:
Oracle version : 9.2.0.2.0
System version : HP-UX v1Hard to say. You're using a very old and deprecated version of the database, and one that was known to contain bugs.
9.2.0.7 was really the lowest version of 9i that was considered to be 'stable', but even so, it's old and lacking in many ways.
Consider upgrading to the latest database version at your earliest opportunity. (or at least apply patches up to the latest 9i version before querying if there is bugs in your really low buggy version) -
One query - one database - different execution plan for different users.
Hi everyone.
I've encountered one of the strangest things I've ever seen with Oracle. I'm hoping that someone else here has seen something like this before and solved it! On an 11g database I have a query that runs differently depending on which user runs it. If the owner of the tables or someone with the DBA role runs the query I get a perfect execution plan. If someone else runs it, I get a really bad execution plan - though the query still executes. So it almost seems like depending on who is running the query, the optimizer might not have access to the same statistics?? I'm really grasping at straws here - any help would be greatfully accepted!!!
Here is the query and the two plans for it...
On TASD as a General User (Bad execution plan) - CA17062 is USER
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Connected as ca17062
SQL> explain plan for
select w.worker_id, w.worker_name
from worker_v w,
worker_cost_centre_v c
where w.worker_id = c.worker_id
and c.effective_date <= trunc(sysdate)
and c.expiration_date >= trunc(sysdate)
and c.cost_centre = '100033'
and pkg_taw_security.user_worker_access('CA17062',
'TIMEKEEPER',
w.worker_id,
trunc(sysdate)) = 1
order by w.worker_name;
Explained
Executed in 0.234 seconds
PLAN_TABLE_OUTPUT
Plan hash value: 1726112176
| Id | Pid | Ord | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | | 8 | SELECT STATEMENT | | 18 | 1800 | 606 (1)| 00:00:01 |
| 1 | 0 | 7 | SORT ORDER BY | | 18 | 1800 | 606 (1)| 00:00:01 |
|* 2 | 1 | 6 | HASH JOIN | | 18 | 1800 | 605 (1)| 00:00:01 |
| 3 | 2 | 3 | VIEW | WORKER_COST_CENTRE_V | 18 | 558 | 19 (0)| 00:00:01 |
|* 4 | 3 | 2 | TABLE ACCESS BY INDEX ROWID| WORKER_COST_CENTRE_TBL | 18 | 522 | 19 (0)| 00:00:01 |
|* 5 | 4 | 1 | INDEX RANGE SCAN | WORKER_CC_CC_IDX | 29 | | 3 (0)| 00:00:01 |
|* 6 | 2 | 5 | VIEW | WORKER_V | 161K| 10M| 584 (1)| 00:00:01 |
| 7 | 6 | 4 | TABLE ACCESS FULL | WORKER_TBL | 161K| 3466K| 584 (1)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("W"."WORKER_ID"="C"."WORKER_ID")
4 - filter("X"."EXPIRATION_DATE">=TRUNC(SYSDATE@!))
PLAN_TABLE_OUTPUT
5 - access("X"."COST_CENTRE"='100033' AND "X"."EFFECTIVE_DATE"<=TRUNC(SYSDATE@!))
6 - filter("PKG_TAW_SECURITY"."USER_WORKER_ACCESS"('CA17062','TIMEKEEPER',"W"."WORKER_ID",TRUN
C(SYSDATE@!))=1)
About
- XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)
23 rows selected
Executed in 0.577 seconds
WORKER_ID WORKER_NAME
123703 FADDEN, CLAYTON
11131 HAHN, BRAD
33811 HALL, MAUREEN
53934 JANES, CATHERINE
Executed in 35.241 seconds
On TASD as the owner of the tables or as someone with the DBA role (Good Execution) - TAS is USER:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Connected as tas
SQL> explain plan for
select w.worker_id, w.worker_name
from worker_v w,
worker_cost_centre_v c
where w.worker_id = c.worker_id
and c.effective_date <= trunc(sysdate)
and c.expiration_date >= trunc(sysdate)
and c.cost_centre = '100033'
and pkg_taw_security.user_worker_access('CA17062',
'TIMEKEEPER',
w.worker_id,
trunc(sysdate)) = 1
order by w.worker_name;
Explained
Executed in 0.203 seconds
PLAN_TABLE_OUTPUT
Plan hash value: 3435904055
| Id | Pid | Ord | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | | 8 | SELECT STATEMENT | | 18 | 918 | 38 (3)| 00:00:01 |
| 1 | 0 | 7 | SORT ORDER BY | | 18 | 918 | 38 (3)| 00:00:01 |
| 2 | 1 | 6 | NESTED LOOPS | | | | | |
| 3 | 2 | 4 | NESTED LOOPS | | 18 | 918 | 37 (0)| 00:00:01 |
|* 4 | 3 | 2 | TABLE ACCESS BY INDEX ROWID| WORKER_COST_CENTRE_TBL | 18 | 522 | 19 (0)| 00:00:01 |
|* 5 | 4 | 1 | INDEX RANGE SCAN | WORKER_CC_CC_IDX | 29 | | 3 (0)| 00:00:01 |
|* 6 | 3 | 3 | INDEX UNIQUE SCAN | WORKER_PK | 1 | | 0 (0)| 00:00:01 |
| 7 | 2 | 5 | TABLE ACCESS BY INDEX ROWID | WORKER_TBL | 1 | 22 | 1 (0)| 00:00:01 |
Predicate Information (identified by operation id):
4 - filter("X"."EXPIRATION_DATE">=TRUNC(SYSDATE@!))
5 - access("X"."COST_CENTRE"='100033' AND "X"."EFFECTIVE_DATE"<=TRUNC(SYSDATE@!))
PLAN_TABLE_OUTPUT
6 - access("X"."WORKER_ID"="X"."WORKER_ID")
filter("PKG_TAW_SECURITY"."USER_WORKER_ACCESS"('CA17062','TIMEKEEPER',"X"."WORKER_ID",TRUN
C(SYSDATE@!))=1)
About
- XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)
23 rows selected
Executed in 0.624 seconds
WORKER_ID WORKER_NAME
123703 FADDEN, CLAYTON
11131 HAHN, BRAD
33811 HALL, MAUREEN
53934 JANES, CATHERINE
Executed in 1.307 seconds
THANKS!!!
Cory AstonI reran the whole thing - with full declared view names and display_cursor. Here are the results...
On TASD as CA17062 (BAD EXECUTION PLAN)
SQL> set linesize 160
SQL> set serveroutput off
SQL>
SQL> select /*+ gather_plan_statistics */
2 w.worker_id, w.worker_name
3 from tas.worker_v w,
4 tas.worker_cost_centre_v c
5 where w.worker_id = c.worker_id
6 and c.effective_date <= trunc(sysdate)
7 and c.expiration_date >= trunc(sysdate)
8 and c.cost_centre = '100033'
9 and tas_user.pkg_taw_security.user_worker_access('CA17062',
10 'TIMEKEEPER',
11 w.worker_id,
12 trunc(sysdate)) = 1
13 order by w.worker_name;
WORKER_ID WORKER_NAME
123703 FADDEN, CLAYTON
11131 HAHN, BRAD
33811 HALL, MAUREEN
53934 JANES, CATHERINE
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID gs5vtgany8vbv, child number 3
select /*+ gather_plan_statistics */ w.worker_id, w.worker_name
from tas.worker_v w, tas.worker_cost_centre_v
c where w.worker_id = c.worker_id and c.effective_date <=
trunc(sysdate) and c.expiration_date >= trunc(sysdate) and
c.cost_centre = '100033' and tas_user.pkg_taw_security.user_worker_ac
cess('CA17062',
'TIMEKEEPER', w.worker_id,
trunc(sysdate)) = 1 order by
w.worker_name
Plan hash value: 1726112176
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem |
| 0 | SELECT STATEMENT | | 1 | | 4 |00:00:18.52 | 947K| | | |
| 1 | SORT ORDER BY | | 1 | 4 | 4 |00:00:18.52 | 947K| 2048 | 2048 | 2048 (0)|
|* 2 | HASH JOIN | | 1 | 4 | 4 |00:00:15.84 | 947K| 1348K| 1348K| 791K (0)|
| 3 | VIEW | WORKER_COST_CENTRE_V | 1 | 4 | 4 |00:00:00.01 | 18 | | | |
|* 4 | TABLE ACCESS BY INDEX ROWID| WORKER_COST_CENTRE_TBL | 1 | 4 | 4 |00:00:00.01 | 18 | | | |
|* 5 | INDEX RANGE SCAN | WORKER_CC_CC_IDX | 1 | 29 | 21 |00:00:00.01 | 3 | | | |
|* 6 | VIEW | WORKER_V | 1 | 161K| 4 |00:00:15.84 | 946K| | | |
| 7 | TABLE ACCESS FULL | WORKER_TBL | 1 | 161K| 160K|00:00:00.09 | 2135 | | | |
Predicate Information (identified by operation id):
2 - access("W"."WORKER_ID"="C"."WORKER_ID")
4 - filter("X"."EXPIRATION_DATE">=TRUNC(SYSDATE@!))
5 - access("X"."COST_CENTRE"='100033' AND "X"."EFFECTIVE_DATE"<=TRUNC(SYSDATE@!))
6 - filter("PKG_TAW_SECURITY"."USER_WORKER_ACCESS"('CA17062','TIMEKEEPER',"W"."WORKER_ID",TRUNC(SYSDATE@!))=1)
Note
- cardinality feedback used for this statement
39 rows selected.
SQL>
On TASD as TAS: (GOOD EXECUTION PLAN)
SQL> set serveroutput off
SQL>
SQL> select /*+ gather_plan_statistics */
2 w.worker_id, w.worker_name
3 from tas.worker_v w,
4 tas.worker_cost_centre_v c
5 where w.worker_id = c.worker_id
6 and c.effective_date <= trunc(sysdate)
7 and c.expiration_date >= trunc(sysdate)
8 and c.cost_centre = '100033'
9 and tas_user.pkg_taw_security.user_worker_access('CA17062',
10 'TIMEKEEPER',
11 w.worker_id,
12 trunc(sysdate)) = 1
13 order by w.worker_name;
WORKER_ID WORKER_NAME
123703 FADDEN, CLAYTON
11131 HAHN, BRAD
33811 HALL, MAUREEN
53934 JANES, CATHERINE
SQL>
SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
SQL_ID gs5vtgany8vbv, child number 1
select /*+ gather_plan_statistics */ w.worker_id, w.worker_name
from tas.worker_v w, tas.worker_cost_centre_v
c where w.worker_id = c.worker_id and c.effective_date <=
trunc(sysdate) and c.expiration_date >= trunc(sysdate) and
c.cost_centre = '100033' and tas_user.pkg_taw_security.user_worker_ac
cess('CA17062',
'TIMEKEEPER', w.worker_id,
trunc(sysdate)) = 1 order by
w.worker_name
Plan hash value: 3435904055
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem |
| 0 | SELECT STATEMENT | | 1 | | 4 |00:00:00.01 | 185 | | | |
| 1 | SORT ORDER BY | | 1 | 4 | 4 |00:00:00.01 | 185 | 2048 | 2048 | 2048 (0)|
| 2 | NESTED LOOPS | | 1 | | 4 |00:00:00.01 | 185 | | | |
| 3 | NESTED LOOPS | | 1 | 4 | 4 |00:00:00.01 | 181 | | | |
|* 4 | TABLE ACCESS BY INDEX ROWID| WORKER_COST_CENTRE_TBL | 1 | 4 | 4 |00:00:00.01 | 18 | | | |
|* 5 | INDEX RANGE SCAN | WORKER_CC_CC_IDX | 1 | 29 | 21 |00:00:00.01 | 3 | | | |
|* 6 | INDEX UNIQUE SCAN | WORKER_PK | 4 | 1 | 4 |00:00:00.01 | 163 | | | |
| 7 | TABLE ACCESS BY INDEX ROWID | WORKER_TBL | 4 | 1 | 4 |00:00:00.01 | 4 | | | |
Predicate Information (identified by operation id):
4 - filter("X"."EXPIRATION_DATE">=TRUNC(SYSDATE@!))
5 - access("X"."COST_CENTRE"='100033' AND "X"."EFFECTIVE_DATE"<=TRUNC(SYSDATE@!))
6 - access("X"."WORKER_ID"="X"."WORKER_ID")
filter("PKG_TAW_SECURITY"."USER_WORKER_ACCESS"('CA17062','TIMEKEEPER',"X"."WORKER_ID",TRUNC(SYSDATE@!))=1)
Note
- cardinality feedback used for this statement
39 rows selected.
SQL> -
Two different plans in TEST & Prod
hi,
we have a problem in production database where we find some sql statements running very slow.
but if you run same SQL statement in TEST it runs < 2 secs.
Production DB Prod.SchemaA is exported into TEST DB as Test.SchemaA
When study the explain plan, we find Prod explain plan is different than test. if you create sql profile, by copying TEST explain plan, it would run faster in Production.
Now our question is why optimizer goes through two different plans when the schema structure same and data almost same in two databases?
Note that, we have two almost identical schema's in Production. Prod.SchemaA and Prod.SchemaB has same object names but some Prod.SchemaB may have small difference in indexes/constraints.
Users would run same SQL statement both in Prod.SchemaA & Prod.SchemaB time to time.
thanks
nealYou can have a clear picture about the accuracy of your statistics by getting the execution plan from memory into the TEST and PROD environment. You can proceed as follows
PROD> alter session set statistics_level=ALL;
PROD> execute your query;
PROD> select * from table (dbms_xplan.display_cursor(null,null, 'ALLSTATS LAST'));
TEST> alter session set statistics_level=ALL;
TEST> execute your query
TEST> select * from table (dbms_xplan.display_cursor(null,null, 'ALLSTATS LAST'));
This will give an execution plan showing the estimations(E-Rows) done by the CBO and the Actual (A-Rows) rows generated allowing you to judge the accuracy of your statistics.
The predicate part of the execution plan can also show inportant information.
Best regards
Mohamed Houri
www.hourim.wordpress.com -
Same sqlID with different execution plan and Elapsed Time (s), Executions time
Hello All,
The AWR reports for two days with same sqlID with different execution plan and Elapsed Time (s), Executions time please help me to find out what is reason for this change.
Please find the below detail 17th day my process are very slow as compare to 18th
17th Oct 18th Oct
221,808,602
21
2tc2d3u52rppt
213,170,100
72,495,618
9c8wqzz7kyf37
209,239,059
71,477,888
9c8wqzz7kyf37
139,331,777
1
7b0kzmf0pfpzn
144,813,295
1
0cqc3bxxd1yqy
102,045,818
1
8vp1ap3af0ma5
128,892,787
16,673,829
84cqfur5na6fg
89,485,065
1
5kk8nd3uzkw13
127,467,250
16,642,939
1uz87xssm312g
67,520,695
8,058,820
a9n705a9gfb71
104,490,582
12,443,376
a9n705a9gfb71
62,627,205
1
ctwjy8cs6vng2
101,677,382
15,147,771
3p8q3q0scmr2k
57,965,892
268,353
akp7vwtyfmuas
98,000,414
1
0ybdwg85v9v6m
57,519,802
53
1kn9bv63xvjtc
87,293,909
1
5kk8nd3uzkw13
52,690,398
0
9btkg0axsk114
77,786,274
74
1kn9bv63xvjtc
34,767,882
1,003
bdgma0tn8ajz9
Not only queries are different but also the number of blocks read by top 10 queries are much higher on 17th than 18th.
The other big difference is the average read time on two days
Tablespace IO Stats
17th Oct
Tablespace
Reads
Av Reads/s
Av Rd(ms)
Av Blks/Rd
Writes
Av Writes/s
Buffer Waits
Av Buf Wt(ms)
INDUS_TRN_DATA01
947,766
59
4.24
4.86
185,084
11
2,887
6.42
UNDOTBS2
517,609
32
4.27
1.00
112,070
7
108
11.85
INDUS_MST_DATA01
288,994
18
8.63
8.38
52,541
3
23,490
7.45
INDUS_TRN_INDX01
223,581
14
11.50
2.03
59,882
4
533
4.26
TEMP
198,936
12
2.77
17.88
11,179
1
732
2.13
INDUS_LOG_DATA01
45,838
3
4.81
14.36
348
0
1
0.00
INDUS_TMP_DATA01
44,020
3
4.41
16.55
244
0
1,587
4.79
SYSAUX
19,373
1
19.81
1.05
14,489
1
0
0.00
INDUS_LOG_INDX01
17,559
1
4.75
1.96
2,837
0
2
0.00
SYSTEM
7,881
0
12.15
1.04
1,361
0
109
7.71
INDUS_TMP_INDX01
1,873
0
11.48
13.62
231
0
0
0.00
INDUS_MST_INDX01
256
0
13.09
1.04
194
0
2
10.00
UNDOTBS1
70
0
1.86
1.00
60
0
0
0.00
STG_DATA01
63
0
1.27
1.00
60
0
0
0.00
USERS
63
0
0.32
1.00
60
0
0
0.00
INDUS_LOB_DATA01
62
0
0.32
1.00
60
0
0
0.00
TS_AUDIT
62
0
0.48
1.00
60
0
0
0.00
18th Oct
Tablespace
Reads
Av Reads/s
Av Rd(ms)
Av Blks/Rd
Writes
Av Writes/s
Buffer Waits
Av Buf Wt(ms)
INDUS_TRN_DATA01
980,283
91
1.40
4.74The AWR reports for two days with same sqlID with different execution plan and Elapsed Time (s), Executions time please help me to find out what is reason for this change.
Please find the below detail 17th day my process are very slow as compare to 18th
You wrote with different execution plan, I think, you saw plans. It is very difficult, you get old plan.
I think Execution plans is not changed in different days, if you not added index or ...
What say ADDM report about this script?
As you know, It is normally, different Elapsed Time for same statement in different day.
It is depend your database workload.
It think you must use SQL Access and SQl Tuning advisor for this script.
You can get solution for slow running problem.
Regards
Mahir M. Quluzade -
Different 'execution plans' for same sql in 10R2
DB=10.2.0.5
OS=RHEL 3
Im not sure of this, but seeing different plans for same SQL.
select sql_text from v$sqlarea where sql_id='92mb4z83fg4st'; <---TOP SQL from AWR
SELECT /*+ OPAQUE_TRANSFORM */ "ENDUSERID","LASTLOGINATTEMPTTIMESTAMP","LOGINSOURCECD","LOGINSUCCESSFLG",
"ENDUSERLOGINATTEMPTHISTORYID","VERSION_NUM","CREATEDATE"
FROM "BOMB"."ENDUSERLOGINATTEMPTHISTORY" "ENDUSERLOGINATTEMPTHISTORY";
SQL> set autotrace traceonly
SQL> SELECT /*+ OPAQUE_TRANSFORM */ "ENDUSERID","LASTLOGINATTEMPTTIMESTAMP","LOGINSOURCECD","LOGINSUCCESSFLG",
"ENDUSERLOGINATTEMPTHISTORYID","VERSION_NUM","CREATEDATE"
FROM "BOMB"."ENDUSERLOGINATTEMPTHISTORY" "ENDUSERLOGINATTEMPTHISTORY"; 2 3
1822203 rows selected.
Execution Plan
Plan hash value: 568996432
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1803K| 75M| 2919 (2)| 00:00:36 |
| 1 | TABLE ACCESS FULL| ENDUSERLOGINATTEMPTHISTORY | 1803K| 75M| 2919 (2)| 00:00:36 |
Statistics
0 recursive calls
0 db block gets
133793 consistent gets
0 physical reads
0 redo size
76637183 bytes sent via SQL*Net to client
1336772 bytes received via SQL*Net from client
121482 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1822203 rows processed
===================================== another plan ===============
SQL> select * from TABLE(dbms_xplan.display_awr('92mb4z83fg4st'));
15 rows selected.
Execution Plan
Plan hash value: 3015018810
| Id | Operation | Name |
| 0 | SELECT STATEMENT | |
| 1 | COLLECTION ITERATOR PICKLER FETCH| DISPLAY_AWR |
Note
- rule based optimizer used (consider using cbo)
Statistics
24 recursive calls
24 db block gets
49 consistent gets
0 physical reads
0 redo size
1529 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
15 rows processed
=========second one shows only 15 rows...
Which one is correct ?Understood, second plan is for self 'dbms_xplan'.
Anyhow I opened a new session where I did NOT on 'auto-trace'. but plan is somewhat than the original.
SQL> /
PLAN_TABLE_OUTPUT
SQL_ID 92mb4z83fg4st
SELECT /*+ OPAQUE_TRANSFORM */ "ENDUSERID","LASTLOGINATTEMPTTIMESTAMP","LOGINSOURCECD","
LOGINSUCCESSFLG","ENDUSERLOGINATTEMPTHISTORYID","VERSION_NUM","CREATEDATE" FROM
"BOMB"."ENDUSERLOGINATTEMPTHISTORY" "ENDUSERLOGINATTEMPTHISTORY"
Plan hash value: 568996432
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
PLAN_TABLE_OUTPUT
| 0 | SELECT STATEMENT | | | | 2919 (100)| |
| 1 | TABLE ACCESS FULL| ENDUSERLOGINATTEMPTHISTORY | 1803K| 75M| 2919 (2)| 00:00:36 |
15 rows selected.
I am just wondering, which plan is the accurate and which I need to believe ?
Maybe you are looking for
-
I think this question has been asked a million times before but I'm hoping something has been resolved now! It did work for me and my client a few months ago (by using the 'event.target.buttonImportIcon();' script. I'm 99% certain it worked fine a fe
-
DVD Studio burning problem error message: "remove the VIDEO_TS folder from the Build Location"; where is build location?
-
Connecting Oracle to MS SqlServer using Microsoft SQL Server ODBC Driver
Hello, I have just downloaded the newly released Microsoft® SQL Server® ODBC Driver for Linux and trying to configure it to connect to SqlServer Database from Oracle using DG4ODBC Below are my config files: # odbcinst -j unixODBC 2.3.1 DRIVERS.......
-
IPCC 4.0(5) with Sql 2005 Enterprise DB
Hello, I currently have IPCC 4.0(5) (no SR) doing with an ODBC connection to a SQL 2000 server. I am preparing to upgrade the SQL 2000 server to SQL 2005 (only upgrading a SQL server, not touching SQL 2000 running on IPCC). According to the document
-
Password-protect a folder within a PDF Portfolio?
Is it possible to password-protect an individual folder within a PDF Portfolio? (I don't want the password to apply to the Portfolio as a whole).