Tôi có một bảng lớn (~ 170 triệu hàng, 2 nvarchar và 7 cột int) trong SQL Server 2005 liên tục được chèn vào. Tất cả mọi thứ hoạt động ok với nó từ một quan điểm hiệu suất, nhưng mỗi một lần trong một thời gian tôi phải cập nhật một tập hợp các hàng trong bảng gây ra vấn đề. Nó hoạt động tốt nếu tôi cập nhật một bộ dữ liệu nhỏ, nhưng nếu tôi phải cập nhật một bộ 40.000 bản ghi hoặc vì vậy phải mất khoảng 3 phút và các khối trên bảng gây ra vấn đề kể từ khi chèn bắt đầu thất bại.Chạy Cập nhật trên một bảng lớn, được sử dụng nhiều
Nếu tôi chỉ chạy một lựa chọn để lấy lại dữ liệu cần được cập nhật, tôi lấy lại 40k bản ghi trong khoảng 2 giây. Nó chỉ là bản cập nhật kéo dài mãi mãi. Điều này được phản ánh trong kế hoạch thực hiện cho bản cập nhật nơi cập nhật chỉ mục nhóm chiếm 90% chi phí và chỉ mục tìm kiếm và toán tử hàng đầu để có được các hàng chiếm 10% chi phí. Cột tôi đang cập nhật không phải là một phần của bất kỳ khóa chỉ mục nào, do đó, nó không giống như việc tổ chức lại bất kỳ thứ gì.
Có ai có bất kỳ ý tưởng nào về cách thức tăng tốc này không? Suy nghĩ của tôi bây giờ là viết một dịch vụ sẽ chỉ thấy khi các cập nhật này xảy ra, kéo trở lại các bản ghi phải được cập nhật, và sau đó lặp lại và cập nhật từng cái một. Điều này sẽ đáp ứng nhu cầu kinh doanh của tôi nhưng đó là một mô-đun khác để duy trì và tôi rất thích nếu tôi có thể sửa lỗi này từ phía DBA của mọi thứ.
Cảm ơn mọi suy nghĩ!
bạn có thể đăng các định nghĩa bảng (bao gồm khóa chính, chỉ số, vv), các bẫy trên bàn, và bản thân truy vấn cập nhật thực tế? – MatBailie
chỉ là một ý tưởng: sharding – Adrian
@Adrian - Nhưng nếu các trường được cập nhật không nằm trong chỉ mục nhóm (hoặc rõ ràng là bất kỳ chỉ mục nào khác) thì tại sao kế hoạch thực thi lại hiển thị cập nhật chỉ mục nhóm? – MatBailie