Hai chỉ mục bị hỏng được tìm thấy bởi DBCC CheckTable


7

Tôi tự hỏi nếu vấn đề này có thể giải quyết được bằng cách bỏ / tạo lại hai chỉ mục. Cả hai đều hiếm khi được sử dụng, không bao gồm, không PK, không chỉ mục FK.

Đây là đầu ra dbcc:

Lỗi bảng: bảng 'Mục' (ID 1954106002). Hàng dữ liệu không có hàng chỉ mục phù hợp trong chỉ mục 'IX_Ad Advertising_BrandCopy_Price_Stock' (ID 69). Các khóa bị thiếu hoặc không hợp lệ có thể phù hợp với hàng chỉ mục:

Msg 8955, Cấp 16, Bang 1, Dòng 1

Hàng dữ liệu (1: 11226494: 9) được xác định bởi (Id = 11078215) với các giá trị chỉ mục 'Ad AdvertisingFlag = 1 và BrandCopyParentId = 0 và NSFPprice = 137.50 và NSFPQtyInStock = 0 và Id = 11078215'.

Msg 8951, Cấp 16, Bang 1, Dòng 1

Lỗi bảng: bảng 'Mục' (ID 1954106002). Hàng dữ liệu không có hàng chỉ mục phù hợp trong chỉ mục 'IX_ITEMS_ADVFLAG_PARETN_PRICE_STOCK' (ID 70). Các khóa bị thiếu hoặc không hợp lệ có thể phù hợp với hàng chỉ mục:

Msg 8955, Cấp 16, Bang 1, Dòng 1

Hàng dữ liệu (1: 10834009: 15) được xác định bởi (Id = 8885719) với các giá trị chỉ mục 'Ad AdvertisingFlag = 1 và BrandCopyParentId = 0 và NSFPprice = 9.30 và NSFPQtyInStock = 0 và Id = 8885719'.

Câu trả lời:


5

Các chỉ mục không được phân cụm luôn có thể được tạo lại từ bảng cơ sở. Không cần phải thả chúng chỉ cần xây dựng lại m:

alter index IX_Advertise_BrandCopy_Price_Stock on BrandCopy rebuild;

Tất nhiên, bạn phải tìm ra làm thế nào mà họ cuối cùng bị hỏng. Windows có báo cáo lỗi IO không? Phần mềm điều khiển ổ đĩa của bạn có báo cáo lỗi không? Bạn cần điều tra để tìm ra nguyên nhân gây ra lỗi và loại bỏ sự cố (có thể là lỗi phần cứng, đĩa hoặc bộ nhớ).


2
Theo kinh nghiệm (hạn chế) của tôi với tham nhũng, tôi luôn phải bỏ và tạo lại các chỉ mục không bao gồm, vì kế hoạch xây dựng lại sử dụng quét chỉ mục (của chỉ mục bị hỏng) vì rẻ hơn quét bảng cơ sở - tham nhũng luôn luôn vẫn còn mỗi lần tôi thử cái này
Jon Seigel

Có vấn đề trở lại ngay sau đó. Tôi có những người quản lý hệ thống của chúng tôi đang chạy chẩn đoán trên phần cứng bị lỗi (có thể), vé mở với Nhà cung cấp IO và, chỉ trong trường hợp, một vé với Microsoft.
Aushin

2
@JonSeigel: vâng, bạn đúng. Rebuild sẽ sử dụng cùng một chỉ mục như nguồn và sẽ giữ tham nhũng, vì đây là vấn đề chính. Aushin, hãy thử thả và tạo ...
Remus Rusanu

3

Tôi sẽ sao lưu db, sau đó thả và tạo lại các chỉ mục bị hỏng đó. Sau đó chạy cùng một dbcc theo định kỳ để kiểm tra vấn đề.


Điều này nghe có vẻ hợp lý, nhưng tôi thích nó hơn nếu bạn không sử dụng2154687. Có bất kỳ rủi ro cho việc giảm và giải trí của các chỉ số tham nhũng? Tôi muốn không phải thực hiện khôi phục đầy đủ.
Aushin

Vì chúng không được phân cụm, theo kinh nghiệm của tôi, chúng thiên về tốc độ sau đó là tính toàn vẹn của bảng. Vấn đề duy nhất với việc tạo lại các chỉ mục không được nhóm, là tốc độ của (các) ứng dụng của bạn trong khi tạo lại chúng. Kích thước của các bảng xác định sẽ mất bao lâu để tạo lại chúng; ngoài ra nếu ứng dụng / người dùng của bạn đang đặt khóa trên các bảng (chèn / cập nhật) trong khi bạn đang thực hiện reindex. Đôi khi sau giờ là thời gian tốt nhất.
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.