Full Text Indexing Overhead

Tôi nghĩ rằng có một xu hướng giữa DBAs và SQL Server wonks là một chút dismissive của toàn văn chỉ mục. Tôi nghĩ rằng trong nhiều trường hợp, mọi người có xu hướng suy nghĩ về nó trong điều khoản của việc thêm chi phí đáng kể.

Trong một thời gian dài tôi thực sự xem nó như là một dạng tìm kiếm mạnh mẽ hơn, nhưng tốn kém hơn nhiều. Sau đó, tôi thực sự đã có cơ hội để làm việc với nó (trong một cuộc sống quá khứ) một thỏa thuận tốt, và thấy rằng nó đã không thực sự thêm rằng nhiều trên cao trong nhiều trường hợp. Trong thực tế, tôi thấy rằng nó đã được thực sự khá mát mẻ công nghệ và cung cấp rất nhiều chức năng mà không có hiệu suất đáng chú ý hits. Mặc dù, tôi thấy rằng các chỉ mục thường xuyên bị rơi rất nhiều và cần một chút ‘tình yêu’ để giữ cho chúng hoạt động đúng. (Đây là tất cả trên SQL Server 2000.)

Nhưng trong một số trường hợp nó có thể mang lại lợi ích về hiệu năng điên
Nhanh đến ngày hôm nay. Tôi hiện đang làm việc với một khách hàng có cơ sở dữ liệu có kích thước phong nha (khoảng 20GB). Hơn 5GB của DB đó được tạo thành từ một bảng ‘Sách’ – có khoảng 8 triệu hàng. Bảng có cả tên tác giả và tên miền, và mỗi tên miền đều khá rộng (nvarchar (300) trở lên). Bảng này cung cấp sự hỗ trợ cho các chức năng chính và người dùng thường xuyên tìm kiếm các tác giả hoặc tiêu đề sử dụng LIKE và các ký tự đại diện. Tất cả chúng ta đều biết điều đó là khó chịu – vì nó buộc phải quét.

Những tìm kiếm này thực sự gây ra một bảng quét, đã được ném ra quá nhiều lần đọc, và tạo ra một lượng lớn sử dụng CPU. Đến mức bạn có thể nhìn thấy rõ ràng từng câu hỏi trong trình quản lý tác vụ – như CPU ​​đã kích hoạt để xử lý việc quét bên dưới. Hình ảnh dưới đây giúp làm nổi bật mức độ nghiêm trọng của vấn đề – với mỗi truy vấn quét được biểu diễn bằng tăng đột ngột, bạn có thể thấy:

 

Tôi đã ném một chỉ mục vào mỗi cột, cho rằng việc tìm kiếm một cái gì đó như ‘% JRR% Tolkien%’ đối với một bảng lớn như vậy có thể sẽ thích sử dụng quét chỉ mục thay vì quét bảng. Cả hai chỉ mục đều cần 533MB đĩa để tạo. Và, chắc chắn, SQL Server đã sử dụng các chỉ mục này ngay khi chúng xuất hiện, nhưng nó chỉ cắt giảm khoảng 1/4 của những gì họ sử dụng, và vẫn giữ CPU sử dụng về nơi mà nó đã có trước đó – có nghĩa là bạn có thể vẫn SEE các truy vấn này đang được thực hiện bởi gai CPU nói của họ.

Nhập Nhập Toàn Văn bản
Tôi đã tìm ra rằng kể từ khi Full Text Indexing thực sự tokenizes dữ liệu chỉ mục, thay vì chỉ lưu trữ nó trong một B-Tree, rằng chúng ta sẽ kết thúc với một cấu trúc chỉ số nhỏ hơn nhiều. Tôi cũng hy vọng, nếu chúng ta có thể có được một chỉ mục nhỏ hơn để làm việc, chúng ta sẽ thấy một sự giảm đáng kể trong số lần đọc / churn đang diễn ra trên máy chủ.

Tạo một Đầy đủ Văn bản Chỉ mục trên 8M + hàng đã một công bằng trong khi. Nhưng tôi rất vui khi thấy nó chỉ có 133MB (so với 533MB của các chỉ số ‘truyền thống’). Điều đó làm tôi hy vọng rằng ít nhất chúng ta sẽ thấy khoảng một phần 4 giảm số lần đọc.

Hóa ra tôi đã nhiều hơn tôi đã lường trước. Kế hoạch thực hiện thực tế cho truy vấn sử dụng LIKE và% đã đến với chi phí khoảng 27 hoặc 28 trên cơ sở phù hợp. Nó cũng mất 5-7 giây cho mỗi truy vấn. (Vâng, điều đó đặt nó gần như vào lĩnh vực làm cho nó trở thành một ‘truy vấn từ địa ngục’ – nhưng chắc chắn là một cái gì đó bạn không muốn mọi người chỉ bắn ra theo kiểu “ad-hoc” giống như họ thực sự CẦN làm với truy vấn này trong câu hỏi.)

Với chỉ mục văn bản đầy đủ, kế hoạch thực hiện thực tế giảm xuống 0,27 – làm cho nó nhanh hơn 100 lần so với đối tác truyền thống. Thời gian thực hiện cũng giảm xuống còn 0 giây (trong Management Studio). Trong các trường hợp trước đây, nơi tôi đã sử dụng Đánh chỉ mục văn bản đầy đủ, tôi chỉ làm việc với một bảng với ít hơn 300K hàng. Chỉ cần nói rằng tôi đã được khá tickled tại tăng hiệu suất điên cung cấp trên một bảng hàng 8M với tên miền bán rộng (tác giả và tiêu đề) được lập chỉ mục.

Vì vậy, giữ cho những hiệu suất điên về những lợi ích trong tâm trí trong thời gian tới bạn đang bị cám dỗ để được một chút dismissive của ‘trên không’ mà toàn văn chỉ mục có thể thêm vào môi trường của bạn.

Recent Posts

Recent Comments

    Archives

    Categories

    Meta