Library Cache Lock ระหว่าง Grant/Revoke จริงรึ!?

สวัสดีครับห่างหายกันไปนานเลย ไม่ได้หายไปไหนไกลครับ ช่วงที่ผ่านมาก็ไปนั่งสร้างโปรแกรมๆ นึงขึ้นมาเพื่อใช้ทำ Performance tuning ในองค์กรครับ พอดีวันก่อนบังเอิ๊ญบังเอิญมีรีเควสเข้ามาจากลูกค้าว่า อยากได้ Privileges บนฐานข้อมูล แต่มันติดปัญหาตรงที่ว่า ทุกๆ ครั้งที่เราจะทำการ Grant/Revoke privilege นั้นมันจะไปมีผลกระทบต่อ Performance ของระบบทางอ้อมๆ ผมจึงบอกลุกค้าไปว่า “พี่ครับ เดียวผมทำให้ตอนเย็นหลังเลิกงานนะ…” หลายคนคงงงว่า “อ้าว แค่ขอสิทธิธรรมดาเองนะ ทำไมต้องทำตอนเย็นด้วยละ” ผมเฉลยให้ก็ได้ครับ… ไอตัวปัญหาก็คือ Library cache lock นั่นเอง

Library Cache Lock คือ?

Library cache lock เป็น waited event ตัวนึงบนฐานข้อมูล Oracle ที่เป็นตัวควบคุมการทำงานระหว่างโปรเซสที่เข้ามาใช้งานบาง object บน Library cache โดยเมื่อโปรเซสใดโปรเซสนึงทำการ lock object ใดๆ ไว้ นั่นหมายถึงจะไม่มีโปรเซสอื่นสามารถเข้ามาใช้งาน object นั้นๆ ได้ ซึ่งเช่นกันครับมันจะเกิดเฉพาะบน Library cache โดยเจ้า waited event ตัวนี้จะเกิดขึ้นในขณะที่มีการ Parse หรือ Compile PL/SQL statements ที่มีการใช้งาน (table, view, procedure, function, package, package body, trigger, index, cluster, synonym) และก็จะหายไปเมื่อทำงานเสร็จนั่นเองครับ

ยกตัวอย่างเช่น เมื่อมีผู้ใช้ 2 คนกำลังทำการ compile PL/SQL ตัวเดียวกันหรือ ผู้ใช้คนนึงกำลังทำการ recreate index ตัวใดๆ อยู่ แล้วมีผู้ใช้อีกคนนึงกำลังคิวรี่ข้อมูลซึ่งใช้ index ตัวนั้นๆ อยู่ และในกรณีที่ผมกำลังจะยกตัวอย่างนั่นคือการ Grant/Revoke privilege บน object ที่มีการถูกเรียกใช้งานใน Store procedure ตลอดเวลาในช่วงเวลาทำงานครับ ซึ่งในขณะที่ DBA กำลัง grant/revoke อยู่นั้น Oracle จะทำการ acquire lock บน object นั้นๆ ไว้เพื่อไม่ให้ session อื่นๆ เข้ามาแก้ไขหรือใช้งานได้ ซึ่งนั่นก็คือ Library cache lock นั่นเองครับ นั่นคือปัญหาแรกครับ

Slide1

และอย่างที่เราทราบกันว่า เมื่อเราทำการ Alter/Grant/Revoke บน object ใดๆ นั้น จะเกิดการเปลี่ยนแปลงที่คอลัมน์ LAST_DDL_TIME บน USER_OBJECTS ครับ ซึ่งนั่นจะไปทำให้เกิด object invalidation ขึ้น ทำให้ทุกๆ PL/SQL ที่เคยทำการ parse ขึ้นไปอยู่บน Library cache จะต้องทำการ reparsing ใหม่อีกครั้งนึง นั่นจะทำให้เกิดปัญหาที่ตามมาซึ่งจะกระทบกับงาน Online บนระบบได้ครับ

สรุป

การทำ DDL/DCL เช่น Alter/Grant/Revoke บน Object ที่มีการเรียกใช้งานบน PL/SQL ในเวลาที่มีการทำงานเยอะๆ อาจจะทำให้กระทบต่อ Performance โดยรวมของระบบได้ครับ ต้องระวังไว้ให้ดีนะทุกคน

ขอบคุณข้อมูลจาก http://appcrawler.com/wordpress/2009/10/12/library-cache-lock-during-grantrevoke/

 

Advertisements

2 thoughts on “Library Cache Lock ระหว่าง Grant/Revoke จริงรึ!?

  1. อย่างหล่อเลยครับ : )

ใส่ความเห็น

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 / เปลี่ยนแปลง )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s