Cơ sở dữ liệu với nhiều tệp .mdf


10

Tôi đã tìm kiếm trực tuyến nhưng không tìm thấy những gì tôi đang tìm kiếm.

Vấn đề / truy vấn là theo hiểu biết của tôi, một cơ sở dữ liệu trong SQL Server sẽ có tệp One .mdf và có thể một số tệp .ndf và tệp One .log.

Tôi đã thấy nhiều cơ sở dữ liệu với một tệp mdf và nhiều tệp ndf. Nhưng gần đây tôi đã bắt gặp một số cơ sở dữ liệu trên một máy chủ nơi mọi cơ sở dữ liệu có nhiều tệp mdf.

Tôi đã sao lưu một số cơ sở dữ liệu đã chuyển chúng sang một máy chủ khác và khôi phục tệp Chính là .mdf và tất cả các tệp khác dưới dạng .ndf rõ ràng ngoại trừ tệp nhật ký được khôi phục dưới dạng .log.

Bây giờ câu hỏi của tôi là:

  1. Có sự khôn ngoan nào trong việc có nhiều tệp .mdf cho cơ sở dữ liệu không?
  2. Có bất kỳ nhược điểm nào của việc có nhiều tệp .mdf không?

Đó là SQL Server 2008 R2 64bit Enterprise Edition

Bất kỳ lời khuyên hoặc con trỏ đi đúng hướng được nhiều đánh giá cao. Cảm ơn bạn.

Câu trả lời:


14

Nhưng gần đây tôi đã bắt gặp một số cơ sở dữ liệu trên một máy chủ nơi mọi cơ sở dữ liệu có nhiều tệp mdf.

Đó là vì quy ước đặt tên không chính xác. Microsoft nói rằng mọi cơ sở dữ liệu đều có một tệp dữ liệu chính nhưng điều đó không có nghĩa là nó chỉ có một "tệp dữ liệu mdf", cơ sở dữ liệu có thể có nhiều tệp dữ liệu có .mdfphần mở rộng nhưng chỉ có một tệp sẽ là tệp dữ liệu chính. Tốt hơn là cung cấp mdfphần mở rộng cho tệp dữ liệu chính và tệp dữ liệu ndfthứ cấp để có ranh giới thích hợp nhưng đây không phải là quy tắc khó và nhanh, bạn cũng có thể cung cấp phần mở rộng .abc cho tệp dữ liệu chính để những gì bạn chứng kiến ​​là bình thường. Như một thực tế, bạn có thể cung cấp bất kỳ phần mở rộng nào bạn muốn.

Có sự khôn ngoan nào trong việc có nhiều tệp .mdf cho cơ sở dữ liệu không?

Nếu bạn có nghĩa là:

Có sự khôn ngoan nào trong việc có nhiều tệp chính cho cơ sở dữ liệu không?

Câu trả lời là không, một cơ sở dữ liệu có thể chỉ có một tệp dữ liệu chính.

Nhưng nếu bạn có ý:

Có sự khôn ngoan nào trong việc có nhiều tệp dữ liệu (.mdf, .ndf hoặc được đặt tên khác) cho cơ sở dữ liệu không?

Nó phụ thuộc, bạn có thể và không thể có lợi thế với nhiều tệp dữ liệu. Nếu chúng được trải rộng trên các ổ đĩa vật lý khác nhau (tôi đang nói về các trục chính), bạn sẽ thấy một số lợi thế với ứng dụng viết chuyên sâu. Nếu tất cả chúng đều nằm trên cùng một phân vùng logic thì sẽ không có lợi thế nào vì bên dưới chúng sẽ sử dụng tài nguyên chung. Sử dụng tệp và nhóm tệp cải thiện hiệu suất cơ sở dữ liệu, vì nó cho phép cơ sở dữ liệu được tạo trên nhiều đĩa, nhiều bộ điều khiển đĩa hoặc hệ thống RAID (mảng dự phòng của các đĩa độc lập). Ví dụ: nếu máy tính của bạn có bốn đĩa, bạn có thể tạo cơ sở dữ liệu gồm ba tệp dữ liệu và một tệp nhật ký, với một tệp trên mỗi đĩa. Khi dữ liệu được truy cập, bốn đầu đọc / ghi có thể truy cập dữ liệu song song cùng một lúc.

Theo bài viết BOL MSDN này

Filegroups sử dụng chiến lược điền tỷ lệ trên tất cả các tệp trong mỗi filegroup. Khi dữ liệu được ghi vào nhóm fileg, SQL Server Database Engine ghi một lượng tỷ lệ với không gian trống trong tệp cho mỗi tệp trong filegroup, thay vì ghi tất cả dữ liệu vào tệp đầu tiên cho đến khi đầy. Sau đó nó ghi vào tập tin tiếp theo. Ví dụ: nếu tệp F1 có 100 MB miễn phí và tệp f2 có 200 MB miễn phí, một phạm vi được phân bổ từ tệp F1, hai phạm vi từ tệp f2, v.v. Theo cách này, cả hai tệp trở nên đầy đủ cùng một lúc và đạt được sự phân chia đơn giản.

Ưu điểm khác mà tôi biết là xem xét cơ sở dữ liệu 1 TB nếu bạn có tệp dữ liệu duy nhất cho nó và bạn muốn khôi phục cơ sở dữ liệu này trên một số máy chủ khác, rất có thể bạn sẽ có 1 TB không gian trống. Bây giờ nếu cùng một cơ sở dữ liệu được trải rộng trên các tệp khác nhau, mỗi tệp có kích thước 250 G, việc khôi phục sẽ trở nên dễ dàng hơn. Đây có thể không thực sự là kịch bản của bạn nhưng nó giúp bạn dễ dàng tìm thấy một máy chủ có bốn ổ 250 G hơn một ổ 1 TB

Tôi muốn nói thay vì nhiều tệp dữ liệu tốt hơn là có các nhóm tệp khác nhau nhưng một lần nữa không có nhiều môi trường. Cơ sở dữ liệu được tạo thành từ nhiều nhóm fileg có thể được khôi phục theo các giai đoạn bằng một quá trình được gọi là khôi phục từng phần. Khôi phục Piecemeal hoạt động với tất cả các mô hình khôi phục, nhưng linh hoạt hơn cho các mô hình được đăng nhập đầy đủ và hàng loạt so với chế độ đơn giản. Các tệp hoặc nhóm tệp trong cơ sở dữ liệu có thể được sao lưu và khôi phục riêng lẻ. Điều này cho phép bạn chỉ khôi phục các tệp bị hỏng mà không phải khôi phục phần còn lại của cơ sở dữ liệu. Các tệp trong bản sao lưu filegroup có thể được khôi phục riêng lẻ hoặc theo nhóm


Nếu DB có nhiều hơn một tệp dữ liệu tệp tức là ndf và chính tức là vẫn mặc định. Với điều này nếu một trong các tệp DB được sử dụng để tạo các bảng / chỉ mục trên đó, nó có tạo ra bất kỳ hiệu suất nào trên đầu không? Ý tôi là nhóm tệp mặc định vẫn là chính nhưng bảng được tạo và các chỉ mục nằm trên tệp dữ liệu.
Hi10
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.