9582.69043 gigabytes of physical read total bytes and increasing!
In EM
Database Instance: PROD > Top Activity > I got following
physical read total bytes 62763565056 10289335500800 4183122176
cell physical IO interconnect bytes 62763565056 10289335500800 4183122176
physical read bytes 62763565056 10289335500800 4183122176
And the session is running following update procedure:
declare
FM_BBBB MT.BBBB_CODE%TYPE;
l_start NUMBER;
cursor code_upd is select /*+ parallel(FM_KWT_POP_BBBB_MISMATCH, 10) */ DDD_CID, DDD_BBBB, CCCC_BBBB from MT_MISMATCH;
begin
-- Time regular updates.
l_start := DBMS_UTILITY.get_time;
FOR rec IN code_upd LOOP
update /*+ parallel(MT, 10) nologging */ MT
set BBBB_code = rec.CCCC_BBBB
where source= 0
and cid_no = rec.DDD_CID
and BBBB_code = rec.DDD_BBBB;
commit;
END LOOP;
DBMS_OUTPUT.put_line('Bulk Updates : ' || (DBMS_UTILITY.get_time - l_start));
end;
There are 9.5 million records in MT but source=0 have only 3 million records and 376K records in MT_MISMATCH, What I don't understand why this is taking so much of time and so many bytes read? Both Tables are analyzed before running this procedure.
Can someone shed some light on this? Is there any better way of doing the same job?
Nabeel Khan wrote:
In EM
Database Instance: PROD > Top Activity > I got following
physical read total bytes 62763565056 10289335500800 4183122176
cell physical IO interconnect bytes 62763565056 10289335500800 4183122176
physical read bytes 62763565056 10289335500800 4183122176
And the session is running following update procedure:
declare
FM_BBBB MT.BBBB_CODE%TYPE;
l_start NUMBER;
cursor code_upd is select /*+ parallel(FM_KWT_POP_BBBB_MISMATCH, 10) */ DDD_CID, DDD_BBBB, CCCC_BBBB from MT_MISMATCH;
begin
-- Time regular updates.
l_start := DBMS_UTILITY.get_time;
FOR rec IN code_upd LOOP
update /*+ parallel(MT, 10) nologging */ MT
set BBBB_code = rec.CCCC_BBBB
where source= 0
and cid_no = rec.DDD_CID
and BBBB_code = rec.DDD_BBBB;
commit;
END LOOP;
DBMS_OUTPUT.put_line('Bulk Updates : ' || (DBMS_UTILITY.get_time - l_start));
end;
There are 9.5 million records in MT but source=0 have only 3 million records and 376K records in MT_MISMATCH, What I don't understand why this is taking so much of time and so many bytes read? Both Tables are analyzed before running this procedure.
Can someone shed some light on this? Is there any better way of doing the same job?Lots of badness going on here.
1) looping / procedural code where none is needed.
2) commit within the loop, one of the worst evils of all in Oracle. Please read this
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2680799800346456179
I'd look into rewriting this as a single SQL (maybe merge) statement. Or at worst .. a bulk process utilizing collections and FORALL's.
Similar Messages
-
Difference between "Physical Read Total IO Requests Per Sec" and "Physical Read IO Requests Per Sec"
What is the difference between "Physical Read Total IO Requests Per Sec" and "Physical Read IO Requests Per Sec" metrics in dba_hist_sysmetric_summary?
From docs (Reference, Statistics Descriptions) :
physical read IO requests : Number of read requests for application activity (mainly buffer cache and direct load operation) which read one or more database blocks per request. This is a subset of "physical read total IO requests" statistic.
physical read total IO requests : Number of read requests which read one or more database blocks for all instance activity including application, backup and recovery, and other utilities. -
Cell physical IO interconnect bytes waits ***
Hi,
I have a database running on RAC 11g R2 only one instance is up and running now. (on my laptop which has an SSD)
The database is stored on the ASM;
I created a table as
create table temp as select * from v$sqltext;
insert into temp select * from v$sqltext;
/ (same operation repeated for about 500 times so that more data is populated)
SQL> select count(*) from vishnu.temp;
COUNT(*)
1783477
now i created an another table as folllows
create table temp1 as select * from temp where 1=2;
created an error log for temp1 table;
alter table temp1 modify (address primary key);
insert into temp1 select * from temp log errors into err_$temp1 reject limit unlimited;
This statement is taking like about 20 minutes to complete. and when checks the waits related to that particular session i found the following data.
VISHNU 136 session logical reads 75794251
VISHNU 136 table scan rows gotten 528383911
VISHNU 136 undo change vector size 687760680
VISHNU 136 physical write total bytes 703430656
USERNAME SID STASTIC USAGE
VISHNU 136 session connect time 1314356325
VISHNU 136 process last non-idle time 1314356325
VISHNU 136 redo size 4128953448
VISHNU 136 physical read bytes 4616249344
VISHNU 136 physical read total bytes 4641939456
VISHNU 136 cell physical IO interconnect bytes 5345370112
Can any one explain how can we troubleshoot ***cell physical IO interconnect bytes*** ,
searched in google it said this wait event is related to exadata. but clearly the database is running on a core i7 laptop with a SSD.
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
Linux rac1.localdomain 2.6.18-164.el5 #1 SMP Thu Sep 3 02:16:47 EDT 2009 i686 i686 i386 GNU/Linux
linux version OEL 5.5I don't think that you can trust this statistic as it is also used in Oracle XE 11g beta (on a laptop without SSD):
SQL> select * from v$version;
BANNER
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta
PL/SQL Release 11.2.0.2.0 - Beta
CORE 11.2.0.2.0 Production
TNS for 32-bit Windows: Version 11.2.0.2.0 - Beta
NLSRTL Version 11.2.0.2.0 - Production
SQL> select * from v$sysstat where statistic# = 54;
STATISTIC# NAME CLASS VALUE STAT_ID
54 cell physical IO interconnect bytes 64 1064334336 2957355214 -
Is RMAN I/Os accounted in physical reads stat?
I mean, do the blocks read from disk by RMAN to backup the database get accounted in physical reads statistic?
One of our databases has a value for physical read total IO requests higher than physical reads so I guess the physical reads missing are RMAN's.
Thanks in advanceStatistics have not the same unit so you cannot compare them directly:
>
physical read total IO requests
Number of read requests which read one or more database blocks for all instance activity including application, backup and recovery, and other utilities. The difference between this value and "physical read total multi block requests" gives the total number of single block read requests.
>
and
>
physical reads
Total number of data blocks read from disk. This value can be greater than the value of "physical reads direct" plus "physical reads cache" as reads into process private buffers also included in this statistic.
>
You should compare physical read total IO requests with:
>
physical read IO requests
Number of read requests for application activity (mainly buffer cache and direct load operation) which read one or more database blocks per request. This is a subset of "physical read total IO requests" statistic.
>
Edited by: P. Forstmann on 9 avr. 2013 12:57 -
Logical reads VS physical reads
hello all,
What is the difference between logical reads and physical read ??? I do get the part of logical read (from buffer) and physical read(from disk). And also do know physical reads are bad, but is it true in oracle world..logical reads are bad ??? if so why ??? Could you please explain which on to look for. As i am going thru AWR report and i see segemts by logical/physical read.The first and foremost difference is that physcial reads are done from the hard disk. And this is always going tobe slwoer than the memory. That's why its said that the physcial ios must be removed. Logical ios are good as they are done from the memory.The theory that logical are also not good is because the logical ios require the access given by latches. So with lots of the gets for the latches put them in to contention and latch contention would make the access to the logical io slower.So its better to do this in less IO even they are logical too.
Lots of logical IOs probably mean that you are accessing unnecessary data which may be not required.
HTH
Aman.... -
Reading 21576 bytes of data at offset 3 in a buffer of total size 114
Logs claim it's a 'buffer overflow' - [2015-Jan-05 22:32:41] RDP (0): Exception caught: BufferOverflowException in file '../../gryps/misc/containers/flexbuffer.h' at line 421
Specifics:
attempting to connect to virtual box running on localhost:55985
OSX: 10.9.5
RDP: 8.0.12
VirtualBox: 4.3.20
[2015-Jan-05 22:32:41] RDP (0): --- BEGIN INTERFACE LIST ---
[2015-Jan-05 22:32:41] RDP (0): lo0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): lo0 af=30 (AF_INET6) addr=::1 netmask=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
[2015-Jan-05 22:32:41] RDP (0): lo0 af=2 (AF_INET) addr=127.0.0.1 netmask=255.0.0.0
[2015-Jan-05 22:32:41] RDP (0): lo0 af=30 (AF_INET6) addr=fe80::1%lo0 netmask=ffff:ffff:ffff:ffff::
[2015-Jan-05 22:32:41] RDP (0): gif0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): stf0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): en0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): en0 af=30 (AF_INET6) addr=fe80::2acf:e9ff:fe1a:cc0d%en0 netmask=ffff:ffff:ffff:ffff::
[2015-Jan-05 22:32:41] RDP (0): en0 af=2 (AF_INET) addr=192.168.10.108 netmask=255.255.255.0
[2015-Jan-05 22:32:41] RDP (0): en4 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): en5 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): bridge0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): p2p0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): vboxnet0 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): vboxnet1 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): vboxnet2 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): vboxnet3 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): vboxnet4 af=18 addr= netmask=
[2015-Jan-05 22:32:41] RDP (0): --- END INTERFACE LIST ---
[2015-Jan-05 22:32:41] RDP (0): correlation id: 10b4ea14-964f-83df-bf55-4ff43fb10000
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to '127.0.0.1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to '::1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to 'fe80:1::1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Exception caught: BufferOverflowException in file '../../gryps/misc/containers/flexbuffer.h' at line 421
User Message : Reading 12112 bytes of data at offset 3 in a buffer of total size 82
[2015-Jan-05 22:32:41] RDP (0): correlation id: 10b4ea14-964f-83df-bf55-4ff43fb10000
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to '127.0.0.1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to '::1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Resolved 'localhost' to 'fe80:1::1' using NameResolveMethod_DNS(1)
[2015-Jan-05 22:32:41] RDP (0): Exception caught: BufferOverflowException in file '../../gryps/misc/containers/flexbuffer.h' at line 421
User Message : Reading 21576 bytes of data at offset 3 in a buffer of total size 114
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolConnectingNetwork(1)
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolNegotiatingCredentials(2)
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolConnectingNetwork(1)
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolNegotiatingCredentials(2)
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolDisconnecting(7)
[2015-Jan-05 22:32:41] RDP (0): Protocol state changed to: ProtocolDisconnected(8)
[2015-Jan-05 22:32:41] RDP (0): ------ END ACTIVE CONNECTION ------
ps: the editor for posting on this forum is absolutely the most terrible I had ever seen.Hi,
Please let us know which OS you are trying to connect. Because if you are running Windows 8 and not Windows 8 Pro then you won't be able to connect to your PC from any device. Windows 8 can't host an RDP session.
Remote Desktop Client on Mac: FAQ
http://technet.microsoft.com/en-in/library/dn473006.aspx
Hope it helps!
Thanks.
Dharmesh Solanki
TechNet Community Support
Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact [email protected] -
ASM: determine total bytes written/read & IOPS
Hello
My Environment:
Oracle 11.2.0.3 EE
SuSE Enterprise Linux 11 SP1, 64 Bit
ASM Diskgroups on RAW Luns (2 per group) in Hitachi Disk Storage
DB-Server: HP DL380 G7
I like to switch ASM disks from disk to ssd's, direct attach to via HP DS2700 enclosure:
Diskgroup +DATA
5x400GB Enterprise SSD, RAID 5, 1.6TB raw capacity
used for Redo, Datafiles
Diskgroup +ARCH
4x400GB Enterprise SSD, RAID0+1, 800GBraw capacity
used for Redo, Archives, Flash Recovery Area
As I could understand SSD technology so far, SSDs have a livetime, meaning there is a guaranteed amount of data which can be read/written on it. My aim is to engineer a system that does not have the point of failure of two broken ssd's in the same RAID group.
How can I determine the total bytes written/read to the ASM diskgroups so far?
My idea was to dermine ASM block size (select block_size from v$asm_diskgroup) and then look at total reads and writes columns via iostat command in asmcmd. I assume these values are since last ASM startup.
Is there a way to determine IOPS per diskgroup?
Thanks
scsiDoing the calculation for 1. gives me a strange result:
sys@+ASM> select block_size from v$asm_diskgroup;
BLOCK_SIZE
4096
4096
sys@+ASM> select STARTUP_TIME from v$instance;
STARTUP_T
23-MAR-13
ASMCMD> iostat
Group_Name Dsk_Name Reads Writes
ARCH ARCH_0000 56794017285632 39811971420672
ARCH ARCH_0001 50857383503360 38789309743616
DATA DATA_0000 80190065973760 42021664440320
DATA DATA_0001 80085260539392 42192811246080
Total Reads x Block Size = Total amount of data read
(56794017285632 + 50857383503360) x 4096 Bytes = 4.409401376317112e+17 Bytes = 401032.72 Pebibytes -
High no. of physical reads of a query in statspack report
we have a Oracle database 9.2.0.6 on solaris box....
SQL ordered by Reads for DB: ic Instance: ic12 Snaps: 19 -20
-> End Disk Reads Threshold: 1000
CPU Elapsd
Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value
1,103,253 77 14,328.0 53.1 1641.98 11428.17 3825541888
Module: w3wp.exe
select MRH_MRN,DECODE(MRH_SEX,'M','MALE','FEMALE') AS SEX, trim
((mrh_sur_name||' '||mrh_first_name||' '||mrh_middle_name)) as M
EMNAME, decode(nvl(mrh_fellow_status_yn,'333'),'Y','FCA','ACA')
AS ACA_FCA, DECODE(MRH_RESI_STATUS,'I',MRH_PROF_ADDR_LINE_1,'A',
MRH_RES_ADDR_LINE_1) AS L_ADD1, DECODE(MRH_RESI_STATUS,'I',MRH_Pexplain plan
SQL> explain plan for select MRH_MRN,DECODE(MRH_SEX,'M','MALE','FEMALE') AS SEX
, trim((mrh_sur_name||' '||mrh_first_name||' '||mrh_middle_name)) as MEMNAME, de
code(nvl(mrh_fellow_status_yn,'333'),'Y','FCA','ACA')AS ACA_FCA, DECODE(MRH_RESI
_STATUS,'I',MRH_PROF_ADDR_LINE_1,'A',
2 MRH_RES_ADDR_LINE_1) AS L_ADD1, DECODE(MRH_RESI_STATUS,'I',MRH_PROF_ADDR_LI
NE_2,'A',MRH_RES_ADDR_LINE_2) AS L_ADD2, DECODE(MRH_RESI_STATUS,'I',MRH_PROF_ADD
R_LINE_3,'A',MRH_RES_ADDR_LINE_3) ASL_ADD3, DECODE(MRH_RESI_STATUS,'I',MRH_PROF_
ADDR_LINE_4,'A',
3 MRH_RES_ADDR_LINE_4) AS L_ADD4, DECODE(MRH_RESI_STATUS,'I',a.city_name,'A',
C.CITY_NAME) AS L_CITY, DECODE(MRH_RESI_STATUS,'I',MRH_PROF_ZIP_POSTAL_CODE,'A',
MRH_RES_ZIP_POSTAL_CODE) AS L_PIN, DECODE(MRH_RESI_STATUS,'I',b.cou_name,'A',D.C
OU_NAME) as L_Country,
4 DECODE(MRH_RESI_STATUS,'I','NOT APPLICABLE',MRH_PROF_ADDR_LINE_1)AS R_ADD1,
DECODE(MRH_RESI_STATUS,'I',' ',MRH_PROF_ADDR_LINE_2)AS R_ADD2, DECODE(MRH_RESI_
STATUS,'I',' ',MRH_PROF_ADDR_LINE_3)
5 AS R_ADD3, DECODE(MRH_RESI_STATUS,'I',' ',MRH_PROF_ADDR_LINE_4)AS R_ADD4, D
ECODE(MRH_RESI_STATUS,'I',' ','A',A.CITY_NAME) AS R_CITY, DECODE(MRH_RESI_STATUS
,'I',' ','A',MRH_PROF_ZIP_POSTAL_CODE) AS R_PIN, DECODE(MRH_RESI_STATUS,'I',' ',
'A',B.COU_NAME) as
6 R_Country, decode(nvl(mrh_mem_sub_status,'555'),'26','EXPIRED','') as sub_s
tatus, decode(nvl(mrh_mem_status,'777'),'1','ACTIVE','2','REMOVED') as mem_statu
s,mrh_resi_status, DECODE(MRH_COP_STATUS,'1',DECODE(MRH_COP_TYPE ,'13','FULLTIME
-COP','1',
7 'FULLTIME-COP', '12','PARTTIME-COP','2','PARTTIME-COP'),'NOT HOLDING COP')
AS COP_STATUS, TO_CHAR(MRH_ENROL_DT,'RRRR') AS ASSO_YR,TO_CHAR(MRH_FELLOW_DT,'RR
RR') AS FELLOW_YR from om_mem_reg_head,om_city A,
8 om_country B,om_city C,om_country D where mrh_doc_status=5 and mrh_prof_
city_code=A.City_code(+) and mrh_prof_cou_code=B.cou_code(+) and mrh_res_city_c
ode=C.City_code(+) and mrh_res_cou_code=D.cou_code(+) and trim((mrh_sur_name||'
'||mrh_first_name||
9 ''||mrh_middle_name)) like upper('%%') ORDER BY trim((mrh_sur_name||' '||m
rh_first_name||' '||mrh_middle_name))
10 ;
Explained.
SQL> select * from table(dbms_xplan.displaY());
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost
|
| 0 | SELECT STATEMENT | | 2870 | 762K| | 202
PLAN_TABLE_OUTPUT
8 |
| 1 | SORT ORDER BY | | 2870 | 762K| 1592K| 202
8 |
| 2 | NESTED LOOPS OUTER | | 2870 | 762K| | 190
2 |
| 3 | NESTED LOOPS OUTER | | 2870 | 714K| | 190
2 |
PLAN_TABLE_OUTPUT
| 4 | HASH JOIN OUTER | | 2870 | 667K| | 190
2 |
| 5 | HASH JOIN OUTER | | 2870 | 616K| | 189
2 |
| 6 | TABLE ACCESS FULL| OM_MEM_REG_HEAD | 2870 | 566K| | 188
2 |
| 7 | TABLE ACCESS FULL| OM_COUNTRY | 677 | 12186 | |
4 |
PLAN_TABLE_OUTPUT
| 8 | TABLE ACCESS FULL | OM_COUNTRY | 677 | 12186 | |
4 |
| 9 | INDEX UNIQUE SCAN | CITY_CODE_PK | 1 | 17 | |
|
| 10 | INDEX UNIQUE SCAN | CITY_CODE_PK | 1 | 17 | |
|
PLAN_TABLE_OUTPUT
Note: cpu costing is off, PLAN_TABLE' is old version
18 rows selected.
SQL>Please suggest me whjat cab done to overcome the same
Edited by: user00726 on Feb 3, 2009 5:03 AMSQL> show arraysize
arraysize 15
SQL>should i set SDU parameter in tnsnames and listener.ora
for more info related to the same...pls do visit the below thread:
n/w perfromance related problem -
I 'm running the same query against two databases on two different servers, and not seeing the expected results.
Query runs in 6 seconds on server A, and 32 seconds on server B. The database on B is a copy of the database on A, same blocksize, same db_file_multiblock_read_count.
Query is:
SELECT
IMS_BO_PMAN08.REF_ID,( sum(IMS_BO_PMAN08_TRAN.MONTH_13_APR) ) + ( sum(IMS_BO_PMAN08_TRAN.MONTH_14_MAY) ) ,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup','S','SOS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Completions','F','FC Expenditure','V','ACQ Expenditure')
FROM
IMS_BO_PMAN08,
IMS_BO_PMAN08_TRAN
WHERE
( IMS_BO_PMAN08.PROG_MAN_ID=IMS_BO_PMAN08_TRAN.PROG_MAN_ID )
AND ( IMS_BO_PMAN08.VERSION_ID IN (select version_id from ims_bo_version where version_id = 1 ) )
AND ( IMS_BO_PMAN08.INV_REGION_CODE > 2 )
and decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast') ='Actual'
GROUP BY
IMS_BO_PMAN08.REF_ID,decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup','S','SOS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Completions','F','FC Expenditure','V','ACQ Expenditure');
I am seeing the same execution plan when running the query against either database, with the same cost in each case. However, the physical reads on server B is ten times that of on server A
Server A
=====
293851 rows selected.
Elapsed: 00:00:06.58
Execution Plan
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=50270 Card=27811 Bytes=973385)
1 0 SORT (GROUP BY) (Cost=50270 Card=27811 Bytes=973385)
2 1 HASH JOIN (Cost=50088 Card=27811 Bytes=973385)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'IMS_BO_PMAN08' (Cost=17990 Card=26243 Bytes=446131)
4 3 INDEX (RANGE SCAN) OF 'IMS_BO_PMAN08_IX1' (UNIQUE) (Cost=105 Card=26243)
5 2 NESTED LOOPS (Cost=32049 Card=107258 Bytes=1930644)
6 5 INDEX (UNIQUE SCAN) OF 'IMS_BO_VERSION_IX1' (UNIQUE)
7 5 TABLE ACCESS (FULL) OF 'IMS_BO_PMAN08_TRAN' (Cost=32048 Card=107258 Bytes=1716128)
Statistics
0 recursive calls
13 db block gets
288529 consistent gets
*18,218 physical reads*
0 redo size
17924295 bytes sent via SQL*Net to client
2174914 bytes received via SQL*Net from client
19592 SQL*Net roundtrips to/from client
0 sorts (memory)
1 sorts (disk)
293851 rows processed
Server B
=====
292677 rows selected.
Elapsed: 00:00:32.66
Execution Plan
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=50255 Card=27805 Bytes=973175)
1 0 SORT (GROUP BY) (Cost=50255 Card=27805 Bytes=973175)
2 1 HASH JOIN (Cost=50073 Card=27805 Bytes=973175)
3 2 TABLE ACCESS (BY INDEX ROWID) OF 'IMS_BO_PMAN08' (Cost=17984 Card=26237 Bytes=446029)
4 3 INDEX (RANGE SCAN) OF 'IMS_BO_PMAN08_IX1' (UNIQUE) (Cost=105 Card=26237)
5 2 NESTED LOOPS (Cost=32040 Card=107230 Bytes=1930140)
6 5 INDEX (UNIQUE SCAN) OF 'IMS_BO_VERSION_IX1' (UNIQUE)
7 5 TABLE ACCESS (FULL) OF 'IMS_BO_PMAN08_TRAN' (Cost=32039 Card=107230 Bytes=1715680)
Statistics
0 recursive calls
357 db block gets
250918 consistent gets
*188,332 physical reads*
0 redo size
17853447 bytes sent via SQL*Net to client
2166145 bytes received via SQL*Net from client
19513 SQL*Net roundtrips to/from client
0 sorts (memory)
1 sorts (disk)
292677 rows processed
8.1.6.3 on solaris 8
Can anyone tell me where the excessive physical i/o's (and presumably associated runtime) is coming from? Any pointers much appreciated.
Pete
Edited by: user12248598 on 17-Mar-2010 09:01sort_area_size, sort_area_retained_size & hash_area_size are the same size for both instances, as are all NLS settings.
Tables are not specified NOCACHE, and there are no additional buffer pools.
Running with sql_trace enabled for both queries highlighed some very interesting results:
For the slow query, this is the tkprof output, unfortunately waits=yes is not available in 8.1.6
TKPROF: Release 8.1.6.3.0 - Production on Tue Mar 23 14:54:18 2010
(c) Copyright 1999 Oracle Corporation. All rights reserved.
Trace file: imsroc_ora_10166.trc
Sort options: default
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
alter session set events '10046 trace name context forever, level 8'
call count cpu elapsed disk query current rows
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END;
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.01 0.01 0 0 0 1
Fetch 0 0.00 0.00 0 0 0 0
total 2 0.01 0.01 0 0 0 1
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
SELECT
IMS_BO_PMAN08.REF_ID,
( sum(IMS_BO_PMAN08_TRAN.MONTH_13_APR) ) + ( sum(IMS_BO_PMAN08_TRAN.MONTH_14_MAY) ) ,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup
','S','SOS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Comple
tions','F','FC Expenditure','V','ACQ Expenditure')
FROM
bo_ims.IMS_BO_PMAN08,
bo_ims.IMS_BO_PMAN08_TRAN
WHERE ( IMS_BO_PMAN08.PROG_MAN_ID=IMS_BO_PMAN08_TRAN.PROG_MAN_ID )
AND ( IMS_BO_PMAN08.VERSION_ID IN (select version_id from bo_ims.ims_bo_version where version_id =
1 ) )
AND ( IMS_BO_PMAN08.INV_REGION_CODE > 2 )
and decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast') = 'Actual'
GROUP BY
IMS_BO_PMAN08.REF_ID,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup
','S','SOS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Comple
tions','F','FC Expenditure','V','ACQ Expenditure')
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 16278 15.36 36.39 215625 251560 361 244156
total 16280 15.36 36.39 215625 251560 361 244156
Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 5
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 2 0.00 0.00 0 0 0 0
Execute 3 0.01 0.01 0 0 0 1
Fetch 16278 15.36 36.39 215625 251560 361 244156
total 16283 15.37 36.40 215625 251560 361 244157
Misses in library cache during parse: 1
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 0 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 0 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
3 user SQL statements in session.
0 internal SQL statements in session.
3 SQL statements in session.
Trace file: imsroc_ora_10166.trc
Trace file compatibility: 8.00.04
Sort options: default
2 sessions in tracefile.
5 user SQL statements in trace file.
0 internal SQL statements in trace file.
3 SQL statements in trace file.
3 unique SQL statements in trace file.
75998 lines in trace file.And this is the tkprof formatted output for the faster running query:
TKPROF: Release 8.1.6.3.0 - Production on Tue Mar 23 14:56:28 2010
(c) Copyright 1999 Oracle Corporation. All rights reserved.
Trace file: imslive_ora_7489.trc
Sort options: default
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
alter session set events '10046 trace name context forever, level 8'
call count cpu elapsed disk query current rows
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
SELECT
IMS_BO_PMAN08.REF_ID,
( sum(IMS_BO_PMAN08_TRAN.MONTH_13_APR) ) + ( sum(IMS_BO_PMAN08_TRAN.MONTH_14_MAY) ) ,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,:SYS_B_00,:SYS_B_01,:SYS_B_02,:SYS_B_03),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,:SYS_B_04,:SYS_B_05,:SYS_B_06,:SYS_B_07,:SYS_B_08,:SYS_B_09,:SYS_B_10,:
SYS_B_11,:SYS_B_12,:SYS_B_13,:SYS_B_14,:SYS_B_15,:SYS_B_16,:SYS_B_17,:SYS_B_18,:SYS_B_19,:SYS_B_20,:SYS_B_21,:
SYS_B_22,:SYS_B_23)
FROM
BO_IMS.IMS_BO_PMAN08,
BO_IMS.IMS_BO_PMAN08_TRAN
WHERE ( IMS_BO_PMAN08.PROG_MAN_ID=IMS_BO_PMAN08_TRAN.PROG_MAN_ID )
AND ( IMS_BO_PMAN08.VERSION_ID IN (select version_id from bo_ims.ims_bo_version where version_id = :SYS_B_
24 ) )
AND ( IMS_BO_PMAN08.INV_REGION_CODE > :SYS_B_25 )
and decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,:SYS_B_26,:SYS_B_27,:SYS_B_28,:SYS_B_29) = :SYS_B_30
GROUP BY
IMS_BO_PMAN08.REF_ID,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,:SYS_B_31,:SYS_B_32,:SYS_B_33,:SYS_B_34),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,:SYS_B_35,:SYS_B_36,:SYS_B_37,:SYS_B_38,:SYS_B_39,:SYS_B_40,:SYS_B_41,:
SYS_B_42,:SYS_B_43,:SYS_B_44,:SYS_B_45,:SYS_B_46,:SYS_B_47,:SYS_B_48,:SYS_B_49,:SYS_B_50,:SYS_B_51,:SYS_B_52,:
SYS_B_53,:SYS_B_54)
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 20042 0.00 0.00 20064 295221 13 300608
total 20045 0.00 0.00 20064 295221 13 300608
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
Rows Row Source Operation
300608 SORT GROUP BY
300628 NESTED LOOPS
55647 NESTED LOOPS
2 INDEX UNIQUE SCAN (object id 151050)
55647 TABLE ACCESS BY INDEX ROWID IMS_BO_PMAN08
55649 INDEX RANGE SCAN (object id 185149)
300628 TABLE ACCESS BY INDEX ROWID IMS_BO_PMAN08_TRAN
356274 INDEX RANGE SCAN (object id 157241)
DELETE FROM PLAN_TABLE
WHERE
STATEMENT_ID=:1
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 3 5 12 0
Fetch 0 0.00 0.00 0 0 0 0
total 2 0.00 0.00 3 5 12 0
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
Rows Row Source Operation
1 DELETE PLAN_TABLE
1 TABLE ACCESS FULL PLAN_TABLE
EXPLAIN PLAN SET STATEMENT_ID='PLUS18028884' FOR SELECT
IMS_BO_PMAN08.REF_ID,
( sum(IMS_BO_PMAN08_TRAN.MONTH_13_APR) ) + ( sum(IMS_BO_PMAN08_TRAN.MONTH_14_MAY) ) ,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup','S','S
OS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Completions','F','FC E
xpenditure','V','ACQ Expenditure')
FROM
BO_IMS.IMS_BO_PMAN08,
BO_IMS.IMS_BO_PMAN08_TRAN
WHERE ( IMS_BO_PMAN08.PROG_MAN_ID=IMS_BO_PMAN08_TRAN.PROG_MAN_ID )
AND ( IMS_BO_PMAN08.VERSION_ID IN (select version_id from bo_ims.ims_bo_version where version_id = 1 ) )
AND ( IMS_BO_PMAN08.INV_REGION_CODE > 2 )
and decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast') = 'Actual'
GROUP BY
IMS_BO_PMAN08.REF_ID,
decode(IMS_BO_PMAN08_TRAN.TRANS_SUB_TYPE,'A','Actual','F','Forecast'),
decode(IMS_BO_PMAN08_TRAN.TRANS_TYPE,'E','Expenditure','U','Unit completions','A','Allocation Takeup','S','S
OS units','T','SOS Expenditure','G','Grant Claim Units','H','Larger Homes','C','FC Unit Completions','F','FC E
xpenditure','V','ACQ Expenditure')
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5
insert into plan_table (statement_id, timestamp, operation, options,
object_node, object_owner, object_name, object_instance, object_type,
search_columns, id, parent_id, position, other,optimizer, cost, cardinality,
bytes, other_tag, partition_start, partition_stop, partition_id,
distribution )
values
(:1,SYSDATE,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,
:20,:21,:22)
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 7 0.00 0.00 1 3 9 7
Fetch 0 0.00 0.00 0 0 0 0
total 8 0.00 0.00 1 3 9 7
Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 5 (recursive depth: 1)
select o.name, u.name
from
sys.obj$ o, sys.user$ u where obj# = :1and owner# = user#
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 3 12 0 2
total 5 0.00 0.00 3 12 0 2
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: SYS (recursive depth: 1)
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 3 0.00 0.00 0 0 0 0
Execute 4 0.00 0.00 3 5 12 0
Fetch 20042 0.00 0.00 20064 295221 13 300608
total 20049 0.00 0.00 20067 295226 25 300608
Misses in library cache during parse: 3
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 2 0.00 0.00 0 0 0 0
Execute 9 0.00 0.00 1 3 9 7
Fetch 2 0.00 0.00 3 12 0 2
total 13 0.00 0.00 4 15 9 9
Misses in library cache during parse: 2
5 user SQL statements in session.
1 internal SQL statements in session.
6 SQL statements in session.
Trace file: imslive_ora_7489.trc
Trace file compatibility: 8.00.04
Sort options: default
3 sessions in tracefile.
8 user SQL statements in trace file.
1 internal SQL statements in trace file.
6 SQL statements in trace file.
6 unique SQL statements in trace file.
77410 lines in trace file.The sql statement as run did not make use of bind variables, so the ones in the tkprof output for the longer running statement made me immediately think of cursor sharing, and right there in the init.ora for the faster running database was CURSOR_SHARING=FORCE.
I'm not familiar with the history of the databases, nor the specific reasoning for enabling cursor sharing (bind variable usage seems prevalent in all custom code) so I've replicated the setting on the slower database, resulting in a similar tkprof output to the faster server, with a runtime of 7 seconds for 2nd and subsequent runs.
My immediate issue is now solved, thanks to all who contributed, and apologies for not spotting the obvious earlier.
Regards, Pete -
Unable to reduce Physical Reads
Hi
Problem:
Need to reduce the Physical reads in Oracle 8.1.7
Information:
Optimizer_mode= Choose
Statistics will not be gathered.
Intially the cache hit ratio is 18%. At this point when we checked the SQL Statement
SELECT a32,
F_DOCNUMBER,NVL(a109,'BIWS') AS WorkFlow,
a147 AS Service_Subsidary,
a89 AS StaffInd,
a88 AS SubsidiaryInd
FROM doctaba
WHERE a94 = 'CCOC_CARDS_CCA_060824_6'
AND a40 IN ('3','4','5')
0 recursive calls
81 db block gets
5020 consistent gets
3909 physical reads
0 redo size
401 bytes sent via SQL*Net to client
311 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed.
Once we increase the Buffer Cache Hit Ratio to 90% We got the following
0 recursive calls
81 db block gets
3717 consistent gets
3576 physical reads
0 redo size
401 bytes sent via SQL*Net to client
311 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed.
But can you please advice how to reduce the Physical Reads further.
Note: Table DOCTABA is a Snapshot that is present in Other Database.
Please advice!!
Cheers
Ramkannan.ABuffer hit cache ratios are totally meaningless as was proven many years ago by Connor's brilliant little utility that allows you to dial in any ratio you want.
The reason your are getting FTEs is because your totally antiquated version of the product, never supported during the current century, is that it thinks FTEs cost less than using any indexes that may (or may not) exist. You've not established in your email that there are any indexes or posted DDL or provided much of anything else that would be helpful.
I would think moving from the Jurassic to 10.2.0.4, or above, would be your first priority. -
Anyone know what this system stat means cell physical IO interconnect bytes
Hi All.
I can't find any documentation about "cell physical IO interconnect bytes" system stat - does anyone know what it signifies ?
Thanks
Dave
Class Name Value
64 cell physical IO interconnect bytes 1.160476804096E12
1 session logical reads 1.4572587197E10
8 free buffer requested 1.800353E8
1 CPU used by this session 1.8441013E7
8 hot buffers moved to head of LRU 9597137
8 physical write total IO requests 5319164
2 redo ordering marks 5082070
128 background timeouts 2907194
128 messages received 1752295
128 messages sent 17522461* select name, value from gv$sysstat where name like '%physical IO%'
SQL> /
NAME VALUE
cell physical IO interconnect bytes 983887872
cell physical IO bytes saved during optimized file creation 0
cell physical IO bytes saved during optimized RMAN file restore 0
cell physical IO bytes eligible for predicate offload 0
cell physical IO bytes saved by storage index 0
cell physical IO interconnect bytes returned by smart scan 0
cell simulated physical IO bytes eligible for predicate offload 0
cell simulated physical IO bytes returned by predicate offload 0
8 rows selected.
SQL> select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production -
What causes BUFFER GETS and PHYSICAL READS in INSERT operation to be high?
Hi All,
Am performing a huge number of INSERTs to a newly installed Oracle XE 10.2.0.1.0 on Windows. There is no SELECT statement running, but just INSERTs one after the other of 550,000 in count. When I monitor the SESSION I/O from Home > Administration > Database Monitor > Sessions, I see the following stats:
BUFFER GETS = 1,550,560
CONSISTENT GETS = 512,036
PHYSICAL READS = 3,834
BLOCK CHANGES = 1,034,232
The presence of 2 stats confuses. Though the operation is just INSERT in database for this session, why should there be BUFFER GETS of this magnitude and why should there by PHYSICAL READS. Aren't these parameters for read operations? The BLOCK CHANGES value is clear as there are huge writes and the writes change these many blocks. Can any kind soul explain me what causes there parameters to show high value?
The total columns in the display table are as follows (from the link mentioned above)
1. Status
2. SID
3. Database Users
4. Command
5. Time
6. Block Gets
7. Consistent Gets
8. Physical Reads
9. Block Changes
10. Consistent Changes
What does CONSISTENT GETS and CONSISTENT CHANGES mean in a typical INSERT operation? And does someone know which all tables are involved in getting these values?
Thank,
...Flake wrote:
Hans, gracias.
The table just have 2 columns, both of which are varchar2 (500). No constraints, no indexes, neither foreign key references are in place. The total size of RAM in system is 1GB, and yes, there are other GUI's going on like Firefox browser, notepad and command terminals.
But, what does these other applications have to do with Oracle BUFFER GETS, PHYSICAL READS etc.? Awaiting your reply.Total RAM is 1GB. If you let XE decide how much RAM is to be allocated to buffers, on startup that needs to be shared with any/all other applications. Let's say that leaves us with, say 400M for the SGA + PGA.
PGA is used for internal stuff, such as sorting, which is also used in determing the layout of secondary facets such as indexes and uniqueness. Total PGA usage varies in size based on the number of connections and required operations.
And then there's the SGA. That needs to cover the space requirement for the data dictionary, any/all stored procedures and SQL statements being run, user security and so on. As well as the buffer blocks which represent the tablespace of the database. Since it is rare that the entire tablespace will fit into memory, stuff needs to be swapped in and out.
So - put too much space pressure on the poor operating system before starting the database, and the SGA may be squeezed. Put that space pressure on the system and you may enbd up with swapping or paging.
This is one of the reasons Oracle professionals will argue for dedicated machines to handle Oracle software. -
Query on data dictionary results in large number of physical reads
I don't understand why I am getting 80,000 physicals for this query. I am not looking for help re-writing this. I just don't understand why I would hit the disk at all.
My understanding had been that v$views where sql structures that pointed to x$tables. These x$tables are sql structures.
underneath, the x$tables were linked lists stored in memory. This is why when you bounce the database, all the data, gets reset. Since it is not saved to disk.
I am doing a simple insert/select off of v$open_cursor that is resulting in 80,000+ physical reads. I am posting the tkprof. It is all from v$open_cursor.
mysid_table has 6 records. It is 1 mb in size
if I index mysid_table.sid the query reduces to 20,000 physical reads. (but all the physical reads are on v$session_event)
the sequence number I am passing returns 2 SIDs
insert into my_save_table
select *
from v$session_event
where sid in (select sid
from my_sid_table
where id = vseq);
vrowcount := sql%rowcount;
call count cpu elapsed disk query current rows
Parse 1 0.01 0.01 0 0 0 0
Execute 1 31.70 47.57 88570 22 0 1
Fetch 0 0.00 0.00 0 0 0 0
total 2 31.71 47.58 88570 22 0 1
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 22
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
latch: row cache objects 1 0.00 0.00
log file sync 1 0.00 0.00
SQL*Net message to client 1 0.00 0.00
SQL*Net message from client 1 0.00 0.00
********************************************************************************It seems like there is some missing information.
You have a wait for a log file sync, but no commit.
Your table my_sid_table is 1 MB for only 6 records?
Does the target table you are inserting into (my_save_table) have indexes on it? -
Query tuning-how to reduce physical reads-help me
1* select * from masterbillingInvoiceview Where SiteIID =300964 and InvoiceID like '%' order by Invoice asc
SQL> /
33 rows selected.
Elapsed: 00:00:00.34
Execution Plan
Plan hash value: 352896138
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 16 | 6304 | 341 (3)| 00:00:05 |
| 1 | SORT ORDER BY | | 16 | 6304 | 341 (3)| 00:00:05 |
| 2 | TABLE ACCESS BY INDEX ROWID | ADDRESS | 1 | 48 | 2 (0)| 00:00:01
| 3 | NESTED LOOPS | | 16 | 6304 | 340 (3)| 00:00:05 |
| 4 | NESTED LOOPS | | 16 | 5536 | 316 (3)| 00:00:04 |
|* 5 | HASH JOIN OUTER | | 16 | 5168 | 308 (3)| 00:00:04 |
|* 6 | HASH JOIN | | 16 | 4992 | 302 (3)| 00:00:04 |
|* 7 | HASH JOIN | | 16 | 4752 | 298 (3)| 00:00:04 |
| 8 | NESTED LOOPS | | 17 | 4828 | 44 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 17 | 3451 | 35 (0)| 00:00:01 |
| 10 | NESTED LOOPS OUTER | | 1 | 91 | 2 (0)| 00:00:01 |
| 11 | TABLE ACCESS BY INDEX ROWID| SITEMASTER | 1 | 74 | 1 (0)| 00:00:01 |
|* 12 | INDEX UNIQUE SCAN | PK_SITEMASTER | 1 | | 1 (0)| 00:00:01 |
| 13 | TABLE ACCESS BY INDEX ROWID| INVGROUPS | 1735 | 29495 | 1 (0)| 00:00:01 |
|* 14 | INDEX UNIQUE SCAN | PK_INVGROUPS | 1 | | 1 (0)| 00:00:01 |
|* 15 | TABLE ACCESS BY INDEX ROWID | INVOICEHEAD | 17 | 1904 | 33 (0)| 00:00:01 |
|* 16 | INDEX RANGE SCAN | IDX_INVOICEHEADSITEIID | 271 | | 1 (0)| 00:00:01 |
| 17 | TABLE ACCESS BY INDEX ROWID | CUSTOMER | 1 | 81 | 1 (0)| 00:00:01 |
|* 18 | INDEX UNIQUE SCAN | PK_CUSTOMER | 1 | | 1 (0)| 00:00:01 |
| 19 | VIEW | | 35844 | 455K| 254 (3)| 00:00:04 |
| 20 | HASH GROUP BY | | 35844 | 455K| 254 (3)| 00:00:04 |
| 21 | TABLE ACCESS FULL | CONTACT | 56100 | 712K| 250 (1)| 00:00:03 |
| 22 | VIEW | index$_join$_009 | 7 | 105 | 3 (0)| 00:00:01 |
|* 23 | HASH JOIN | | | | | |
| 24 | INDEX FAST FULL SCAN | IDX_PAYMENTTERMSID | 7 | 105 | 1 (0)| 00:00:01
| 25 | INDEX FAST FULL SCAN | PK_PAYMENTTERMS | 7 | 105 | 1 (0)| 00:00:01
| 26 | VIEW | index$_join$_011 | 1428 | 15708 | 6 (0)| 00:00:01 |
|* 27 | HASH JOIN | | | | | |
| 28 | INDEX FAST FULL SCAN | PK_EMPLOYEE | 1428 | 15708 | 3 (0)| 00:00:01 |
| 29 | INDEX FAST FULL SCAN | IDX_EMPLOYEEEMPLOYEEID | 1428 | 15708 | 3 (0)| 00:00:01
| 30 | TABLE ACCESS BY INDEX ROWID | CONTACT | 1 | 23 | 1 (0)| 00:00:
|* 31 | INDEX UNIQUE SCAN | PK_CONTACT | 1 | | 1 (0)| 00:00:01 |
|* 32 | INDEX RANGE SCAN | PK_ADDRESS | 1 | | 1 (0)| 00:00:01 |
Predicate Information (identified by operation id):
5 - access("A"."CREATEDBY"="J"."EMPIID"(+))
6 - access("A"."TERMSIID"="H"."PAYMENTTERMSIID")
7 - access("D"."CUSTOMERIID"="F"."CUSTOMERIID")
12 - access("B"."SITEIID"=300964)
14 - access("B"."PARENTIID"="I"."GROUPIID"(+))
15 - filter("A"."TYPE"=4 AND "A"."INVOICEID" LIKE '%')
16 - access("A"."SITEIID"=300964)
18 - access("A"."BILLINGCUSTOMERIID"="D"."CUSTOMERIID")
23 - access(ROWID=ROWID)
27 - access(ROWID=ROWID)
31 - access("F"."CONTACTIID"="G"."CONTACTIID")
32 - access("E"."ADDRESSIID"=NVL("D"."BILLINGADDRESSIID","D"."ADDRESSIID"))
Statistics
107 recursive calls
0 db block gets
2819 consistent gets
0 physical reads
0 redo size
6586 bytes sent via SQL*Net to client
356 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
33 rows processed
SQL> ed
Wrote file afiedt.buf
1* select * from masterbillingInvoiceview Where SiteIID =300964 and InvoiceID like '%%%' order by Invoice asc
SQL> /
33 rows selected.
Elapsed: 00:06:15.23
Execution Plan
Plan hash value: 1828716447
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 964 | 295 (3)| 00:00:04 |
|* 1 | FILTER | | | | | |
| 2 | SORT GROUP BY | | 2 | 964 | 295 (3)| 00:00:04 |
| 3 | MERGE JOIN CARTESIAN | | 72315 | 33M| 291 (1)| 00:00:04 |
| 4 | TABLE ACCESS BY INDEX ROWID | ADDRESS | 1 | 52 | 2 (0)| 00:00:01 |
| 5 | NESTED LOOPS | | 1 | 447 | 41 (0)| 00:00:01 |
| 6 | NESTED LOOPS | | 1 | 395 | 40 (0)| 00:00:01 |
| 7 | NESTED LOOPS | | 1 | 382 | 38 (0)| 00:00:01 |
| 8 | NESTED LOOPS OUTER | | 1 | 289 | 37 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 1 | 266 | 36 (0)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 239 | 35 (0)| 00:00:01 |
| 11 | NESTED LOOPS OUTER | | 1 | 115 | 2 (0)| 00:00:01 |
| 12 | TABLE ACCESS BY INDEX ROWID| SITEMASTER | 1 | 86 | 1 (0)| 00:00:01 |
|* 13 | INDEX UNIQUE SCAN | PK_SITEMASTER | 1 | | 1 (0)| 00:00:01 |
| 14 | TABLE ACCESS BY INDEX ROWID| INVGROUPS | 1735 | 50315 | 1 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | PK_INVGROUPS | 1 | | 1 (0)| 00:00:01 |
|* 16 | TABLE ACCESS BY INDEX ROWID | INVOICEHEAD | 1 | 124 | 33 (0)| 00:00:01 |
|* 17 | INDEX RANGE SCAN | IDX_INVOICEHEADSITEIID | 271 | | 1 (0)| 00:00:01 |
| 18 | TABLE ACCESS BY INDEX ROWID | PAYMENTTERMS | 1 | 27 | 1 (0)| 00:00:01 |
|* 19 | INDEX UNIQUE SCAN | PK_PAYMENTTERMS | 1 | | 1 (0)| 00:00:01 |
| 20 | TABLE ACCESS BY INDEX ROWID | EMPLOYEE | 1 | 23 | 1 (0)| 00:00:01 |
|* 21 | INDEX UNIQUE SCAN | PK_EMPLOYEE | 1 | | 1 (0)| 00:00:01 |
| 22 | TABLE ACCESS BY INDEX ROWID | CUSTOMER | 1 | 93 | 1 (0)| 00:00:01 |
|* 23 | INDEX UNIQUE SCAN | PK_CUSTOMER | 1 | | 1 (0)| 00:00:01 |
| 24 | TABLE ACCESS BY INDEX ROWID | CONTACT | 1 | 13 | 2 (0)| 00:00:01 |
|* 25 | INDEX RANGE SCAN | IDX_CONTACTCUSTOMERIID | 2 | | 1 (0)| 00:00:01 |
|* 26 | INDEX RANGE SCAN | PK_ADDRESS | 1 | | 1 (0)| 00:00:01 |
| 27 | BUFFER SORT | | 56100 | 1917K| 294 (3)| 00:00:04 |
| 28 | TABLE ACCESS FULL | CONTACT | 56100 | 1917K| 250 (1)| 00:00:03 |
Predicate Information (identified by operation id):
1 - filter("G"."CONTACTIID"=MAX("CONTACTIID"))
13 - access("B"."SITEIID"=300964)
15 - access("B"."PARENTIID"="I"."GROUPIID"(+))
16 - filter("A"."TYPE"=4 AND "A"."INVOICEID" LIKE '%%%')
17 - access("A"."SITEIID"=300964)
19 - access("A"."TERMSIID"="H"."PAYMENTTERMSIID")
21 - access("A"."CREATEDBY"="J"."EMPIID"(+))
23 - access("A"."BILLINGCUSTOMERIID"="D"."CUSTOMERIID")
25 - access("D"."CUSTOMERIID"="CUSTOMERIID")
filter("CUSTOMERIID" IS NOT NULL)
26 - access("E"."ADDRESSIID"=NVL("D"."BILLINGADDRESSIID","D"."ADDRESSIID"))
Statistics
1952 recursive calls
78 db block gets
4649 consistent gets
236151 physical reads
0 redo size
6586 bytes sent via SQL*Net to client
356 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
1 sorts (disk)
33 rows processed
this is the execution plan of my one query with a small difference, bt there is large diffference in physical reads..
can anyone help me out of this
thanks
ajuHi,
Can you please format your explain plan using
{ code } --without space
Explain plan
{ code } -- without any space
What is your DB version?
There are differences in access and filter criteria...
-- FRIST QUERY
5 - access("A"."CREATEDBY"="J"."EMPIID"(+))
6 - access("A"."TERMSIID"="H"."PAYMENTTERMSIID")
7 - access("D"."CUSTOMERIID"="F"."CUSTOMERIID")
12 - access("B"."SITEIID"=300964)
14 - access("B"."PARENTIID"="I"."GROUPIID"(+))
15 - filter("A"."TYPE"=4 AND "A"."INVOICEID" LIKE '%')
16 - access("A"."SITEIID"=300964)
18 - access("A"."BILLINGCUSTOMERIID"="D"."CUSTOMERIID")
23 - access(ROWID=ROWID)
27 - access(ROWID=ROWID)
31 - access("F"."CONTACTIID"="G"."CONTACTIID")
32 - access("E"."ADDRESSIID"=NVL("D"."BILLINGADDRESSIID","D"."ADDRESSIID"))
------SECOND QUERY
1 - filter("G"."CONTACTIID"=MAX("CONTACTIID"))
13 - access("B"."SITEIID"=300964)
15 - access("B"."PARENTIID"="I"."GROUPIID"(+))
16 - filter("A"."TYPE"=4 AND "A"."INVOICEID" LIKE '%%%')
17 - access("A"."SITEIID"=300964)
19 - access("A"."TERMSIID"="H"."PAYMENTTERMSIID")
21 - access("A"."CREATEDBY"="J"."EMPIID"(+))
23 - access("A"."BILLINGCUSTOMERIID"="D"."CUSTOMERIID")
25 - access("D"."CUSTOMERIID"="CUSTOMERIID")
filter("CUSTOMERIID" IS NOT NULL)
26 - access("E"."ADDRESSIID"=NVL("D"."BILLINGADDRESSIID","D"."ADDRESSIID"))-Avinash -
No of physical reads of buffers from disk on PROD and Clone has huge differ
Please help !
I am having a problem interpreting a tkprof report.
I am executing the same statement below in PROD and Clone of PROD.
What I do not understand why the tkprof report shows huge difference in disk reads for same executions from PROD and Clone of PROD. I.e. first execution disk reads = 757187 , second = 6.
I expected to see Similar disk reads in the second execution also.The data it fetches is same in both the Instances.
Statment
SELECT NVL(SUM(RG_OTH.DEBIT),0),NVL(SUM(RG_OTH.CREDIT),0)
FROM
JA_IN_PLA PLA,JAI_RG_OTHERS RG_OTH,HR_ALL_ORGANIZATION_UNITS HOU,
HR_LOCATIONS LOC,JA_IN_HR_ORGANIZATION_UNITS HR_ORG WHERE 1 = 1 AND
PLA.ORGANIZATION_ID = :b1 AND TRUNC(PLA.CREATION_DATE) >= :b2 AND
TRUNC(PLA.CREATION_DATE) <= :b3 AND HOU.ORGANIZATION_ID =
PLA.ORGANIZATION_ID AND LOC.LOCATION_ID = PLA.LOCATION_ID AND
HR_ORG.ORGANIZATION_ID = PLA.ORGANIZATION_ID AND HR_ORG.LOCATION_ID =
PLA.LOCATION_ID AND TRANSACTION_ID = 19 AND INVENTORY_ITEM_ID != 0 AND
NVL(ROUNDING_ID,1) != -1 AND RG_OTH.SOURCE_REGISTER_ID = PLA.REGISTER_ID
AND RG_OTH.SOURCE_REGISTER = 'PLA' AND RG_OTH.TAX_TYPE IN (
'EXCISE_EDUCATION_CESS' )
Tkproff from PROD.
call count cpu elapsed disk query current rows
Parse 1 0.01 0.01 0 0 0 0
Execute 1 0.04 0.03 0 0 0 0
Fetch 1 973.41 1724.95 757187 789442 0 1
total 3 973.46 1725.01 757187 789442 0 1
Tkproff from CLONE of PROD.
call count cpu elapsed disk query current rows
Parse 1 0.06 0.05 1 789 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.73 0.72 6 30594 0 1
total 3 0.79 0.78 7 31383 0 1wins wrote:
SELECT NVL(SUM(RG_OTH.DEBIT),0),NVL(SUM(RG_OTH.CREDIT),0)
FROM
JA_IN_PLA PLA,JAI_RG_OTHERS RG_OTH,HR_ALL_ORGANIZATION_UNITS HOU,
HR_LOCATIONS LOC,JA_IN_HR_ORGANIZATION_UNITS HR_ORG WHERE 1 = 1 AND
PLA.ORGANIZATION_ID = :b1 AND TRUNC(PLA.CREATION_DATE) >= :b2 AND
TRUNC(PLA.CREATION_DATE) <= :b3 AND HOU.ORGANIZATION_ID =
PLA.ORGANIZATION_ID AND LOC.LOCATION_ID = PLA.LOCATION_ID AND
HR_ORG.ORGANIZATION_ID = PLA.ORGANIZATION_ID AND HR_ORG.LOCATION_ID =
PLA.LOCATION_ID AND TRANSACTION_ID = 19 AND INVENTORY_ITEM_ID != 0 AND
NVL(ROUNDING_ID,1) != -1 AND RG_OTH.SOURCE_REGISTER_ID = PLA.REGISTER_ID
AND RG_OTH.SOURCE_REGISTER = 'PLA' AND RG_OTH.TAX_TYPE IN (
'EXCISE_EDUCATION_CESS' )
Tkproff from PROD.
call count cpu elapsed disk query current rows
Parse 1 0.01 0.01 0 0 0 0
Execute 1 0.04 0.03 0 0 0 0
Fetch 1 973.41 1724.95 757187 789442 0 1
total 3 973.46 1725.01 757187 789442 0 1
Tkproff from CLONE of PROD.
call count cpu elapsed disk query current rows
Parse 1 0.06 0.05 1 789 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.73 0.72 6 30594 0 1
total 3 0.79 0.78 7 31383 0 1
As others have pointed out, this looks like a change in execution plan. At a guess, the PROD database is doing a tablescan somewhere (physical reads is approximately equal to logical reads is a pointer).
There are many reasons why this could happen, continuing with the guesswork - we note that the statement was re-optimised (hard parsed) in the clone, but used an existing cursor in production (logical I/O = 0 in prod, 789 in clone). So the plan you got in the clone was the one that Oracle thought best for the inputs you had supplied. The plan in prod could have been produced as the response to a completely different set of input; since you have two bind variables applied to a range based predicated and one bind variable with equality it's possible that you have a histogram that makes a difference on the equality column, alternatively the range of dates used to generate the original plan was very different from the range used in the test.
Regards
Jonathan Lewis
http://jonathanlewis.wordpress.com
Author: <b><em>Oracle Core</em></b>
Maybe you are looking for
-
Storage location missing in purchase order
Hi all, I'm struggling to find why the storage location is not copied from purchase requisition to purchase order using ME21n. Further this happens only for one buyer, the same PR's if converted in PO by other buyers, move correctly storage locations
-
Can't find file for Trojan Horse on my MacBook
Anyone seen this before? I have the Norton Antivirus Program installed on my MacBook. I believe an attack occurred while I was looking through the Apple Support Forums for help with a QuickTime problem and accidentally clicked on the following link:
-
Where do I find my Adobe Presenter serial number?
Hello, I am brand new to Presenter 7, using it with MS Office 2010 (adobe just added support for Office 2010, hurray!). When I attempt to install, it prompts me to enter the serial number, however, I cannot find it. The only serial number on the soft
-
CS4 and CS5 Plugin Issue!
Having a major problem with Chameleon and CS4 and CS5. When I run the program out of CS4 or CS5: 1) The Grab Fragment seems to work. 2) When I open another photo and run Chameleon , Make Collage, I get 1. Unhandled exception! Crash dump saved to c:\u
-
Session details if we know the sql name.
Hi, Suppose there is sql named xyz.sql runinng for long time in database, and not consuming high CPU. Is there any way to get SID/Process id, if we know sql name? from v$session or joining any other tables? Regards, Sunil.