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ó .mdf
phầ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 mdf
phần mở rộng cho tệp dữ liệu chính và tệp dữ liệu ndf
thứ 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