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

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


photo-1429051781835-9f2c0a9df6e4

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

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

Continue Reading

Materialized view สุดยอดอาวุธลับบน Oracle DBMS


เคยเจอปัญหาแบบนี้กันไหมครับ? มีลูกค้าโทรเข้ามาว่า “งานออนไลน์ช้ามากกกกกกกกกกกกกกก” ส่วนเราเองก็ตรวจสอบปัญหาแล้วพบว่าปัญหามันเกิดจากคิวรี่เดิมที่อาจจะใช้ทรัพยากรเยอะพอสมควร ที่ถูกเรียกซ้ำๆ เพราะเป็นงานปกติของลูกค้า นอกจากการปรับจูนคิวรี่แล้ว เราจะหาทางแก้ไขมันอย่างไรได้อีกนะ? วันนี้ผมเอาอาวุธลับอีกตัวมาเสนอขายทุกท่านครับ นั่นคือ Mview หรือชื่อเต็มของมันเรียกว่า Materialized view นั่นเอง

Continue Reading

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


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

Continue Reading

ช้านักก็ปักหมุด ตอนที่ 1: dbms_shared_pool.keep


สำหรับตอนนี้ผมให้ชื่อว่า “ช้านักก็ปักหมุด” คำว่าปักหมุดในที่นี้ผมหมายถึง Pin ซึ่งผมจะแบ่งเป็น 2 ตอน ตือเรื่องราวเกี่ยวกับ dbms_shared_pool.keep ซึ่งเป็นการกำหนดให้ pin package ใดๆ ไว้บน Shared pool ซึ่งช่วยทำให้ประสิทธิภาพของฐานข้อมูลดีขึ้น และอีกส่วนหนึ่งก็คือ db_keep_cache_size พารามิเตอร์ที่ใช้กำหนดพื้นที่เก็บข้อมูล (Table,index) ที่เราต้องการให้มันอยู่บนหน่วยความจำเสมอซึ่งคือการ Pin table หรือ Pin index ขึ้นไปอยู่บนหน่วยความจำนั่นเอง เอาละครับ! มาดูกัน…

Continue Reading

Selectivity จงมา!!! การจัดลำดับ Column บน Index


ห่างหายไปนานเลยนะครับ พอดีช่วงนี้งานเยอะมากเลยไม่มีเวลามาแบ่งปันข้อมูลสาระดีๆ กันเลย ก็วันนี้ผมจะนำเสนอเกี่ยวกับความสำคัญในการจัดลำดับก่อนหลังในการสร้าง index เพื่อให้ไปประสิทธิภาพที่ดีที่สุดมาฝากกันครับ

จากบทความเก่าที่ผมเคยเขียนเกี่ยวกับค่า Selectivity บน Column หรือค่าเฉพาะ (Distinct value) นั้นสำคัญมากสำหรับการสร้าง Index ที่ดี ยิ่งมีค่าเฉพาะมากหรือเท่ากับจำนวนบรรทัด นั่นเท่ากับค่า Selectivity ที่เท่ากับ 100% และเราจะได้รับประสิทธิภาพเต็มที่จาก Index ตัวนั้นๆ

Continue Reading