XÓA đơn giản, nhưng kế hoạch thực hiện phức tạp


9

Khi tôi chạy xóa này:

DELETE FROM ETLHeaders WHERE ETLHeaderID < 32465870

... nó xóa 39.157 hàng. Nó sẽ đơn giản bởi vì nó đang xóa trên ETLHeaderID, đó là chỉ mục được nhóm và khóa chính. Nhưng (theo kế hoạch thực hiện) dường như đang đánh 361.190 hàng và sử dụng các chỉ mục khác. Bảng này có một trường với kiểu dữ liệu XML (trong trường hợp ảnh hưởng đến XÓA này).

Bất cứ ý tưởng tại sao và làm thế nào tôi có thể tăng tốc độ XÓA này?

Kế hoạch thực hiện tại đây: http://sharetext.org/qwDY Lược đồ bảng ở đây: http://sharetext.org/Vl9j

cảm ơn

Câu trả lời:


10

Các mức cao nhất của kế hoạch liên quan đến việc loại bỏ các hàng khỏi bảng cơ sở (chỉ mục được nhóm) và duy trì bốn chỉ mục không bao gồm. Hai trong số các chỉ mục này được duy trì từng hàng một cùng lúc việc xóa chỉ mục được nhóm được xử lý. Đây là "+2 chỉ mục không phân cụm" được tô sáng màu xanh lá cây bên dưới.

Đối với hai chỉ mục không bao gồm khác, trình tối ưu hóa đã quyết định tốt nhất là lưu các khóa của các chỉ mục này vào một bàn làm việc tempdb (Bộ đệm Eager), sau đó phát bộ đệm hai lần, sắp xếp theo các khóa chỉ mục để thúc đẩy mẫu truy cập tuần tự.

Bảo trì chỉ số thường xuyên

Chuỗi hoạt động cuối cùng liên quan đến việc duy trì các xmlchỉ mục chính và phụ , không được bao gồm trong tập lệnh DDL của bạn:

Bảo trì chỉ mục XML

Không có nhiều việc phải làm về việc này. Các chỉ mục và xmlchỉ mục không bao gồm phải được giữ đồng bộ hóa với dữ liệu trong bảng cơ sở. Chi phí duy trì các chỉ mục như vậy là một phần của sự đánh đổi mà bạn thực hiện khi tạo các chỉ mục bổ sung trên một bảng.

Điều đó nói rằng, các xmlchỉ số là đặc biệt có vấn đề. Rất khó để trình tối ưu hóa đánh giá chính xác có bao nhiêu hàng sẽ đủ điều kiện trong tình huống này. Trên thực tế, nó ước tính quá mức cho xmlchỉ mục, dẫn đến gần 12GB bộ nhớ được cấp cho truy vấn này (mặc dù chỉ có 28 MB được sử dụng trong thời gian chạy):

Số lượng hàng ước tính

Bạn có thể xem xét thực hiện xóa trong các lô nhỏ hơn, hy vọng sẽ giảm tác động của việc cấp bộ nhớ quá mức.

Bạn cũng có thể kiểm tra hiệu suất của một kế hoạch mà không cần sử dụng OPTION (QUERYTRACEON 8795). Đây là một cờ theo dõi không có giấy tờ, vì vậy bạn chỉ nên thử nó trên một hệ thống phát triển hoặc thử nghiệm, không bao giờ được sản xuất. Nếu kế hoạch kết quả nhanh hơn nhiều, bạn có thể nắm bắt kế hoạch XML và sử dụng nó để tạo Hướng dẫn kế hoạch cho truy vấn sản xuất.


3

Bạn đang đi đúng hướng - chỉ số XML là vấn đề. Rõ ràng, có một chỉ mục XML chính cũng như thứ cấp.

Khi thực hiện XÓA với bảng cơ sở (ETLHeaders), dữ liệu cũng phải được xóa khỏi mọi chỉ mục của bảng này. Chi phí này có thể có ý nghĩa, đặc biệt đối với các chỉ mục XML.

Chỉ mục gây ra thời lượng dài là chỉ mục XML thứ cấp [XML_IX_ETLHeadftimeProperty]. 39.157 hàng trong "bảng quan hệ" của bạn đề cập đến 361.190 hàng trong chỉ mục XML chính [XML_IX_ETLHeaders]. Và những hàng 361k đó cần được sắp xếp để có thể được sử dụng để xóa chỉ mục phụ. Và hoạt động sắp xếp này gây ra thời gian dài của truy vấn. . .

Tùy chọn duy nhất tôi thấy để tăng tốc truy vấn này là loại bỏ chỉ mục XML thứ cấp. Tùy thuộc vào dữ liệu, nó có thể là một lựa chọn tốt hơn để cắt dữ liệu XML thành một bảng quan hệ.

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.