Có thể chạy đồng thời hai lệnh DBCC INDEXDEFRAG, mỗi lệnh trên một bảng khác nhau không?


9

Tôi hiện đang chạy một tập lệnh thực hiện DBCC INDEXDEFRAG trên mỗi bảng trong cơ sở dữ liệu SQL Server 2005, mỗi lần một bảng. Sử dụng DBCC DBREINDEX thay vì INDEXDEFRAG không phải là một tùy chọn, do các hạn chế về không gian và yêu cầu về thời gian hoạt động.

Tôi đã nhận thấy rằng phải mất một thời gian dài để các bảng nhất định được phân mảnh. Chẳng hạn, nếu tôi kiểm tra khung nhìn quản lý động "sys.dm_exec numquests", tôi có thể thấy rằng INDEXDEFRAG sau đây hiện đang bỏ qua chỉ mục được nhóm của một bảng có bảng_id là 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

Tôi biết rằng sẽ còn rất lâu nữa để quá trình phân mảnh hoàn thành. Bỏ qua một bên thực tế là tập lệnh hiện đang chạy cuối cùng sẽ chống phân mảnh tất cả các bảng, liệu có hại gì khi tôi tự chạy một DBCC INDEXDEFRAG khác trên chỉ mục được nhóm của một bảng khác trong khi lệnh hiện tại thực thi không? Cả hai bảng sẽ thực sự được phân mảnh cùng một lúc nếu tôi làm điều này?

Câu trả lời:


15

Có, bạn có thể làm điều đó cho nhiều bảng. Bạn không thể làm điều đó cho nhiều chỉ mục trên cùng một bảng - Tôi đã phát minh ra một nguồn con khóa chỉ mục mới để ngăn chặn nó. Hành vi tương tự trong ALTER INDEX ... REORGANIZE mà tôi đã thay thế nó vào năm 2005.

Cảm ơn


2
Bạn không thể nhận được câu trả lời chính xác hơn câu trả lời từ người đã viết nó! Đừng quên tải IO liên quan đến việc thực hiện nhiều lần xây dựng lại hoặc reorgs cùng một lúc và đảm bảo sử dụng ALTER INDEX thay vì lệnh DBCC trong tương lai.
AndrewQuery

Đồng ý, tôi không biết làm thế nào có thể có được câu trả lời chính xác hơn về vấn đề đặc biệt này hơn là từ một người trực tiếp từ Paul Randal. Cảm ơn Paul.
RelentlessMike

6

Lưu ý rằng DBCC INDEXDEFRAG & DBREINDEX không được dùng nữa và được thay thế bằng ALTER INDEX:

Quan trọng

Tính năng này sẽ bị xóa trong phiên bản tương lai của Microsoft SQL Server. Không sử dụng tính năng này trong công việc phát triển mới và sửa đổi các ứng dụng hiện đang sử dụng tính năng này càng sớm càng tốt. Sử dụng ALTER INDEX thay thế. - http://msdn.microsoft.com/en-us/l Library / ms177571 (v = Vista.90) .aspx

Đối với việc chạy hai đồng thời, nó phụ thuộc vào bố cục tệp của bạn. Nếu tất cả chúng trên cùng một đĩa, bạn có thể sẽ làm chậm từng cái vì chúng sẽ chiến đấu với nhau để giành I / O. Bạn tốt nhất chỉ nên REORG hoặc REBUILD khi cần thiết. Kiểm tra kịch bản của Michelle Ufford tại đây để biết giải pháp tự động: http://sqlfool.com/2010/04/index-defrag-script-v4-0/


Cảm ơn Eric. Trong trường hợp cụ thể này, cơ sở dữ liệu được trải rộng trên nhiều tệp dữ liệu, trên các phân vùng khác nhau và trên IBM DS8300 SAN. Vì vậy, tôi nghĩ rằng tôi sẽ ổn cho đến khi tôi / O đi.
RelentlessMike
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.