Cập nhật truy vấn chậm hơn sau khi bật Chỉ mục toàn văn bản của SQL Server


10

Tôi có một trang web asp.net với nhiều thao tác chèn, cập nhật và xóa các truy vấn chạy đối với cơ sở dữ liệu của tôi.

Vài ngày trước, tôi tạo một Chỉ mục toàn văn bản trên hai cột của một trong các bảng. Sau đó, tôi nhận ra rằng khi trang web chạy các truy vấn cập nhật trên bảng đó, việc sử dụng bộ nhớ và ổ đĩa của Quy trình máy chủ SQL sẽ tăng vọt và cập nhật chậm hơn. Các truy vấn đã chạy mà không có bất kỳ vấn đề hiệu suất nào trước khi tạo chỉ mục Toàn văn.

Tôi cũng đã nhận ra rằng các truy vấn cập nhật rất đơn giản trước đây, bây giờ rất phức tạp, vì kế hoạch thực hiện bây giờ có những thứ như cập nhật chỉ mục Toàn văn. Đây là một phần của kế hoạch thực hiện mới trở nên phức tạp sau khi bật Toàn văn:

nhập mô tả hình ảnh ở đây

Trong một số giờ khi tôi cập nhật nội dung trang web, tôi đã chạy 5000 truy vấn cập nhật và tôi nghĩ rằng quá trình lập chỉ mục toàn văn bản được thực hiện mỗi lần cho mỗi hàng.

Tôi có nên tắt quét toàn bộ văn bản khi bắt đầu cập nhật các hàng và sau đó kích hoạt lại nó (như trong câu hỏi liên quan này ) không?

Tôi có thể yêu cầu SQL Server dừng lập chỉ mục toàn văn bản trong 5 phút và sau đó bắt đầu lập chỉ mục dữ liệu mới không?

Có sự thay thế nào tốt hơn không? Tôi đang sử dụng SQL Server 2012.

Câu trả lời:


2

Trong trường hợp của tôi, tôi đã phải thay đổi một câu lệnh CẬP NHẬT không hiệu quả:

Trước:

UPDATE Customer 
SET Rating = 'Not Rated'
WHERE ...

Sau:

UPDATE Customer
SET Rating = 'Not Rated'
WHERE ...
AND Rating <> 'Not Rated' -- THIS LINE WAS INSERTED

Hiệu suất này được cải thiện từ 4 phút xuống còn 5 giây. Vấn đề là tôi đã sử dụng để cập nhật tất cả các hàng, ngay cả khi chúng đã có giá trị mà tôi muốn gán.


1

Nếu bạn dừng nó (vô hiệu hóa nó), chỉ mục sẽ không có sẵn cho các truy vấn sử dụng nó.

Tuy nhiên, bạn có thể đặt theo dõi thay đổi thành thủ công:

--disable automatic change tracking
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING MANUAL
GO

--run the update statement here

--re-enable automatical change tracking after updating it to reflect the recent changes
ALTER FULLTEXT INDEX schema.table START UPDATE POPULATION
GO
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING AUTO
GO

Bạn có thể kiểm tra giá trị hiện tại với truy vấn này:

SELECT TOP(10) change_tracking_state_desc, * 
FROM sys.fulltext_indexes 
WHERE object_name(object_id) = '...';

Các tùy chọn hợp lệ là: SET CHANGE_TRACKING {MANUAL | AUTO | OFF}

Chỉ định xem các thay đổi (cập nhật, xóa hoặc chèn) được thực hiện cho các cột trong bảng được bao phủ bởi chỉ mục toàn văn bản sẽ được SQL Server truyền tới chỉ mục toàn văn bản. Dữ liệu thay đổi thông qua WRITETEXTUPDATETEXTkhông được phản ánh trong chỉ mục toàn văn bản và không được chọn theo dõi thay đổi.

Xem tài liệu của Microsoft để biết ALTER FULLTEXT INDEX (Transact-SQL) .

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.