[DB2] CALL SYSPROC.ADMIN_CMD( ‘REORG TABLE xxxx’ ) ?

ทำงานเกี่ยวกับ DB2 จริงๆจังๆซักพักใหญ่แล้ว เคยสงสัยไหมว่าเวลาทำ SQL Script เราจะเจอคำสั่งชุดนึงที่มักจะอยู่ในลำดับท้ายๆ ของไฟล์ SQL Script นั้น คือ

CALL SYSPROC.ADMIN_CMD( 'REORG TABLE xxxx' )

แล้ววันนี้เป็นโอกาสอันที่ ที่ผมมีเวลาว่าง เพราะเป็นวันหยุด 555 เดี๋ยวผมมาอธิบายกันว่าเจ้าคำสั่ง CALL SYSPROC.ADMIN_CMD( 'REORG TABLE xxxx' ) มันมันมีไว้ทำอะไรกัน ?
โดยเราจะมองที่ละส่วนกัน เผื่อคนที่ยังไม่รู้ครับ


ส่วนที่ 1: CALL SYSPROC.ADMIN_CMD คือ การเรียกใช้ Store procedure ของระบบ ซึ่งอยู่ใน Schema SYSPROC โดยเจ้า ADMIN_CMD คือ Procudure ที่เอาไว้รันคำสั่งในในระดับ administrative commands เพื่อจัดการกับ Database ของเราครับ โดยสิ่งที่เราสามารถจัดการได้ผ่านเจ้า ADMIN_CMD ได้แก่ RUNSTATS, PRUNE HISTORY/LOGFILE หรือ REORG INDEXES/TABLE เป็นต้นครับ ตัวอย่างการใช้งาน

CALL SYSPROC.ADMIN_CMD('คำสั่งทีต่องการ เช่น RUNSTATS')

ส่วนความสามารถอื่นๆ สามารถดูเพิ่มเติมได้ที่นี้ครับ ADMIN_CMD procedure - Run administrative commands

ส่วนที่ 2: 'REORG TABLE xxxx' คือ Command String หรือเป็นคำสั่งที่เราส่งให้ ADMIN_CMD ไปจัดการให้ โดยคำสั่งที่เราสนใจในตอนนี้ คือ 'REORG TABLE xxxx' ครับ
มากันที่คำสั่ง REORG มีหน้าที่โดยรวมคล้ายกับการ Defragment ใน Harddisk โดยมีการเคลียร์พื้นที่ว่างใน Page จัดการข้อมูล ถ้าเราเพิ่มคำสั่ง

  • 'REORG INDEX xxxx' เป็นการ reorganize ข้อมูลสร้างเพื่อ Index ใหม่ รวมถึงการบีบอีกข้อมูลที่เป็น Dictionary ด้วย
  • 'REORG TABLE xxxx' คือ การสร้างข้อมูลในแต่ละ row ลด fragment และบีบอัดข้อมูล เพื่อลดพื่นที่ในการจัดเก็บ

เมื่อไหร่เราถึงต้องใช้คำสั่งนี้หละ

  • เมื่อมีการแก้ไขโครงสร้างของตาราง(DDL) เช่น เพื่ม Column, Drop Column หรือ Alter Column เป็นต้น
  • เมื่อมีการแก้ไขข้อมูลในตาราง เช่น มีการ Insert หรือ Delete ข้อมูลทีละเยอะๆ เป็นต้น
  • จะรู้ว่าต้อง reorg โดยใช้ Tool reorgchk

เวลาใช้งานจริงต้องเขียนอย่างไร ?

CALL SYSPROC.ADMIN_CMD( 'REORG TABLE WHTAX' );

แล้วเราจะรู้ได้อย่างไรว่า Table ของเรา ต้องมีการ REORG แล้ว

  • Run โดยใช้ SQL Query
SELECT TABSCHEMA, TABNAME FROM SYSIBMADM.ADMINTABINFO WHERE REORG_PENDING = 'Y' 
REORG
ตัวอย่างการรัน SQL Script เพื่อตรวจสอบว่า Table ไหนควรทำการ REORG
  • Run โดยใช้ CLP Command
db2 reorgchk update statistics on table system

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.