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


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

Continue Reading

Advertisements

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

ORA-01000 Maximum Cursors Exceeded! เจ้าตายแล้ว!


ห่างหายไปนานเลยครับ ฮ่าๆ ช่วงนี้งานชุกมากๆ แต่ยังไงวันนี้ก็มีเรื่องราวดีๆ มาฝากเหมือนเดิม ORA-01000

นี้มัน Error อะไรกันอีกเนี่ย! ORA-01000 maximum open cursors exceeded! เคยเจอกันไหมครับ? เคยหล่ะซิ โอเค วันนี้ผมจะมางัดแงะแกะเกา Error message ตัวนี้ให้ทุกคนเข้าใจตรงกันนะครับ!

ORA-01000 maximum open cursors exceeded
Cause: A host language program attempted to open too many cursors. The initialization parameter OPEN_CURSORS determines the maximum number of cursors per user.
Action: Modify the program to use fewer cursors. If this error occurs often, shut down Oracle, increase the value of OPEN_CURSORS, and then restart Oracle.

Continue Reading

ORA-1652 TEMP เต็ม! ทำไงดีอ่ะ?


สวัสดีครับ เดียวเริ่มตั้งแต่ช่วงเดือนหน้าผมอาจจะมีเรื่องมาแชร์ทุกคนมากขึ้นครับ เนื่องจากจะเริ่มทำการเตรียมตัวสอบเพื่อเอา Oracle 11g Performance Tuning Certified Expert ถ้าเจอเรื่องอะไรน่าสนใจก็จะเอามาลงแบ่งปันกันเหมือนเดิมครับและสำหรับวันนี้ผมขอเกริ่นนำกันก่อนละกันนะครับ เราจะทำอย่างไรดีถ้า Temporary tablespace เต็ม? ซึ่งเราอาจจะทราบว่ามันจะเกิด ORA-1652: unable to extend temp segment ใน Alert log ขึ้น แล้วทำไงดีหละ? มันเต็มไปแล้วอ่ะ… วันนี้ผมเอาความรู้เกี่ยวกับ Temporary tablespace วิธีการมอนิเตอร์และรับมือกับปัญหา ORA-1652 มาฝากครับ

Continue Reading