Home » RDBMS Server » Performance Tuning » query tunning (oracle10g)
query tunning [message #685968] |
Wed, 11 May 2022 06:53  |
 |
arun888
Messages: 100 Registered: June 2015 Location: INDIA
|
Senior Member |
|
|
Currently, i am currently the table and re-loading the data since the below query is running for long time.
can you suggest some ideas to tune the query and run faster.
whenever sqlerror exit -1
set ver off
set term off
set feed on
set head off
set pause off
set pages 0
set trimspool on
set echo on
set lines 500
set serveroutput on
spool &1
DEFINE CTRY='SP';
DEFINE OWNER='&&CTRY._DICT1'; -- NOTE THERE IS NO PREFIX FOR US
DEFINE CTRYCODE=223939;
DEFINE LANGCODE=4;
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT BEFORE UPDATE', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
/* DELETE ANY OLD COMPANIES WHERE THE ID NO LONGER EXISTS IN THE INDIA */
DELETE FROM &&OWNER..&&CTRY._COMP_TBL
WHERE COMP_ID NOT IN
(SELECT C.COMP_ID
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.)
/
/* NOW DELETE ANY ROWS WHERE THE NAME OR THE LAST_WEEK HAVE CHANGED */
DELETE FROM &&OWNER..&&CTRY._COMP_TBL
WHERE COMP_ID IN
(SELECT INDIA.COMP_ID
FROM &&OWNER..&&CTRY._COMP_TBL &&CTRY.,
(SELECT C.COMP_ID, C.COMP_NAME, C.FIRST_WEEK, C.LAST_WEEK
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.) INDIA
WHERE INDIA.COMP_ID=&&CTRY..COMP_ID
AND (&&CTRY..COMP_NAME!=INDIA.COMP_NAME OR &&CTRY..LAST_WEEK!=INDIA.LAST_WEEK))
/
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT AFTER DELETE', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
/* (RE-)INSERT ANY NEW OR CHANGED COMP_IDS TO THE &&CTRY. TABLE */
INSERT INTO &&OWNER..&&CTRY._COMP_TBL(COMP_ID, COMP_NAME, FIRST_WEEK, LAST_WEEK)
(SELECT C.COMP_ID, C.COMP_NAME, C.FIRST_WEEK, C.LAST_WEEK
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.
AND NOT EXISTS (SELECT COMP_ID FROM &&OWNER..&&CTRY._COMP_TBL WHERE COMP_ID=C.COMP_ID))
/
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT AFTER INSERT', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
commit;
select '&&OWNER..&&CTRY._COMP_TBL sync completed on '||REPLACE(TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS'),' ',' at ') from dual
/
spool off
exit
|
|
|
query tunning [message #685969 is a reply to message #685968] |
Wed, 11 May 2022 06:53   |
 |
arun888
Messages: 100 Registered: June 2015 Location: INDIA
|
Senior Member |
|
|
Currently, i am currently the table and re-loading the data since the below query is running for long time.
can you suggest some ideas to tune the query and run faster.
whenever sqlerror exit -1
set ver off
set term off
set feed on
set head off
set pause off
set pages 0
set trimspool on
set echo on
set lines 500
set serveroutput on
spool &1
DEFINE CTRY='SP';
DEFINE OWNER='&&CTRY._DICT1'; -- NOTE THERE IS NO PREFIX FOR US
DEFINE CTRYCODE=223939;
DEFINE LANGCODE=4;
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT BEFORE UPDATE', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
/* DELETE ANY OLD COMPANIES WHERE THE ID NO LONGER EXISTS IN THE INDIA */
DELETE FROM &&OWNER..&&CTRY._COMP_TBL
WHERE COMP_ID NOT IN
(SELECT C.COMP_ID
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.)
/
/* NOW DELETE ANY ROWS WHERE THE NAME OR THE LAST_WEEK HAVE CHANGED */
DELETE FROM &&OWNER..&&CTRY._COMP_TBL
WHERE COMP_ID IN
(SELECT INDIA.COMP_ID
FROM &&OWNER..&&CTRY._COMP_TBL &&CTRY.,
(SELECT C.COMP_ID, C.COMP_NAME, C.FIRST_WEEK, C.LAST_WEEK
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.) INDIA
WHERE INDIA.COMP_ID=&&CTRY..COMP_ID
AND (&&CTRY..COMP_NAME!=INDIA.COMP_NAME OR &&CTRY..LAST_WEEK!=INDIA.LAST_WEEK))
/
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT AFTER DELETE', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
/* (RE-)INSERT ANY NEW OR CHANGED COMP_IDS TO THE &&CTRY. TABLE */
INSERT INTO &&OWNER..&&CTRY._COMP_TBL(COMP_ID, COMP_NAME, FIRST_WEEK, LAST_WEEK)
(SELECT C.COMP_ID, C.COMP_NAME, C.FIRST_WEEK, C.LAST_WEEK
FROM COMP@INDIA_DICTP C, COMP_SALE_LOCATION@INDIA_DICTP S
WHERE C.APPROVAL_CODE = 'APPRD'
AND S.COMP_ID=C.COMP_ID
AND S.SALE_LOCATION_ID=&&CTRYCODE.
AND NOT EXISTS (SELECT COMP_ID FROM &&OWNER..&&CTRY._COMP_TBL WHERE COMP_ID=C.COMP_ID))
/
INSERT INTO &&OWNER..&&CTRY._DICT_LOG_TBL(LOCAL_TBL_NAME, COUNT_DESC, COUNT_RECS)
(SELECT '&&CTRY._COMP_TBL', 'REC COUNT AFTER INSERT', COUNT(*) FROM &&OWNER..&&CTRY._COMP_TBL)
/
commit;
select '&&OWNER..&&CTRY._COMP_TBL sync completed on '||REPLACE(TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS'),' ',' at ') from dual
/
spool off
exit
|
|
|
|
|
|
|
|
|
|
|
|
Re: query tunning [message #686005 is a reply to message #685998] |
Tue, 24 May 2022 06:26  |
John Watson
Messages: 8977 Registered: January 2010 Location: Global Village
|
Senior Member |
|
|
Your query is returning 5 rows, but the optimizer is expecting 11992 rows. So possibly your object statistics are rubbish. Better gather table stats, including histograms, and see if it comes up with a better plan.
You could also run a few checks to see where it is going wrong:
How many rows are there in COMP_SALE_LOCATION_TEMP1 ? How many where "SALE_LOCATION_ID"=118444 ?
Same thing for COMP_TEMP1 and its filter.
How many when you join them on comp_id ?
And so on: break down the query, and check the figures at each stage.
|
|
|
Goto Forum:
Current Time: Sat May 31 04:12:47 CDT 2025
|