Histogram statistics และผลกระทบจาก Bind variable


กรณีศึกษา: การรวบรวม Histogram statistics บนตารางและผลกระทบจากการใช้ Bind variables

สำหรับบทความในวันนี้ ผมจะพูดถึง Histogram statistics และผลกระทบของการใช้ Bind variables ต่อ Execution plan โดยผมจะกล่าวถึง บทความหนึ่งของท่านอาจารย์ของผมครับ

เมื่อเราทำการ Gather Statistics กับตารางที่ข้อมูลไม่ได้มีการปลี่ยนแปลงสามารถทำให้ Query Plan ที่เกิดกับคิวรีบนตารางเหล่านั้นเปลี่ยนไปได้ เช่นหากวันหนึ่งเราทำการ Gather Statistics รันคิวรี (และบันทึก Query Plan) เอาไว้ วันต่อมาเรา Gather Statistics อีก (และไม่ได้แก้ไขข้อมูลเดิมแต่อย่างใด) เมื่อเราคิวรีข้อมูลในตารางเหล่านั้นเราอาจจะพบว่า Query Plan ที่ได้ เปลี่ยนไป ซึ่ง Query Plan ที่ได้ ดูเหมือนวาจะดีกว่าตัวก่อน สาเหตุเป็นเพราะอะไร?

via Tanakorn Thai Oracle DBA: Query Plan เปี๊ยนไป๋!!?.

Continue Reading

Advertisements

Function-based index กับการใช้งานคอลัมน์ DATE


สำหรับวันนี้ผมจะมาทำจำลองเหตุการณ์ว่าทำไม? เมื่อเราใช้ TRUNC ฟังก์ชั่นบน DATE คอลัมน์ในคิวรี่แล้ว ทำไมคิวรี่ของเราจึงช้าลง ในขณะทีเราก็สร้างอินเด็กซ์บน DATE ไปให้แล้ว และในช่วงท้ายผมจะพูดถึงพระเอกของงานนี้นั้นคือ function-based index นั่นเองครับ เอาละครับมาเริ่มกันเลย
หนึ่งในสาเหตุสำหรับปัญหาเกี่ยวกับ SQL Statement ที่ได้พบได้เจอกันบ่อยๆ นั่นก็คือ Full table scan ซึ่งถูกกำหนดให้เป็น invalidating บน Index ใน SQL Statement ที่ WHERE clause ถูกเรียกใช้งาน Built-in function บน DATE column มาดูตัวอย่างกันครับ

Continue Reading

Parallel query processing ตอนที่ 1


เมื่อใดที่เราควรใช้ Parallel processing

ครั้งหนึ่งเมื่อเหล่า Developer เห็นผมใช้ Parallel hint เพื่อทำให้ได้ผลลัพธ์จาก Query เร็วขึ้น ไม่นานหลังจากนั้น ทุกๆ SQL ที่ถุกสร้างขึ้นโดย developer ท่านนั้นจะมีส่วนของ Parallel hint เพิ่มขึ้นมาด้วยตามแบบอย่างที่ผมทำให้พวกเค้าเห็น และหลังจากนั้นไม่นาน ประสิทธิภาพของระบบก็แย่ลงเนื่องมาจากการใช้ Parallel processing ที่มากเกินความจำเป็น

บทเรียนจากเรื่องนี้คือ ถ้ามี SQL ที่ถูกเรียกใช้งานพร้อมๆ กันบนฐานข้อมูลพยายามที่จะใช้ทรัพยากรทั้งหมดของระบบ (โดยเฉพาะแบบParallel processing) นั่นคือยิ่งจะทำให้ประสิทธิภาพของระบบแย่ลง ไม่ใช่ทำให้ดีขึ้น ดังนั้นเราควรเลือกใช้ Parallel เมื่อทำแล้วมั่นใจว่าทำให้ประสิทธิภาพดีขึ้นเท่านั้นโดยไม่ได้ไปกระทบกับประสิทธิภาพในส่วนอื่นๆ บนฐานข้อมูล

ในส่วนของบทความที่จะเขียนต่อไปนี้จะกล่าวถึงลักษณะของเหตุการณ์ว่าเมื่อใดเราควรเลือกใช้ Parallel SQL

Continue Reading

AUTO_SAMPLE_SIZE บน Oracle 11g ไฉไลกว่าเดิม!


เกริ่นนำกันก่อนละกันนะครับเกี่ยวกับการ Gather Optimizer Statistics ใน Oracle version เก่าๆ นั้น เราจำเป็นจะต้องคำนวน(เดา) ซึ่งเป็นเรื่องที่ค่อนข้างจุกจิกและยุ่งยากมากๆ เพราะ ถ้าเรากำหนดค่าไว้ที่ 100% บนออบเจ็กต์ขนาดใหญ่นั้นไม่ดีเอาซะเลย ถึงแม้ว่ามันจะการันตีว่าสถิติถูกรวบรวมมา 100% เต็มแต่ด้วยเวลาที่ใช้ไปนั้นเรียกได้ว่า “เต่าคลาน” เลยทีเดียว จนได้ถือกำเนิด AUTO_SAMPLE_SIZE ขึ้นเป็นครั้งแรกบน Oracle 9i ทำให้เราไม่จำเป็นต้องมาคอยกำหนด ESTIMATE_PERCENT อีกต่อไป แต่ข้อจำกัดของมันก็ยังมีอยู่ ถ้ามีการเบ้ (Skew) ของข้อมูลมากๆ สุดท้ายแล้วการกำหนด ESTIMATE_PERCENT ก็ยังคงมีประสิทธิภาพดีกว่าถ้ามีการเบ้ของข้อมูลมากๆ

Continue Reading

Index Selectivity นั้นสำคัญไฉน?


Index selectivity คืออะไร?

Balance tree index ช่วยทำให้ประสิทธิภาพของคิวรี่ที่เรียกข้อมูลปริมาณน้อยๆ จากตารางดีขึ้น ดังนั้นเราจึงควรสร้าง อินเด็กซ์บนตารางที่ถูกคิวรี่ในจำนวนบรรทัดต่ำกว่า 15% บ่อยๆ ซึ่งค่านี้สามารถปรับเปลี่ยนได้ตามความเหมาะสมตามสถานการณ์ที่ว่า จำนวนข้อมูลแค่ไหนที่อินเด็กซ์สามารถเรียกได้หรือคอลัมน์ใดๆ บนอินเด็กซ์ที่ต้องการใช้ในการ Join กับตารางอื่นๆ

ค่าเรโชของค่าเฉพาะบน column (Distinct value) ต่อจำนวนข้อมูลบนตารางจะถูกนำมาใช้ในการคำนวนหา Selectivity ของอินเด็กซ์นั้นๆ ซึ่ง Selectivity ในอุดมคติคือเท่ากับ 1 เทียบได้กับการใช้อินเด็กซ์แบบ Unique บน NOT NULL column นั่นเอง

Continue Reading

DDL สำหรับ Create Object? หาได้ด้วยคำสั่งง่ายๆ


ณ ออฟฟิศแห่งหนึ่ง DBA 2 คนกำลังตั้งใจทำงานพร้อมกับจิบกาแฟดำไปพลาง จู่ๆ นาย A ก็ทำคิ้วขมวดเป็นรูปตัว S แล้วเอ่ยขึ้นถามนาย B ว่า…

A: เฮ้ย! B ไอ Table นี่มัน CREATE ขึ้นมายังไงอะ นายมีทำเอกสารเก็บไว้บ้างไหม?
B: โอ้ยย! ไม่เคยทำหรอก เอกสง เอกสาร อะไรกัน!? คน IT เท่ๆ อย่างเรา ไม่เคยทำอยู่แล้ว…
A: แล้วจะเอาคำสั่ง DDL ได้จากที่ไหนเนี่ย T_T
B: ไม่เห็นยากเลย อะเอาคำสั่งนี่ไป

Continue Reading

DBA กับ 17 ทักษะที่จำเป็น!


พอดีช่วงนี้ว่างๆ ครับ เลยเปิดหาอะไรอ่านไปเรื่อย แล้วไปเจอ Website หนึ่งของคนไทยซึ่งได้เขียนสรุปจากบทความของ Craig S. Mullins เอาไว้ครับ ในบทความนี้ กล่าวถึง ทักษะ (เน้น ทางด้านเทคนิค) อะไรบ้าง ที่เราต้องสามารถทำได้ จึงจะเป็น DBA ที่ประสบความสำเร็จ

Craig S. Mullins ได้สรุป 17 ทักษะ ที่จำเป็นสำหรับที่ DBA ต้องมี ดังต่อไปนี้

Continue Reading