Oracle DBA & All IT » New Feature, Oracle Tips, Tuning Performance » การสร้าง Outline บังคับให้ statement ใช้ index ตามที่เราต้องการ
การสร้าง Outline บังคับให้ statement ใช้ index ตามที่เราต้องการ
บ่อยๆ ที่เราจะพบว่า statement ช้าก่อน พอ Plan table ดูกลับพบว่า ใช้ index ไม่ถูกตัวแต่ไม่อยากที่จะแก้โปรแกรมโดยการใส่ hint ตอนนี้เราสามารถที่จะใช้ outline มาแก้ปัญหานี้ได้โดยสร้าง outline
outline คืออะไร คือเป็นตัวบอกว่า statment นี้ถ้าเข้ามาให้ไปใช้ plan ตามที่เราเตรียมไว้นั่นเอง
สร้าง outline เพื่อให้เวลาที่โปรแกรมรันด้วย statement original ไปใช้ plan เหมือนกับที่เรา force index ค่ะ
Replace ชื่อตามที่ highlight สีชมพูค่ะ แก้ statement ตามตัวสีแดง นอกนั้นไม่ต้องแก้อะไรค่ะ เมื่อลอง plan ดูจะเห็นว่า statement นั้น plan เปลี่ยนไปแล้วค่ะ
/*สำหรับ statement original*/
CREATE OR REPLACE OUTLINE TEST1 ON
SELECT MAX (a.event_dtm)
FROM costedevent a
WHERE a.account_num = :b1
/
/*สำหรับ statement ที่ force index*/
create or replace outline TEST1HINTSQL on
SELECT /*+ index_ss(a,costedevent_pk) */ MAX (a.event_dtm)
FROM costedevent a
WHERE a.account_num = :b1
/
/* สำหรับ Update plan ที่ hint ให้เป็น plan ของ original statement*/
UPDATE OUTLN.OL$HINTS
SET OL_NAME=DECODE(OL_NAME,'TEST1HINTSQL','TEST1','TEST1','TEST1HINTSQL')
WHERE OL_NAME IN ('TEST1','TEST1HINTSQL');
COMMIT;
/* สำหรับ Drop outline TEST1HINTSQL ทิ้งไป เพราะเรามีการ Update Plan เป็น TEST1 เรียบร้อย*/
drop outline TEST1HINTSQL;
/* สำหรับ นำ outline TEST1 ไปอยู่ใน Category ชื่อ CAT_1*/
alter outline TEST1change category to CAT_1;
/* Parameter ที่ต้อง Set ถ้าต้องการให้ระบบใช้ Outline ที่เราสร้าง*/
ALTER system SET USE_STORED_OUTLINES = TRUE;
alter system set use_stored_outlines=CAT_1;
Tips!
เมื่อมีการ restart DB ค่าที่เรา set USE_STORED_OUTLINES,use_stored_outlines ไว้จะหายต้องทำการ Alter ใหม่ แต่เรามีวิธีให้มันทำทุกครั้งที่ Restart DB ได้ โดยการไปผูก Trigger ไว้ตอนที่ Startup DB โดยสร้างด้วย user SYS
CREATE OR REPLACE TRIGGER enable_outlines_trig
after startup on database
begin
execute immediate('alter system set use_stored_outlines=true');
execute immediate('alter system set use_stored_outlines=CAT_1');
end;
/
ลองไปทำกันดูนะคะ ^^
.. Preview : 30427Related Search:
- outline คือ
- การเขียน outline
- การเขียนoutline
- ตัวอย่างการเขียน outline
- outline คืออะไร
Filed under: New Feature, Oracle Tips, Tuning Performance · Tags: force index, OL$HINTS, outline, outln, plan table, tune plan, tuning preformance
-
Elvina
-
Sacha
-
Doretha
-
Klondike
-
Makaila
-
-
Numz
-
Klick
-
car repos
-
Boss
-
Raynoch
-
-
chengalpattu real estate rate
-
Maisyn
-
Pokey
-
-
http://chennaibroadbandplans.blogspot.com
-
Carlynda
-
-
car repos
-
Chyna
-
Jetsyn
-
-
Florence
-
Kaeden