Sunday, May 4, 2014

Light Weight Monitoring System (LWM) ตอนที่ 2

โพสต์ครั้งแรก: 20 มีนาคม 2011


เราจะสร้างกราฟได้อย่างไร?
กราฟจะถูกสร้างใน MS Excel บนเครื่อง Database Server หรือ Client ก็ได้ แต่เนื่องจากเครื่องที่จะใช้แสดงกราฟจะต้องมี MS Excel ผมจึงแนะนำให้รันกราฟบนเครื่อง Client ที่เป็น WindowsXP โดยก่อนที่จะดึงข้อมูลมาแสดงได้ เราจะต้องลงโปรแกรม Oracle Client ก่อน จากนั้นก็สร้าง ODBC Data Source แล้วใช้ฟังก์ชัน Get External Data ใน MS Excel ในการดึงข้อมูลที่เราเก็บไว้ในฐานข้อมูลมาแสดง (วิธีการจะแตกต่างกันไปในแต่ละ Excel เวอร์ชั่น) จากนั้นเราก็ตั้งเวลาในการให้ Excel ดึงข้อมูลที่เราต้องการ (ซึ่งควรจะมากกว่าหรือเท่ากับช่วงห่างของแต่ละ Snapshot) เราก็จะได้เห็นข้อมูลที่อัพเดทไปเรื่อย ๆ เมื่อเวลาผ่านไป และเมื่อเราสร้างเป็นกราฟบนข้อมูลเหล่านี้ เราก็จะเห็นกราฟไหลเลื่อนไปเรื่อย ๆ ตามข้อมูลที่เปลี่ยนแปลงไปตามกาลเวลา

ทำไมจึงเรียกว่า Light Weight มันเบาจริงหรือ?
ข้อมูลที่ผมทำ Snapshot เป็นการดึงมาจาก Dynamic Performance View ชื่อ V$SESSION เพียงตารางเดียวเท่านั้นโดยผมใช้คำสั่ง
select sysdate, count(*), max(last_call_et)
from v$session
where username is not null
and status = ''ACTIVE'

ซึ่งปกติแล้ว Dynamic Performance View เป็นวิวที่เราใช้ในการตรวจสอบ Real Time Performance ของระบบฐานข้อมูล Oracle อยู่แล้ว โดยการคิวรีวิวนี้จะใช้ทรัพยากรระบบน้อยมาก
Dynamic Performance View จะมีชื่อขึ้นต้นด้วย V$ ซึ่งจริง ๆ แล้วเป็น Synonym ที่ชี้ไปที่วิว V_$ ซึ่งเขียนขึ้นเพื่อไปดึงข้อมูลจากวิว X$ อีกที โดย X$ เป็นวิวในระดับ Low Level มาก ๆ ที่แสดงถึงโครงสร้างภายในของระบบฐานข้อมูล Oracle, X$ไม่ใช่ตาราง แต่เป็นโครงสร้างข้อมูลที่เป็นภาษา C และจัดการโดย Oracle Kernel (ดูเพิ่มเติม The architecture of the Dynamic Performance Views, http://www.dba-oracle.com/concepts/v$_dynamic_performance_views.htm)

V$SESSION เป็นข้อมูลของผู้ที่เชื่อมต่อกับระบบฐานข้อมูลอยู่ ณ ขณะนั้น ๆ ข้อมูลที่เราต้องการจาก V$SESSION คือจำนวนของผู้เชื่อมต่อที่ทำงาน “ACTIVE” กับฐานข้อมูลอยู่ นอกจากนั้นเราก็ต้องการข้อมูลว่า ณ ขณะนั้นผู้ที่เชื่อมต่อที่มีสถานะเป็น ACTIVE นั้นได้ ACTIVE มาเป็นเวลานานเท่าใดแล้ว (LAST_CALL_ET) โดยเราต้องการเฉพาะเวลา LAST_CALL_ET ที่สูงที่สุด ณ ขณะนั้นเท่านั้น นอกจากนั้นผมได้เพิ่มข้อมูลวันที่และเวลาเข้าไปในคิวรีด้วยเพื่อให้ทราบเวลาที่เราเก็บข้อมูล ข้อมูลเหล่านี้จะถูกเก็บเข้าตารางชื่อ SESS_MON ทุก ๆ ช่วงเวลาที่เราตั้งไว้ โดยใช้ Package ของ Oracle ที่ชื่อว่า DBMS_JOB ซึ่งตาราง SESS_MON เป็นตารางที่ไม่เก็บข้อมูลใน Redo Log (NOLOGGING) ซึ่งจะทำให้การทำงานกินทรัพยากรน้อยลง
ทุก ๆ หลังเที่ยงคืน ข้อมูลของเมื่อวานจะถูกย้ายไปเข้าตาราง History (SESS_HIST) เพื่อให้ข้อมูลที่ใช้ในการคิวรีจากตาราง SESS_MON ตอนกลางวันมีปริมาณน้อยที่สุด ผมไม่ได้สร้างอินเด็กซ์บน SESS_MON เพื่อลดการใช้ทรัพยากรระบบในขณะเก็บข้อมูล (ผมตั้งสมมติฐานว่าการทำ Full Table Scan บน SESS_MON ไม่ได้กระทบกับการทำงานของระบบเท่าไรนัก) จากนั้นข้อมูล Baseline จะถูกคำนวณโดยใช้ข้อมูลจากตาราง SESS_HIST เป็นเวลา 30 วันย้อนหลังนับจากวันที่ล่าสุดที่เก็บเข้าไป ข้อมูลที่คำนวณได้จะถูกเก็บแทนที่ข้อมูลเก่าในตาราง SESS_AVG เพื่อใช้เป็น Baseline ต่อไป กระบวนการทั้งหมดนี้จะถูกทำโดยอัตโนมัติโดย DBMS_JOB สิ่งที่ผู้ดูแลระบบจะต้องทำคือการคอยลบข้อมูลออกจาก SESS_HIST เมื่อต้องการพื้นที่คืนเท่านั้น และเนื่องจาก SESS_HIST ไม่ได้ใช้ในข้อมูลที่แสดงกราฟ จำนวนข้อมูลใน SESS_HIST จึงไม่มีผลกระทบต่อการคิวรีข้อมูลเพื่อแสดงกราฟในตอนกลางวัน
ข้อมูลที่ถูกดึงขึ้นบน Excel เป็นวิว Cartesian ที่เกิดจากการ Join ข้อมูลจากตาราง SESS_MON และ SESS_AVG (ตาราง Baseline มีเรคคอร์ดเดียว) วิวดังกล่าวจะดึงเฉพาะข้อมุลเพียง 60 นาทีย้อนหลัง การตั้งเวลาในการดึงข้อมูลจากวิวบน Excel ก็จะได้ข้อมูลใหม่ที่นับจากนาทีปัจจุบันย้อนหลังไป 60 นาทีทุกครั้ง
ผมทำการทดสอบบนระบบฐานข้อมูล Oracle9i บน Windows XP โดยก่อนติดตั้งระบบ LWM ผมตรวจสอบการใช้ CPU และ Memory และบันทึกผลที่ได้ จากนั้นจึงติดตั้งระบบให้ทำงานโดยกำหนดช่วง Snapshot ที่ 1 นาที และเปิดไฟล์ Excel ที่ได้ติดตั้งระบบกราฟแสดงผลที่จะ Refresh ข้อมูลทุก ๆ 1 นาทีไว้ โดยได้ผลการทดสอบดังตารางข้างล่าง โดยจากผลการทดสอบพบว่าก่อนและหลังการติดตั้งระบบและรัน MS Excel มีการใช้หน่วยความจำเพิ่มขึ้นประมาณ 1.2 MB ดังแสดงในตารางที่1, รูปที่1 และรูปที่ 2
หัวข้อทดสอบ
CPU Usage*
Memory Usage
ก่อนการติดตั้ง LWM และรัน Excel
00
233,588 K
หลังการติดตั้ง LWM (Snapshot ทุก 1 นาที)
และรัน Excel (Refresh ทุก 1 นาที)
00
234,784 K
ตารางที่1 เปรียบเทียบการใช้ทรัพยากรก่อนและหลังติดตั้ง LWM
*CPU Usage มีค่าเท่ากับ 00 ไม่ได้หมายถึงไม่ได้ใช้ CPU เลยแต่ปริมาณการใช้ CPU อาจจะน้อยมาก
lwm task mgr1
รูปที่1 แสดงการใช้ CPU และ Memory ก่อนการติดตั้ง LWM
lwm task mgr2
รูปที่2 หลังการติดตั้ง LWM (Snapshot ทุก 1 นาที) และรัน Excel (Refresh ทุก 1 นาที)

การจัดการเรื่องสิทธิ์และความปลอดภัยของระบบ ฯ
เราจะสร้าง Schema ใหม่ขึ้นมาเพื่อทำการเก็บข้อมูลและองค์ประกอบต่าง ๆ ของระบบ การติดตั้งระบบจะต้องทำโดย User ที่มีสิทธิ์เป็น DBA เท่านั้น ผมไม่ใช้วิธีการ Grant สิทธิ์ต่าง ๆ ให้กับ User ที่สร้างขึ้นใหม่เนื่องจากไม่ต้องการให้ User ที่จะ Connect เข้ามาทาง ODBC ซึ่งอาจจะเป็น System Operator มีสิทธิ์อื่น ๆ นอกเหนือจากสิทธิ์ที่ให้ใน Schema ที่สร้างขึ้นใหม่ โดย Schema หรือ User ที่สร้างขึ้นใหม่นี้จะมีสิทธิ์ เฉพาะการ Connect และดูหรือจัดการข้อมูลเฉพาะที่อยู่ใน Schema ของตนเท่านั้น ซึ่ง User นี้จะใช้ใน ODBC Data Source เพื่อที่จะดึงข้อมูลมาแสดงใน Excel เท่านั้น, User นี้จึงไม่สิทธิ์ในการไปใช้ (เรียกดูหรือแก้ไข) ข้อมูลใน Schema อื่น ๆ


ขอบคุณที่ให้ความสนใจ โปรดติดตามต่อตอนหน้านะครับ

No comments:

Post a Comment