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


GATHER_PLAN_STATISTICS

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

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

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

Continue Reading

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

Library_cache_lock

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


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

Continue Reading

reorganize_db_2

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


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

Continue Reading

reorganize

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


วันนี้ผมมาเขียนบทความนอกสถานที่นิดนึงครับ พอดีวันนี้มาเที่ยวตลอดน้ำดอนหวายพร้อมด้วยกับอากาศที่ร้อนมากทำให้ใจผมร้อนอยากจะเขียนบทความขึ้นมาด้วย (เกี่ยวไหม) เอาละครับมาต่อกันจากคราวที่แล้วครับ ที่ติดเรื่องการแก้ปัญหาเรื่อง Fragment บนฐานข้อมูลไว้ครับ ซึ่งวิธีแก้นั่นไม่ได้ยากเลย เค้าเรียกว่าวิธีนี้ว่าการ Reorganize database เรียกสั้นๆ ว่า Reorg หรือแบบไทยๆ เราเรียกว่าการขอคืนพื้นที่นั่นเองครับ ฮ่าๆ เพื่อไม่ให้เสียเวลามาดูกันเลยครับ

Reorganize database

อ้างอิงจากท้ายบทความที่แล้วนะครับ ที่ผมได้ทดลองทำการลบข้อมูลออกไปครึ่งนึง แต่การคิวรี่ข้อมูลด้วย Full table scan นั้นได้ผลใกล้เคียงเดิมซึ่งเป็นผลมาจาก High water mark บนตาราง T นั้นเอง และผมจะแสดงวิธีในการแก้ปัญหานี้ออกเป็น 2 วิธีและแสดงตัวอย่างให้ดูทีละวิธีครับ

Continue Reading