Điểm:0

SQL Server - Làm cách nào để chia một tệp mdf thành nhiều và dữ liệu bảng phân vùng trên chúng?

lá cờ pl

Với hy vọng cải thiện hiệu suất của SQL Server, tôi muốn lấy cơ sở dữ liệu 1 tệp (1 mdf & 1 ldf) đơn giản của mình và chia các tệp mdf (và có thể là các tệp ldf) trên nhiều ổ đĩa. Tôi nghĩ rằng cách hiệu quả nhất để thực hiện việc này là phân vùng các bảng lớn trên nhiều tệp mdf đó. (Tôi dự định chỉ sử dụng một hàm phân vùng là mô đun của khóa chính (là int hoặc bigint), như (MyTable.Id % 8), trong đó 8 là số đĩa tôi có).

Cách nhanh nhất/tốt nhất/chính xác để làm điều này là gì? Giống như, tôi cần thực hiện các lệnh SQL hoặc thao tác SSMS nào để đưa tôi từ vị trí hiện tại đến nơi tôi muốn đến.

Bất kỳ đề xuất nào khác cũng sẽ được đánh giá cao. (Kết hợp các ổ đĩa qua Dung lượng lưu trữ không giống như một tùy chọn, bởi vì, vì lý do nào đó, tôi không nhận được hiệu suất ghi IOPS tốt khi tôi làm điều đó.)

Điểm:1
lá cờ cn

Bạn không cần phải phân vùng (nhưng có thể nếu bạn có lý do khác). Nếu bạn tạo một nhóm tệp mới chứa các tệp vật lý mà bạn muốn và xây dựng lại chỉ mục trên nhóm tệp mới, điều đó là đủ để trải rộng dữ liệu trên các tệp vật lý đó.

Quá trình xây dựng lại sẽ giống như thế này. Giả sử chỉ mục hiện tại có định nghĩa sau:

tạo chỉ mục nhóm [CIX_foo] trên dbo.foo (FooID) trên [PRIMARY];

Bạn có thể xây dựng lại nó như thế này:

tạo chỉ mục nhóm [CIX_foo] trên dbo.foo (FooID) với (drop_current = on) trên [NewFileGroup];

Sử dụng bất kỳ tùy chọn nào khác mà bạn thường sử dụng để tạo chỉ mục đó (ví dụ: sort_in_tempdb, pad_index, trực tuyến, có thể tiếp tục lại, v.v.).Ngoài ra, hãy xem xét liệu việc thay đổi cài đặt nén của chỉ mục hiện tại có hợp lý hay không - bạn đang viết lại toàn bộ chỉ mục nên bây giờ sẽ là lúc!

Cuối cùng, theo khuyến nghị, tôi nên tạo ít nhất hai tệp trên mỗi ổ đĩa trong nhóm tệp mới. Tại sao? Nếu SWAG gồm 8 tệp (và có lẽ là 8 ổ đĩa) không đủ cho trường hợp sử dụng của bạn, bạn sẽ phải thực hiện lại quy trình xây dựng lại chỉ mục ở trên. Nhưng nếu bạn làm như vậy, giả sử hai tệp trên mỗi ổ đĩa (tổng cộng là mười sáu), bạn có thể cung cấp bộ lưu trữ mới và chỉ thực hiện sao chép tệp hệ thống tệp (trong khi db đang ngoại tuyến) hoặc khôi phục chỉ định vị trí mới. Một trong hai cách đó sẽ nhanh hơn việc xây dựng lại các chỉ mục.

N73k avatar
lá cờ pl
Cảm ơn Ben. Câu hỏi 1: Làm cách nào để SQL Server biết được bản ghi đã cho nằm trong tệp nào? Câu hỏi 2: Có một số lợi thế về tốc độ khi sử dụng chức năng phân vùng như tôi đã nói trong câu hỏi ban đầu của mình không? Câu hỏi 3: Tôi đoán rằng nếu tôi muốn di chuyển các chỉ mục (chứ không chỉ các bảng) sang nhóm tệp mới đó (và trải rộng dữ liệu trên các tệp), tôi phải thực hiện cùng một loại lệnh cho từng chỉ mục.
Ben Thul avatar
lá cờ cn
1. Hơi vượt quá phạm vi câu hỏi. Tức là có kiến ​​thức đó giúp bạn giải quyết vấn đề gì? 2. Phân vùng trong mssql là giải pháp quản lý dữ liệu nhiều hơn là hiệu suất. Nó cho phép bạn hoán đổi dữ liệu vào/ra khỏi bảng dưới dạng thao tác siêu dữ liệu. Trường hợp cổ điển đang tải một DW trong đó bạn ETL dữ liệu có giá trị trong một ngày vào bảng phân tầng và sau đó trao đổi dữ liệu đó khi bạn hoàn thành. 3. Có - mọi đống hoặc cây B đều tồn tại trên một không gian dữ liệu. Nhóm tệp là một loại không gian dữ liệu (loại còn lại là lược đồ phân vùng). Bất kỳ chỉ mục nào bạn muốn trong FG mới của mình sẽ cần được di chuyển một cách rõ ràng.
N73k avatar
lá cờ pl
Đối với Q1: Tôi quan tâm đến hiệu suất. Vì vậy, nếu SQL Server muốn nâng cấp một số bản ghi, nó sẽ phải kiểm tra mọi ổ đĩa để xem các bản ghi đó ở đâu hoặc nên ở đâu, hoặc nó có cách nào để biết nhanh (ngay cả khi không có chức năng phân vùng) dữ liệu đó ở đâu (hoặc nên đi) để chỉ có 1 đĩa được truy cập?
Ben Thul avatar
lá cờ cn
Nói một cách đại khái, dữ liệu sẽ được trải đều trên tất cả các tệp trong FG. Giải quyết mối quan tâm của bạn, SQL không phân tán/thu thập để định vị dữ liệu mà thay vào đó điều hướng cây B để định vị các trang dữ liệu thích hợp (và theo phần mở rộng, các tệp chứa các trang đó).
N73k avatar
lá cờ pl
Chà Ben, đã lâu rồi mà bạn vẫn chưa có vàng. Nhưng không còn nữa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.