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


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

Continue Reading

โฆษณา

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


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

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

Keepalive บน Oracle Database: SQLNET.EXPIRE_TIME


วันนี้จะเอาเคสที่เจอสดๆ ร้อนๆ เมื่อไม่นานนี้เองมาเล่าให้ฟังครับ เริ่มเรื่องมาจากทาง Developer team ต้องการสร้าง Connection บนดาต้าเบสทิ้งไว้คล้ายๆ การทำงานของ On-demand batch ซึ่งเค้าต้องการให้ Establish session ทิ้งเอาไว้ แต่ผลจากการเทสปรากฏว่า Database session ถูก terminate ออกจากระบบหลังจากที่ Connect เข้ามาทุกๆ 30 นาที ซึ่งหลังจากตรวจสอบแล้วสันนิษฐานกันว่าเป็นเพราะ Firewall setting ที่คอยตัดการเชื่อมต่อของ Idle connection ครับ และหลังจากตรวจสอบ OS parameter ที่เกี่ยวข้อง TCP Keepalive ซึ่งก็คือ net.ipv4.tcp_keepalive_time พบว่าเป็นค่า Default ซึ่งก็คือ 2 ชั่วโมง

แล้วทำยังไงถึงจะแก้ปัญหานี้ได้หละ???

Continue Reading

ORA-00054 Resource Busy มันคืออะไรกัน!?


หลายคนคงเคยเจอปัญหาน่าปวดหัวเกี่ยวกับ Error ที่มี Code ว่า ORA-00054 หลังจากที่เราพยายาม Execute DDL command บนตารางใดๆ ซักตารางนึง ซึ่งวันนี้ผมจะมาขยายความให้ชัดเจนว่าเจ้า Error ตัวนี้มันเกิดมาจากอะไร? และวิธีแก้ไข/วิธีเลี่ยงมีอะไรบ้างครับ…

ORA-00054: resource busy and acquire with NOWAIT specified.
Cause: Resource interested is busy.
Action: Retry if necessary.

Continue Reading