เป็นไปได้ที่จะรันคำสั่ง DBCC INDEXDEFRAG สองคำพร้อมกันโดยแต่ละคำสั่งบนตารางที่แตกต่าง


9

ฉันกำลังเรียกใช้สคริปต์ซึ่งดำเนินการ DBCC INDEXDEFRAG ในทุก ๆ ตารางในฐานข้อมูล SQL Server 2005 หนึ่งตารางต่อครั้ง การใช้ DBCC DBREINDEX แทนที่จะเป็น INDEXDEFRAG ไม่ใช่ตัวเลือกเนื่องจากข้อ จำกัด ด้านพื้นที่และข้อกำหนดเกี่ยวกับสถานะการออนไลน์

ฉันสังเกตว่าต้องใช้เวลานานกว่าปกติในการจัดระเบียบตาราง ตัวอย่างเช่นถ้าฉันตรวจสอบมุมมองการจัดการแบบไดนามิก "sys.dm_exec_requests" ฉันจะเห็นว่า INDEXDEFRAG ต่อไปนี้กำลังปั่นออกไปในดัชนีคลัสเตอร์ของตารางที่มี table_id ของ 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

ฉันรู้ว่ามันจะใช้เวลานานก่อนที่กระบวนการจัดเรียงข้อมูลจะเสร็จสมบูรณ์ หากข้อเท็จจริงที่ว่าสคริปต์ที่กำลังทำงานอยู่ในที่สุดจะจัดเรียงข้อมูลในตารางทั้งหมดจะมีอันตรายใด ๆ ในตัวฉันที่รัน DBCC INDEXDEFRAG ด้วยตนเองในดัชนีคลัสเตอร์ของตารางอื่นในขณะที่คำสั่งปัจจุบันทำงานหรือไม่ จริง ๆ แล้วทั้งสองตารางจะถูกจัดระเบียบในเวลาเดียวกันถ้าฉันทำเช่นนี้?

คำตอบ:


15

ได้คุณสามารถทำได้หลาย ๆ โต๊ะ คุณไม่สามารถทำได้สำหรับดัชนีหลายรายการในตารางเดียวกัน - ฉันคิดค้นแหล่งข้อมูลย่อยการล็อกดัชนีใหม่เพื่อป้องกัน พฤติกรรมแบบเดียวกันใน ALTER INDEX ... จัดวางใหม่ที่ฉันแทนที่ด้วยในปี 2005

ขอบคุณ


2
คุณไม่สามารถได้คำตอบที่ถูกต้องมากกว่าหนึ่งจากผู้ที่เขียนมัน! อย่าลืมเกี่ยวกับการโหลด IO ที่เกี่ยวข้องกับการสร้างใหม่หลายครั้งหรือสร้างใหม่ในเวลาเดียวกันและอย่าลืมใช้ ALTER INDEX แทนคำสั่ง DBCC ในอนาคต
AndrewSQL

เห็นด้วยฉันไม่รู้ว่ามันจะเป็นไปได้อย่างไรที่จะได้รับคำตอบที่ถูกต้องมากขึ้นในเรื่องนี้โดยเฉพาะหนึ่งคำถามจากพอลแรนดัลโดยตรง ขอบคุณพอล
RelentlessMike

6

โปรดทราบว่า DBCC INDEXDEFRAG & DBREINDEX นั้นเลิกใช้แล้วและถูกแทนที่ด้วย ALTER INDEX:

สิ่งสำคัญ

คุณลักษณะนี้จะถูกลบใน Microsoft SQL Server รุ่นอนาคต อย่าใช้คุณสมบัตินี้ในงานพัฒนาใหม่และปรับเปลี่ยนแอปพลิเคชันที่ใช้คุณสมบัตินี้โดยเร็วที่สุด ใช้ ALTER INDEX แทน - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

สำหรับการรันสองไฟล์พร้อมกันมันขึ้นอยู่กับเค้าโครงของไฟล์ หากพวกเขาทั้งหมดอยู่ในดิสก์เดียวกันคุณมีแนวโน้มที่จะชะลอตัวลงเนื่องจากพวกเขาจะต่อสู้กันเองเพื่อ I / O คุณจะดีที่สุดสำหรับ REORG หรือ REBUILD เมื่อจำเป็นเท่านั้น ตรวจสอบสคริปต์ของ Michelle Ufford ที่นี่สำหรับวิธีแก้ปัญหาอัตโนมัติ: http://sqlfool.com/2010/04/index-defrag-script-v4-0/


ขอบคุณ Eric ในกรณีนี้ฐานข้อมูลจะถูกกระจายไปทั่วหลายไฟล์ข้อมูลบนพาร์ติชันที่แตกต่างกันและด้านบนของ IBM DS8300 SAN ดังนั้นฉันคิดว่าฉันจะไม่เป็นไรตราบใดที่ I / O ไป
RelentlessMike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.