Tôi đang làm việc về lập chỉ mục và phân vùng một bảng kho dữ liệu duy nhất nặng khoảng 500 GB. Bảng là một đống, có hơn một trăm TEXT
cột và TEXT_IN_ROW
tùy chọn được bật. Tôi đã không thiết kế bảng này và tôi không có khả năng thay đổi nó trước mắt.
Tôi đã được giao nhiệm vụ phân vùng nó. Chúng tôi đang giải quyết vấn đề này bằng cách sử dụng một bản sao của cơ sở dữ liệu trên máy chủ thử nghiệm. Nó có thể đẩy khoảng 2 GB mỗi giây vào các mảng RAID SSD, vì vậy I / O không phải là một nút cổ chai đáng kể và nó có 16 lõi (2 nút NUMA) và RAM 64 GB.
Cách tiếp cận của tôi là vô hiệu hóa tất cả các chỉ mục không bao gồm, tạo chức năng phân vùng và sơ đồ phân vùng (khoảng 12 phân vùng, tất cả trên PRIMARY
filegroup - họ đang sử dụng điều này để cho phép bảo trì cuộn và cung cấp thêm các phần chèn cục bộ cho ETL hàng đêm và không phân phối I / O), sau đó xây dựng một chỉ mục được nhóm cho bảng bằng cách sử dụng sơ đồ phân vùng này.
Tôi đang tạo chỉ mục cụm và phân vùng bảng như sau:
CREATE CLUSTERED INDEX CX_DailyTable ON DailyTable (LoadDate, SeqNumber)
WITH (SORT_IN_TEMPDB = ON) ON monthly_on_primary (LoadDate)
Rõ ràng, nó đã mất một thời gian dài (3 giờ cho đến khi đăng bài này), và tôi chắc chắn không mong đợi nó sẽ nhanh chóng. Điều làm tôi lo lắng một chút là tempdb hiện đang đẩy gần 1 TB và tăng đều đặn, mặc dù bảng hiện tại có kích thước khoảng một nửa. Các tài liệu MS mà tôi đã đọc đề xuất việc sử dụng không gian tempdb nên có kích thước của bảng / chỉ mục cụm cuối cùng.
http://msdn.microsoft.com/en-us/l Library / ms188281.aspx
Nếu SORT_IN_TEMPDB được đặt thành BẬT, thì phải có đủ không gian trống trong tempdb để lưu trữ các lần chạy sắp xếp và đủ không gian trống trong nhóm tệp đích để lưu trữ cấu trúc chỉ mục cuối cùng. Các loại sắp xếp chứa các hàng lá của chỉ mục.
Là ước tính của họ không chính xác? Là tempdb đang được sử dụng cho nhiều hơn là chỉ chạy sắp xếp? Hoặc là tạo ra chỉ số cụm này bằng cách nào đó tăng gấp đôi kích thước của bảng? (Có vẻ khá khó xảy ra; đó là một bảng khá rộng và tôi ước tính chúng tôi sẽ nhận thêm 4-8 byte mỗi hàng, cộng với các trang không có lá bằng cách thêm một chỉ mục được nhóm.)
tempdb
khóc, chưa kể đến việc chia trang trên trang chèn tiếp theo