| 
		
			| Query working very slow [message #481552] | Thu, 04 November 2010 02:55  |  
			| 
				
				
					| navneet_sharma Messages: 70
 Registered: September 2008
 Location: New Delhi, India
 | Member |  |  |  
	| dear all, I am facing problem in running following query which is running too slow.moreover its cost is too much and taking full table scan. To speed up ,i analyzed the table before running and even tried to pass index hint .This query was taking 30-45 minutes to execute earlier but now it is running for 3-4 hrs.I m not sure what is the issue.
 Please help.
 
 Regards,
 Navneet
 
 Total records in the table = 12 million.
 total resultset the query is fetching = 40K.
 
 
 SELECT /*+ index( a PREPAID_DOC_LMDATE) */ '91'||c_msisdn,SRNO,C_MSISDN,C_SIM ,CLNAME, CMIDNAME, CNAME, CFATHERLNAME, CFATHERMIDNAME,
 CFATHERNAME , CADDRESS
, CLANDMARK, C_CITY, CDISTRICT, CSTATE, C_PIN, C_NATION, CPADDRESS, C_PCITY, CPDISTRICT, CPSTATE, C_PPIN
, C_PNATION, C_PPASSPORTNUM, C_PVISANUM,NULL,'ACTIVE' ,DOCNO,C_IDPROOF_NUM
FROM prepaid_documents_new a  WHERE  last_mod_date>=sysdate- 4
and last_mod_date <=sysdate
 explain plan is as follows:-
 
 SELECT STATEMENT, GOAL = ALL_ROWS								Cost=402779	Cardinality=505079	Bytes=90914220
 FILTER					
  TABLE ACCESS BY INDEX ROWID	Object owner=PRISMUPW	Object name=PREPAID_DOCUMENTS_NEW	Cost=402779	Cardinality=505079	Bytes=90914220
   INDEX RANGE SCAN	Object owner=PRISMUPW		Object name=PREPAID_DOC_LMDATE		Cost=3629	Cardinality=505079	
 
 
 |  
	|  |  | 
	|  | 
	| 
		
			| Re: Query working very slow [message #481562 is a reply to message #481552] | Thu, 04 November 2010 04:41   |  
			| 
				
				
					| Frank Messages: 7901
 Registered: March 2000
 | Senior Member |  |  |  
	| Remove the hint. If the optimizer decides not to use the index, let it do so. IF the optimizer chooses not to use the index, it will be because
 a) it is cheaper to do a Full Table Scan
 b) your stats are out of date or missing
 
 Big question of course: what happened between the time where the query took 3/4 of an hour and the time where the query took 3-4 hours
 |  
	|  |  | 
	| 
		
			| Re: Query working very slow [message #481572 is a reply to message #481562] | Thu, 04 November 2010 05:43   |  
			| 
				
				
					| navneet_sharma Messages: 70
 Registered: September 2008
 Location: New Delhi, India
 | Member |  |  |  
	| Dear Frank, If I remove the hint the cost is little better
 but still on higher side. I have analyzed the table today only and upto date. I have checked the table size
 
 
SELECT table_name, ROUND((blocks*8),2) tablesize, ROUND((num_rows*avg_row_len/1024),2) actualsize 
FROM user_tables WHERE TABLE_NAME ='PREPAID_DOCUMENTS_NEW' ORDER BY ACTUALSIZE,TABLESIZE ASC;
 TABLE_NAME		 	   TABLESIZE  ACTUALSIZE
 PREPAID_DOCUMENTS_NEW,              4909576   4329566.74
 |  
	|  |  | 
	|  | 
	|  | 
	|  | 
	| 
		
			| Re: Query working very slow [message #481917 is a reply to message #481676] | Mon, 08 November 2010 06:01   |  
			| 
				
				
					| rleishman Messages: 3728
 Registered: October 2005
 Location: Melbourne, Australia
 | Senior Member |  |  |  
	| Judging by the SQL you ran above, you think you have 8KB blocks. This would mean you have 613697 blocks, and they are read by the Full Table Scan in (say) 30 minutes, or 1800sec. Assuming your DB_FILE_MULTIBLOCK_READ_COUNT is set to 16 (do a SHOW PARAMETER MULTIBLOCK in SQL*Plus to check), then that is 613697/16 = 38356 round trips to disk in 1800 sec, or 21 disk reads per second, or 47ms per read. 
 This is abysmally slow, and suggests some other form of contention at play. Are there many other queries hammering the disk?
 
 I would:
 - Check your DB_FILE_MULTIBLOCK_READ_COUNT. Make sure my guess of 16 is correct.
 - Check you block size. Make sure my assumption of 8KB blocks is correct.
 - Check the load on your disk. You may be overloading your system.
 - Run a 10043 trace and check the wait events - see if they are mostly DB FILE SCATTERED READ (full table scan)
 
 If your system is not overloaded and those parameters above are correct, I think it should be able to FULL SCAN 600K blocks in no more than 10 minutes. Of course this would be dependent on the speed of your disk, but even 10 minutes would mean you had VERY slow disk.
 
 Ross Leishman
 |  
	|  |  | 
	|  | 
	| 
		
			| Re: Query working very slow [message #482023 is a reply to message #482000] | Tue, 09 November 2010 02:55  |  
			| 
				
				
					| michael_bialik Messages: 621
 Registered: July 2006
 | Senior Member |  |  |  
	| Please post the results of follwing queries: 
 
 SELECT 'Total', COUNT(*)
FROM prepaid_documents_new a  
UNION ALL
SELECT 'Between', COUNT(*)
FROM prepaid_documents_new a  
WHERE  last_mod_date>= (sysdate - 4)
and last_mod_date <=sysdate
 
 SELECT TO_CHAR(MIN(last_mod_date), 'YYYYMMDDHH24MISS') MIN_DATE,
  TO_CHAR(MAX(last_mod_date), 'YYYYMMDDHH24MISS') MAX_DATE
FROM prepaid_documents_new  |  
	|  |  |