go to http://oracle.in.th

Thursday, December 3, 2009

วิธีทำ Oracle performance tuning

ขั้นตอนการทำ Oracle Performance Tuning

สำหรับการทำ Performance Tuning นั้น Oracle นำเสนอวิธีการปรับแต่งในลักษณะของ Top-down ซึ่งจะเริ่มต้นจากขั้นตอนที่กว้างมากๆ ก่อน แล้วจึงค่อยพิจารณาเฉพาะจุด ในขั้นตอนถัดๆ ไป การทำ Oracle Performance Tuning นั้นค่อนข้างซับซ้อน แม้ว่าจะมีขั้นตอนในการทำ Performance tuning ทั้วไปอยู่ แต่มันก็ไม่ได้ง่ายอย่างนั้นเสมอไป ลองมาดูขั้นตอนสำหรับการทำ Oracle Performance Tuning เพื่อให้เข้าใจกันมากขึ้น

Scope of Oracle Tuning

Top-Down tuning model

เราสามารถทำการ Tuning ได้ในหลายขั้นตอน โดยในแต่ละขั้นตอนจะพิจารณาเฉพาะส่วนตามเป้าหมายของขั้นตอนนั้นๆ
สำหรับขั้นตอนในการทำ Oracle Performance Tuning สามารถแบ่งได้เป็น 4 ขั้นตอน ดังนี้ :

1. Server & Network Tuning - ขั้นตอนนี้จะป็นขั้นตอนแรกในการ Tuning เสมอ เป็นการปรับแต่งที่ง่ายที่สุด และกระทบกับผู้ใช้งาน และผู้พัฒนาระบบ น้อยที่สุดอีกด้วย การปรับแต่งในขั้นตอนนี้ มักเกี่ยวข้องกับ Hardware เช่นการเพิ่ม RAM เป็นต้น และมันกระทำการโดย System Admin อย่างไรก็ดี การปรับแต่งในขั้นนี้ ไม่สามารถช่วยได้สำหรับ Server ที่มี environment ที่แย่อยู่แล้ว

2. Instance Tuning - ขั้นตอนต่อไปคือการ Tuning Oracle SGA เป็นขั้นตอนที่เกี่ยวข้องกับการปรับแต่งพารามิเตอร์ของฐานข้อมูล โดยอาศัยข้อมูลจากสถิติต่างๆ ที่ฐานข้อมูลได้มีการเก็บข้อมูลไว้ เป็นการทำที่ระดับ Database ซึ่งการปรับแต่งในส่วนนี้จะไม่กระทบกับนักพัฒนาระบบ และมักกระทำการโดย Database Admin โดยพารามิเตอร์ทั้งหมดจะถูกตรวจสอบเพื่อให้มั่นใจว่าฐานข้อมูลได้ถูกกำหนดค่าอย่างเหมาะสมสำหรับการใช้งานแล้ว ในบางกรณีฐานข้อมูลอาจมีการใช้งานใน 2 รูปแบบ (bi-modal workload) คือ online และ batch ดังนั้นแล้ว ค่าพารามิเตอร์ต่างๆ จะถูกปรับแต่งเพื่อให้เกิดการใช้งานที่เหมาะสมในขั้นตอนนี้

3. Object Tuning - ขั้นตอนนี้ เป็นการ Tuning โดยพิจารณาจากการตั้งค่าต่างๆ ของ Object เช่น การตั้งค่า PCTFREE, PCTUSED และ FREELISTS ใน Table และ Index สามารถส่งผลกระทบต่อประสิทธิภาพการทำงานของ Oracle ได้ด้วย การปรับแต่งในขั้นตอนนี้จะไม่กระทบกับนักพัฒนาระบบ และมักกระทำการโดย Database Admin

4. SQL Tuning - ขั้นตอนนี้เป็นขั้นตอนสุดท้ายในการทำ Tuning และเป็นขั้นตอนที่ใช้เวลามากที่สุดในการทำ Tuning อีกด้วย เนื่องจาก SQL statements ที่เข้ามาใช้งานระบบฐานข้อมูลนั้นมีจำนวนมาก ทำให้เราไม่สามารถทราบได้ว่า Statement ใดที่ต้องการการปรับแต่ง ซึ่งถ้าเรามีการปรับแต่งระบบเพื่อเพิ่มประสิทธิภาพการทำงานตามขั้นตอนที่ 2 แล้วนั้น เราก็เพียงปรับแต่ง "outlier" SQL Statement หรือก็คือ Statement ที่มีประสิทธิภาพการทำงานแย่กว่า Statement อื่นมากๆ เท่านั้นก็เพียงพอ โดยขั้นตอนนี้ จะกระทบกับนักพัฒนาระบบโดยตรง เนื่องจากเป็นการปรับแต่งรูปแบบของ Statement และมักจะกระทำโดย นักพัฒนาระบบเอง ในขั้นตอน SQL Tuning นี้ ยังมีขั้นตอนย่อยๆอยู่อีก 4 ขั้นตอนดังต่อไปนี้
  • Remove unnecessary large-table full-table scans - สำหรับ Table ที่มีขนาดใหญ่นั้น การทำ Full-Table Scan อาจเป็นสาเหตุที่ทำให้ประสิทธิภาพการทำงานของระบบลดลงได้ การเพิ่ม Index ที่จำเป็น ไม่ว่าจะเป็น B-Tree, Bitmapped หรือ Funtcion-Based index สามารถลดการเกิด Full-table scan ลงได้ และยังช่วยเพิ่มประสิทธิภาพให้กับการทำงานในระบบของเราได้อีกด้วย แต่ทั้งนี้ จะต้องพิจารณาเพิ่ม Index ให้ถูกต้องเหมาะสมกับการใช้งานนั่นเอง
  • Cache small-table full-table scans - ในส่วนนี้จะขึ้นกับขนาดของ Database Buffer Cache ซึ่งควรมีขนาดที่พอเหมาะเพื่อให้เรามั่นใจได้ว่า สามารถที่จะ Cache ข้อมูลตามจำนวน Rows ที่เรามีการเรียกใช้ได้
  • Verify optimal index usage - การใช้ Index เองก็ควรพิจารณาถึงจำนวนของ Index และความเหมาะสมในการใช้งานอีกด้วย ทั้งนี้ อาจมีบาง Index ที่ถูกสร้างขึ้นมา แต่ไม่เคยถูกเรียกใช้งานเลย และในทางกลับกัน อาจมีบาง Index ที่หายไปจากระบบ หรือไม่เคยถูกสร้างขึ้นมาเลย ทั้งที่มีความจำเป็นต่อการใช้งาน ซึ่งอาจทำให้ I/O มีการทำงานมากเกินความจำเป็น ก็เป็นได้ นอกจากนี้ การเขียน Statement เอง ก็ต้องพิจารณาถึง การเรียกใช้ Index ด้วย โดยอาจมีการใช้ Hint เพื่อบังคับให้มีการเรียกใช้ Index หรือการเรียงลำดับของ Where Cluase ให้ถูกต้อง เพื่อให้มั่นใจว่า Index จะถูกเรียกใช้อย่างแน่นอน
  • Materialize your aggregations and summaries for static tables - เป็น feature หนึ่งของฐานข้อมูล Oracle เหมาะสำหรับ Summary ข้อมูล โดย Materialize View นั้น จะทำหน้าที่ในการ Summary ข้อมูลเบื้องต้น ตามเงื่อนไขของระบบ เช่น ข้อมูลยอดขาย รายวัน รายสัปดาห์ หรือรายเดือน ขึ้นกับการนำไปใช้ หากแต่มีข้อจำกัด กล่าวคือ Materialize View นั้น ไม่เหมาะสำหรับการใช้เป็น Transaction Table เนื่องจาก ต้องอาศัยการ Refresh ข้อมูล เมื่อ Table หลักที่อ้างอิงถึงมีการเปลี่ยนแปลง แต่อย่างไรก็ดี หากพิจารณาเลือกใช้ให้เหมาะสมกับงานแล้วนั้น จะช่วยเพิ่มประสิทธิภาพให้กับระบบได้เป็นอย่างดี

นี่เป็นแค่การอธิบายในภาพกว้างๆของการทำ Oracle Performance Tuning เท่านั้น ถ้าใครอยากได้รายละเอียดในการทำ Tuning มากกว่านี้ ขอแนะนำหนังสือเล่มนี้เลย "Oracle Tuning
The Definitive Reference"


Credit by Cherry

อ้างอิง
ข้อเขียนนี้ช่วยฉัน:  

2 comments:

Tom Condo said...

ขอบคุณพี่รี่ ที่ช่วย Review ให้อีกทีนะคะ

Rice Cooker said...

เด็ดดวงมากครับ เห็นภาพ ชัดเจน
และเป็นแนวทางที่ดีของคนที่อยากจะ tuning database แต่ไม่รู้จะเริ่มยังไง นำไปต่อยอดได้

ขอบคุณ พี่ลี่มากครับ

Post a Comment