Thaiadmin

การ Reindex ทีละ Table

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ akkdach

  • ****
  • 25
  • 0
การ Reindex ทีละ Table
« เมื่อ: 6 กันยายน 2015, 07:53:02 »
ผมใช้  DBCC SHOWCONTIG ได้ ผลดังด้านล่างครับ


DBCC SHOWCONTIG scanning 'item' table...
Table: 'item' (910626287); index ID: 1, database ID: 7
TABLE level scan performed.
- Pages Scanned................................: 5018
- Extents Scanned..............................: 945
- Extent Switches..............................: 4636
- Avg. Pages per Extent........................: 5.3
- Scan Density [Best Count:Actual Count].......: 13.54% [628:4637]
- Logical Scan Fragmentation ..................: 48.92%
- Extent Scan Fragmentation ...................: 97.04%
- Avg. Bytes Free per Page.....................: 3133.0
- Avg. Page Density (full).....................: 61.29%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

ตามที่ศึกษา กระทู้ของ พี่    insanity  พอดูออกว่าแย่มาก
ทีนี้ผมจะทำ Reindex ทีละตาราง เฉพาะตารางที่ใช้บ่อยๆ
ด้วยคำสั่ง DBREINDEX(Item,Index_itemcode,70)
ทีละตาราง ทีละ Index ของตาราง ดีใหมครับ
หรือผมควรใช้วิธีอื่น ในการ Reindex

DB ขนาด 160 GB
มี Table ที่เป็น Tran section 5 ตาราง ตารางละหลายล้าน Row

ผมเลยอยากทำเท่าที่จำเป็นอะครับ

Re: การ Reindex ทีละ Table
« ตอบกลับ #1 เมื่อ: 5 พฤศจิกายน 2015, 18:10:15 »
โดยปกติการ maintaining Index มีอยู่ 3 แบบคือ
1. Drop and Re-create
อันนี้ถ้าจำไม่ผิด Index จะ offline และถูก drop และเริ่ม re-create ใหม่ แต่ปัญหาคือเวลาสร้างใหม่มันมีสิทธิ์ถูก Interrupt ทำให้สร้างไม่ได้ แล้วก็อีกอย่าง เวลาที่มันเริ่ม re-create มันจะใช้ทรัพยากรของ Sql server พอสมควร เพราะต้องสร้าง Index ใหม่ทั้ง Table
2. Alter Index reorganize (DBCC indexdeflag)
ปัญหาของอันนี้คือมันไม่ได้ Update Statistics ให้ใหม่ เลยดูจะไม่ค่อยดีเท่าไหร่
3. ALTER INDEX REBUILD, (DBCC DBREINDEX)
ส่วนใหญ่คนที่ใช้อันนี้มักจะทำเพราะเกิดปัญหา index scan หรือ อ่าน page ช้า ทำให้ response time ช้าไปตามๆกัน
แล้วก็การ rebuild index มันจะอัพเดต corresponding index statistics โดยการ Fullscan ซึ่งก็จะใช้ ทรัพยากร SQL Server พอสทควรเหมือนกัน

แต่ดูจากผลที่เอามาผมว่า Rebuild ทีละ Indexก็คงเหมาะสมสุดมั๊งครับ ยิ่งถ้าใช้ Index แบบ Online ก็ไม่ต้องห่วงเรื่อง data loss เท่าไหร่

ผิดถูกยังไงช่วยแนะนำเพิ่มเติมนะครับ มือใหม่เหมือนกัน