Tôi đang nhập một lượng lớn dữ liệu vào cơ sở dữ liệu trống và trước khi bắt đầu, tôi đã vô hiệu hóa tất cả các chỉ mục không phân cụm không duy nhất để xem liệu tôi có thể cải thiện hiệu suất của việc nhập không.
Bây giờ tôi muốn kích hoạt lại các chỉ mục và tôi tự hỏi liệu tôi có thể làm gì để tối ưu hóa điều này không.
Có> 100 bảng và gần 2.000 chỉ mục sẽ được xây dựng lại. Cơ sở dữ liệu có kích thước 200GB.
Phần chính của tập lệnh tôi đang chạy là đây:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
Tôi đã xem xét cài đặt ONLINE = OFF cho câu lệnh thay đổi chỉ mục, nhưng khi các chỉ mục bắt đầu bị vô hiệu hóa, tôi không chắc rằng cài đặt này sẽ có bất kỳ ảnh hưởng nào. Tôi cũng đã xem xét việc thiết lập SORT_IN_TEMPDB = ON, nhưng vì các tệp tempdb nằm trên cùng ổ đĩa với các tệp .mdf của cơ sở dữ liệu nên tôi cho rằng cũng không có lợi ích gì khi làm điều đó.
Trong khi chạy tập lệnh xây dựng lại, tôi nhận thấy rằng tôi có rất nhiều kiểu chờ CXPACKET. Tôi thực sự không hiểu tại sao điều đó sẽ xảy ra hoặc nếu đó là vấn đề mà tôi nên tìm cách giải quyết.
Một điểm cuối cùng có thể có liên quan: toàn bộ máy chủ của tôi hiện không hoạt động ngoài việc nhập dữ liệu này vào cơ sở dữ liệu. Không có hoạt động người dùng khác để xem xét hoặc lo lắng về; mối quan tâm duy nhất của tôi là nhập dữ liệu vào cơ sở dữ liệu trong thời gian ngắn nhất.
CXPACKET
chờ đợi: chỉ mục tự xây dựng lại các chỉ mục quét (ngay cả chỉ mục đang được xây dựng lại ) và những lần quét đó có thể sử dụng song song. Bạn không nên quan tâm đến những chờ đợi đó - sự song hành có thể giúp ích.