Có bất kỳ lợi ích nào để chống phân mảnh các chỉ mục SQL trong môi trường SAN không?


16

Máy chủ SQL của chúng tôi sống trên SAN. Nó chứa hàng tá cơ sở dữ liệu OLTP, một số bảng có chứa hơn 1m bản ghi.

Chúng tôi đã chạy các kịch bản bảo trì chỉ mục của Ola Hallengren hàng tuần và nó chạy trong vài giờ mỗi lần. Dựa trên ngưỡng phân mảnh, tập lệnh sẽ sắp xếp lại hoặc giới thiệu lại một chỉ mục. Chúng tôi đã quan sát thấy rằng trong quá trình reindexing, các tệp nhật ký trở nên rất lớn dẫn đến việc tiêu thụ quá nhiều băng thông trong quá trình vận chuyển nhật ký.

Sau đó, xuất hiện một bài viết từ Brent Ozar, trong đó ông nói hãy ngừng lo lắng về các chỉ mục SQL :

Ổ đĩa cứng của bạn được chia sẻ với các máy chủ khác cũng đang thực hiện các yêu cầu ổ đĩa cùng một lúc, vì vậy các ổ đĩa sẽ luôn luôn nhảy khắp nơi để lấy dữ liệu. Chống phân mảnh chỉ số của bạn chỉ là công việc bận rộn vô nghĩa.

Googling câu hỏi này dẫn đến các ý kiến ​​khác nhau, hầu hết được hỗ trợ với các đối số có vẻ quá ngắn hoặc yếu. Kế hoạch dự kiến ​​của chúng tôi là điều chỉnh ngưỡng phân mảnh trong tập lệnh bảo trì của chúng tôi để nó được tổ chức lại thường xuyên hơn nhiều so với việc giới thiệu lại.

Phán quyết cuối cùng là gì? Có đáng để chống phân mảnh các chỉ mục SQL trên SAN khi xem xét các gánh nặng liên quan đến việc chạy các công việc bảo trì hàng tuần không?

Câu trả lời:


10

Chiến lược chống phân mảnh giúp cải thiện tốc độ quét đến / từ đĩa .

Sự đa dạng của các ý kiến ​​là bởi vì chiến lược phân mảnh lý tưởng của một môi trường nên phụ thuộc vào nhiều yếu tố khác nhau. Ngoài ra còn có nhiều lớp phân mảnh tiềm năng trong chơi.

Nói rằng cơ sở dữ liệu của bạn được lưu trữ trên SAN không đủ thông tin. Ví dụ:

  • Các tệp cơ sở dữ liệu được lưu trữ trên các nhóm RAID vật lý riêng biệt hoặc cùng một nhóm RAID? Những quá trình khác đang hoạt động trên cùng một thiết bị? Các tập tin sao lưu của bạn cũng kết thúc ở đó? Bạn có thể phải hỏi quản trị viên SAN về thông tin này, vì nó không phải lúc nào cũng minh bạch.

  • Các mẫu truy cập cho cơ sở dữ liệu là gì? OLTP thường là truy cập ngẫu nhiên, nhưng đôi khi một ứng dụng quét bảng hạnh phúc và bạn không thể thay đổi hành vi của nó (ứng dụng ISV). Các ứng dụng đã đọc - chủ yếu, viết - chủ yếu hay ở đâu đó ở giữa?

  • SLA hiệu suất đang chơi trong giai đoạn phục hồi / chuyển đổi dự phòng không?

Bài đăng của Brent cho rằng có một kho lưu trữ khổng lồ và mọi thứ đều chia sẻ nó. Điều này có nghĩa là các đĩa vật lý hiếm khi không hoạt động, và do đó hầu hết truy cập là ngẫu nhiên. Nếu đó là tình huống của bạn, thì lời khuyên được áp dụng, và tôi đồng ý với nó cho hầu hết các phần. Mặc dù loại chiến lược này dễ quản lý hơn nhiều, nhưng nó không nhất thiết (a) những gì bạn có trong môi trường của bạn, hoặc (b) đâu là giải pháp tốt nhất cho môi trường của bạn.

Nếu bảo trì chỉ số là gánh nặng, hãy cân nhắc thực hiện nó ít mạnh mẽ hơn và / hoặc khấu hao chi phí trong tuần (nghĩa là chạy bảo trì nhẹ một lần / ngày, thay vì bảo trì nặng một lần / tuần).

Bạn cũng có thể bật SortInTempdbtùy chọn để có khả năng giảm số lượng ghi nhật ký diễn ra trong cơ sở dữ liệu người dùng.


Wow, trả lời thấu đáo. Có lẽ tôi sẽ mất một chút thời gian để thực hiện tất cả các nghiên cứu, nhưng tôi không nghi ngờ rằng bạn đang dẫn dắt tôi đi đúng hướng. Chiến lược hiện tại của chúng tôi trên thực tế là vận hành bảo trì ít tích cực hơn từ cả quan điểm xây dựng lại và tái lập, tôi nghĩ rằng tôi đã đánh giá sai điều đó trong câu hỏi. Từ đó tôi sẽ nghiên cứu thêm về các yếu tố còn lại mà bạn đề cập.
dev_etter

1
@dev_etter: Tôi chỉ liệt kê một vài yếu tố; Chúng còn nhiều nữa. Điểm chính là câu đầu tiên. Nếu bạn ghi nhớ điều đó khi suy nghĩ về môi trường của mình, nó sẽ định hướng chính xác quyết định của bạn. Mọi thứ bắt nguồn từ đó. (Ngoài ra, tất cả điều này giả định rằng không có SSD nào được tham gia.)
Jon Seigel

FWIW, tôi đã bỏ qua một cái gì đó hoàn toàn - tập lệnh thực tế trong bước công việc (chứ không phải nguồn) được định cấu hình để giải quyết mọi chỉ số có tỷ lệ phân mảnh tối thiểu là 1. Tôi đã tăng đến 15 và cũng vượt ngưỡng xây dựng lại từ 30 đến 35. Công việc bây giờ chạy trong ít hơn 3 giờ thay vì 8. Đề xuất của bạn để ít tích cực hơn là chính xác. Lỗi của tôi đã nói dối trong thực tế rằng tôi nghĩ rằng công việc đã được thực hiện để ít tích cực hơn. Cách tiếp cận này có lẽ là tốt nhất cho chúng ta, vẫn chạm và đi nhưng nó đã giảm bớt một số nỗi đau.
dev_etter

@JonSeigel Tôi hoàn toàn đồng ý với câu trả lời này. Trong các chuyến đi của mình, tôi thấy hầu hết các DBA chia sẻ một nhóm hoặc ít nhất là một mảng ở cùng cấp RAID. Tôi đã có các DBA lên đến 3 giờ sáng 24x7 chỉ để chống phân mảnh các nhóm cơ sở dữ liệu 100+ TB ... và chính xác là gì? Chúng tôi có IO hoàn toàn ngẫu nhiên tại các đĩa và độ trễ là 15ms. Tại thời điểm đó tôi chỉ nên chỉ đến 15ms và nói với các nhà phát triển hãy để tôi yên.
ooutwire

2

Tốt nhất, bạn nên tổ chức lại / giới thiệu lại CHỈ cho những chỉ mục cần chú ý, nếu không, bạn đang lãng phí tài nguyên và có khả năng gây ra các vấn đề khác.

Bạn cần thiết lập đường cơ sở hiệu suất và bất cứ khi nào bạn thực hiện thay đổi so sánh thay đổi hiệu suất với đường cơ sở để xác định xem thay đổi của bạn có đáng để thực hiện hay không.


Chiến lược trước mắt của chúng tôi là làm điều đó - chúng tôi sẽ điều chỉnh các cài đặt cho các biến minFragmented và xây dựng lại. Các ngưỡng trong tập lệnh này: sqlfool.com/2011/06/index-defrag-script-v4-1
dev_etter

0

Được rồi, câu hỏi là về Cơ sở dữ liệu Chỉ mục, đó là cấu trúc của một tệp hoặc tập hợp các tệp. Đọc các câu trả lời ở trên sẽ khiến một người tin rằng chúng ta đang nói về sự phân mảnh ở cấp độ đĩa chứ không phải các chỉ mục bên trong tệp. Những môn học hoàn toàn riêng biệt.

Cách tiếp cận cận thị ở đây sẽ là hiệu suất khi truy xuất dữ liệu bên trong và Cơ sở dữ liệu OLTP cải thiện nếu các Chỉ mục bị phân mảnh hoặc Tái tạo. Câu trả lời là CÓ! Tuy nhiên, điều quan trọng cần lưu ý là sự phân mảnh đĩa cũng là một yếu tố.

"Chi phí" thấp nhất nói chung? Bảo trì cơ sở dữ liệu của bạn. Chi phí thấp thứ hai, tách cơ sở dữ liệu, di chuyển nó sang một nơi khác, định dạng lại các đĩa của bạn và làm theo các thực tiễn tốt nhất cho Sắp xếp phân vùng đĩa http://msdn.microsoft.com/en-us/l Library / dd758814.aspx . Cuối cùng nhưng không kém phần quan trọng, hãy sử dụng trình chống phân mảnh nâng cao của bên thứ 3 như Diskkeeper.

Xin lưu ý, điều này CHỈ được khuyến nghị cho lưu trữ loại NTFS (ví dụ: HĐH Windows) và đây không phải là sự chứng thực cho bất kỳ sản phẩm nào cũng như tôi không liên kết với Condusiv Technologies hoặc các công ty con.


2
Bạn có thể muốn tránh nói một cách cụ thể "Câu trả lời là CÓ!" đến các không gian vấn đề đã được thảo luận ở độ dài bởi các áp phích khác. Mặc dù có thể đúng là đôi khi câu trả lời là "Có", như Brent Ozar đã thể hiện trong bài đăng trên blog của mình, điều đó không phải lúc nào cũng đúng.
Max Vernon
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.