2009-08-25 4 views
7

Gần đây tôi đã tiếp nhận một dự án và họ có một thiết lập công việc SQL để chạy ba giờ một lần để xây dựng lại các chỉ mục được tìm thấy trong các bảng cơ sở dữ liệu thành viên ASP.NET.SQL Server 2005 - Bạn nên xây dựng lại các chỉ mục bao lâu một lần?

Điều này có vẻ khá cao, để xây dựng lại các chỉ mục 8 lần một ngày. Tôi có khoảng 2000 người dùng mới mỗi ngày và tổng cộng khoảng 2 triệu người dùng đã đăng ký.

Bạn sẽ đề xuất gì cho lịch biểu dựng lại chỉ mục phù hợp?

Trả lời

11

Nguy cơ chết chắc chắn có thể liên quan đến việc xây dựng lại các chỉ mục. Cũng không có nghi ngờ rằng những chỉ mục đó không cần phải được xây dựng lại thường xuyên. Ở mức tối thiểu mặc dù bạn nên cân nhắc sử dụng tùy chọn ONLINE nếu bạn có thể giữ cho chỉ mục bị xóa trước khi được xây dựng lại.

Dưới đây là một hướng dẫn chúng tôi sử dụng:

Index nên được xây dựng lại khi chỉ số phân mảnh lớn hơn 40%. Chỉ mục cần được tổ chức lại khi chỉ mục phân mảnh là từ 10% đến 40%. Quá trình xây dựng lại chỉ mục sử dụng nhiều CPU và nó khóa tài nguyên cơ sở dữ liệu. Phiên bản phát triển SQL Server và Phiên bản doanh nghiệp có tùy chọn TRỰC TUYẾN, có thể được bật khi chỉ mục là được xây dựng lại. Tùy chọn TRỰC TUYẾN sẽ giữ chỉ mục khả dụng trong quá trình xây dựng lại.

Nguồn: http://blog.sqlauthority.com/2007/12/22/sql-server-difference-between-index-rebuild-and-index-reorganize-explained-with-t-sql-script/

0

Việc xây dựng lại có làm tổn hại đến sự ổn định của hệ thống hoặc mất quá nhiều thời gian của hệ thống không?

Nếu bạn trả lời không - đừng chạm vào nó :)

+0

Nó không xuất hiện, nhưng tôi làm được một vài vấn đề deadlocking suốt cả ngày liên quan đến đăng ký người dùng mới. Tôi đã tự hỏi nếu điều này đã xảy ra do chỉ số xây dựng lại. –

+0

tùy thuộc vào việc bạn đang thực hiện xây dựng lại trực tuyến hay ngoại tuyến. Nếu ngoại tuyến của nó thì có nó có thể gây ra deadlocks vì nó đặt một khóa đọc trên chỉ mục. Nếu trực tuyến của nó, nó chỉ đặt một khóa lược đồ trên chỉ mục. –

3

Capture đồ thị bế tắc và bạn có một câu trả lời thực tế về những gì đang deadlocking, như trái ngược với một đoán. Cho rằng bế tắc là (hoặc ít nhất phải là) một sự xuất hiện khá hiếm (dưới 10/giây) bạn khá có thể đính kèm hồ sơ trong một thời gian dài và nắm bắt chỉ sự kiện Locks/Deadlock Graph.

6

Nguyên tắc chung là REBUILD khi bị phân mảnh quá 30%, REORGANIZE khi nằm trong khoảng từ 10% đến 30%.

Đừng bận tâm với một trong hai bảng dưới 1000 trang, bạn sẽ không nhận thấy, và thậm chí sau khi chạy REBUILD với tỷ lệ trên 30%, nó thường được để ở mức 30%.

Có lẽ bạn nên nhắm mục tiêu xây dựng lại/tổ chức lại khá thường xuyên, hàng tuần nhiều nhất cho một cơ sở dữ liệu trung bình. Nếu bạn phải chống phân mảnh các chỉ mục thường xuyên hơn thì bạn có thể cần phải xem xét lại các yếu tố điền và phần đệm của bạn.

Một ngoại lệ là sau khi tải dữ liệu hàng loạt, nơi có thể chia nhỏ chỉ mục (đôi khi tốt hơn là tắt chỉ mục hoặc thả chỉ mục và xây dựng lại hoặc tùy thuộc vào dữ liệu đang được tải).

Vì vậy, tóm lại, 8 lần một ngày dường như quá mức.

Tài liệu tham khảo:
http://technet.microsoft.com/en-us/library/ms189858.aspx
http://www.sqlmusings.com/2009/03/15/a-more-effective-selective-index-rebuildreorganize-strategy/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/