GATHER_PLAN_STATISTICS hint เครื่องมือช่วยเหลือสำหรับนัก Tuning SQL


GATHER_PLAN_STATISTICS

มันเป็นสิ่งที่เราต้องให้ความสนใจเป็นอย่างมากหลังจากที่เราทำการ Tuning SQL เพื่อเป็นการยืนยันผลลัพธ์ว่า Optimizer ทำงานได้อย่างถูกต้องหรือไม่? แต่เราจะรู้ได้ยังไงหล่ะ?

เราจะรู้ได้อย่างไรว่า Cardinality Estimates บน Execution plan นั้นแม่นยำเพียงพอหรือไม่?

มันน่าจะง่ายกว่าถ้าเราจะตอบคำถามนี้ด้วยตัวอย่างข้างล่างนี้ครับ ผมจะใช้คิวรี่จากบทความที่แล้วมาช่วยในการแสดงตัวอย่างให้ดูนะครับ

Continue Reading

Advertisements

Cardinality Feedback คิดผิดกันดีนัก เดียวพี่คิดเอง!!!


Cardinality Feedback

ช่วงนี้รัวๆ บทความให้เลยละกันครับ คันไม้คันมือมากกกกกก ก็วันนี้จัดให้อีกซักหนึ่งเรื่องแล้วกันนะครับเกี่ยวกับอีกหนึ่งความสามารถใน Oracle 11gR2 นั่นคือ Cardinality Feedback นั่นเองครับผม

Cardinality Feedback คืออะไร? ทำงานอย่างไร?

Cardinality Feedback ถูกนำมาใช้ครั้งแรกใน Oracle 11gR2 จุดประสงค์ก็เพื่อช่วยในเรื่องการ Generate execution plan ให้ดีขึ้นในคิวรี่ที่มีการรันบ่อยๆ และสำหรับคิวรี่ที่มีการคำนวนผลลัพธ์ที่ไม่ดี ซึ่งนั่นทำให้ Optimizer อาจจะคำนวนผิดพลาดได้ในหลายๆ สาเหตุ เช่น Statistics ที่ผิดพลาด, เส้นทางของคิวรี่ที่ซับซ้อนเกินความจำเป็น ไม่ว่าจะด้วยเหตุผลใดที่ทำให้เกิดการคำนวนผิดพลาด Cardinality Feedback นี่เองจะเข้ามาช่วยแก้ปัญหาตรงนี้

Continue Reading

Extended Statistics กับความสามารถที่เพิ่มขึ้นของ Optimizer


mac-glasses

สวัสดีครับวันนี้ผมจะพูดถึงเกี่ยวกับ Oracle Optimizer และความสามารถใหม่ของมัน ซึ่งทำให้การคำนวนเส้นทางของ Execution plan ดีขึ้นมากมาย และความสามารถในการคำนวนที่ถูกเพิ่มขึ้นมานั้น ทำให้เมื่อใดก็ตามที่ Optimizer คิดคำนวนเส้นทางของ SQL statement ใดๆ แล้ว ก็มักจะได้ Execution plan ที่ดีที่สุด สิ่งที่ผมจะกล่าวถึงวันนี้คือ Extended Statistics นั่นเองครับ

Continue Reading

PGA_AGGREGATE_LIMIT พารามิเตอร์สุดเข้มใน Oracle 12c


photo-1429051781835-9f2c0a9df6e4

สวัสดีครับ สวัสดีในรอบ 4 เดือนเลยทีเดียว หายไปนานมากเลย แต่ยังไงวันนี้ก็มีความรู้ใหม่มาฝากเพื่อนๆ สาวก Oracle DBMS นั่นคือพารามิเตอร์ตัวใหม่ที่ในที่สุด Oracle ก็สร้างมันออกมาเพื่อแก้ปัญหาที่มีมายาวนานกับการกินหน่วยความจำจนหมดเครื่องจากการจัดการ PGA ที่ค่อนข้างยากและท้าทายมากสำหรับ DBA ในเวอร์ชั่นเก่าๆ พารามิเตอร์ที่ผมเอามาฝากวันนี้คือ PGA_AGGREGATE_LIMIT ครับ

PGA_AGGREGATE_LIMIT ทำงานอย่างไร?

Continue Reading

Reorganize: สุดยอดเครื่องมือขอคืนพื้นที่ (2)


วันนี้เรามาต่อวิธีที่ 2 กับการทำ Reorganize database หรือการขอคืนพื้นที่บนฐานข้อมูลกันดีกว่าครับ นั่นคือการ Shrink table นั่นเองครับ อ้างอิงจากตาราง T ที่ผมทำการลบข้อมูลออกไป 500,000 บรรทัดนะครับ เมื่อเราทำการคิวรี่เพื่อทำการตรวจสอบจำนวนบล๊อกผลลัพธ์จะได้ดังนี้

Continue Reading

Fragment และผลกระทบต่อ Full table scan


ผมว่าหลายๆ คนเคยเจอเหตุการณ์ประมาณว่า batch ที่ทำงานในตอนกลางคืนช้า โดยสิ่งที่พยายามแก้ไขไปนั่นคือการทำการลบข้อมูลเก่าๆ ทิ้งไปเพื่อทำให้ข้อมูลน้อยลง โดยหลักความคิดแล้วน่าจะช่วยทำให้เร็วขึ้นได้จริง… แต่มันไม่เป็นอย่างนั้นหนะซิ เพราะเมื่อเราทำการลบข้อมูลจากตารางไปแล้วแม้จะเยอะแค่ไหนก็ตาม แต่ในตัว Physical level ของฐานข้อมูลเองยังมองว่าพื้นที่ว่างที่เคยเก็บข้อมูลของตารางนั้นๆ ยังอยู่ เราเรียกพื้นที่ว่างเหล่านั้นว่า Fragment นั่นเองครับ

Continue Reading

Execution plan เหตุใดเจ้าจึงเปลี่ยนไป?


สวัสดีครับ ช่วงนี้นานๆ เข้ามาเขียนซักทีนึงนะครับ แล้ววันนี้ผมก็จะมาบอกเล่าเรื่องราวเกี่ยวกับสิ่งที่เป็นหัวใจสำคัญสำหรับการ Tuning นั้นคือ Execution plan ของแต่ละ SQL statement ว่าเพราะสาเหตุใดบ้างที่ทำให้การคิวรี่ข้อมูลรู้สึกช้าลงหรือแตกต่างออกไปทั้งที่ SQL statement ก็ยังเหมือนเดิม ลองมาดูกันครับ

Continue Reading