ช้านักก็ปักหมุด ตอนที่ 1: dbms_shared_pool.keep

สำหรับตอนนี้ผมให้ชื่อว่า “ช้านักก็ปักหมุด” คำว่าปักหมุดในที่นี้ผมหมายถึง Pin ซึ่งผมจะแบ่งเป็น 2 ตอน ตือเรื่องราวเกี่ยวกับ dbms_shared_pool.keep ซึ่งเป็นการกำหนดให้ pin package ใดๆ ไว้บน Shared pool ซึ่งช่วยทำให้ประสิทธิภาพของฐานข้อมูลดีขึ้น และอีกส่วนหนึ่งก็คือ db_keep_cache_size พารามิเตอร์ที่ใช้กำหนดพื้นที่เก็บข้อมูล (Table,index) ที่เราต้องการให้มันอยู่บนหน่วยความจำเสมอซึ่งคือการ Pin table หรือ Pin index ขึ้นไปอยู่บนหน่วยความจำนั่นเอง เอาละครับ! มาดูกัน…

เคล็ดลับการใช้ dbms_shared_pool.keep

การ Pin package เริ่มมีบทบาทสำคัญใน Oracle tuning และการมาพร้อมกับ System-level trigger ใน Oracle 8i ซึ่งตอนนี้ Oracle มีเครื่องมือช่วยเพื่อให้แน่ใจว่า PL/SQL ที่ถูกเรียกใช้งานบ่อยๆ นั้นจะคงอยู่บน Shared pool เสมอซึ่งหลักการของมันจะคล้ายๆ กับ KEEP pool ของ data buffer cache สำหรับการ pin package นั้นเพื่อช่วยให้ package ที่ถูก pin นั้นถูกเก็บไว้บนหน่วยความจำตลอดเวลา ด้วยสิ่งนี้เองจะเป็นการป้องกัน PL/SQL นั้นๆ ไม่ให้ถูกนำออกจากหน่วยความจำ ซึ่งนั้นหมายถึงความจำเป็นที่จะต้องทำการแปลภาษา (parse) อีกครั้งถ้าถูกเรียกใช้งาน ซึ่งเป็นหน้าที่ของ DBA ที่จะต้องควบคุมขนาดของการใช้หน่วยความจำโดยการตั้งค่า shared_pool_size ให้ใหญ่เพียงพอที่จะเก็บ PL/SQL ที่จำเป็นทั้งหมดบนหน่วยความจำได้

การ Pin package สามารถทำได้ใน 2 กรณีดังนี้
– การ Pin package ที่ถูกเรียกใช้งานบ่อยๆ ซึ่งจะช่วยให้ประสิทธิถาพบนฐานข้อมูลดีขึ้นด้วยการเก็บ Package นั้นๆ ลงบน SGA
– การ Pin standard package ของ Oracle โดย Packages เหล่านี้ควรที่จะถูก Pin ให้อยู่บนหน่วยความจำเสมอเพื่อป้องกันการแปลภาษา (reparse) บน SGA ในภายหลัง

เราสามารถ Monitor ผ่าน System view ที่ชื่อ v$db_object_cache เพื่อหา package ที่ถูกเรียกใช้งานมากที่สุดได้ดังนี้

SELECT OWNER,NAME,TYPE,EXECUTIONS,PINS
FROM V$DB_OBJECT_CACHE;

หลังจากที่เราได้ list ของ package ที่เราตัดสินใจที่จะ pin ได้แล้ว ขั้นต่อมาให้เราใช้คำสั่งดังนี้

EXECUTE DBMS_SHARED_POOL.KEEP('SCHEMA_NAME.PACKAGE_NAME');

และอย่าลืมติดตามตอนที่ 2 อาทิตย์หน้านะครับ

ขอบคุณข้อมูลเพิ่มเติมจาก dbms_shared_pool.keep Tips by Burleson

ขอบคุณรูปสุดสวยจาก hydropeek

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

w

Connecting to %s