Cơ sở dữ liệu của chúng tôi hiện chỉ có một Filegroup, PRIMARY, chứa khoảng 8GB dữ liệu (hàng bảng, chỉ mục, danh mục toàn văn).
Khi nào là thời điểm tốt để chia phần này thành các tệp dữ liệu thứ cấp? Một số tiêu chí mà tôi nên nhận thức là gì?
Cơ sở dữ liệu của chúng tôi hiện chỉ có một Filegroup, PRIMARY, chứa khoảng 8GB dữ liệu (hàng bảng, chỉ mục, danh mục toàn văn).
Khi nào là thời điểm tốt để chia phần này thành các tệp dữ liệu thứ cấp? Một số tiêu chí mà tôi nên nhận thức là gì?
Câu trả lời:
Có hai phần cho câu hỏi này: khi nào cần thêm một tệp PHIM mới và khi nào cần thêm một TẬP TIN mới trong một nhóm fileg. Đầu tiên hãy nói lý thuyết:
Đánh dấu đúng về lý do chính là hiệu suất.
Lý do thứ hai là khắc phục thảm họa. Với SQL Server 2005 trở lên, bạn có thể khôi phục filegroup. Khi thảm họa xảy ra, trước tiên bạn có thể khôi phục nhóm chính của mình và đưa cơ sở dữ liệu trực tuyến một phần cho các truy vấn. Người dùng có thể chạy truy vấn trong khi bạn khôi phục các nhóm khác. Điều này hữu ích cho các cơ sở dữ liệu có số lượng lớn dữ liệu lịch sử có thể không được yêu cầu ngay lập tức hoặc kho dữ liệu cần tải dữ liệu vào các bảng hiện tại mà không cần dữ liệu lịch sử để truy cập.
Một lý do khác là hồ sơ đọc / ghi của các nhóm dữ liệu. Nếu bạn có một số dữ liệu được ghi liên tục và các dữ liệu khác có hoạt động đọc nặng, bạn có thể xây dựng các loại lưu trữ khác nhau để đáp ứng các nhu cầu đó. Bạn có thể đặt những thứ nặng nề vào cuộc đột kích 10 và để lại những thứ thiên vị đọc trên cuộc đột kích 5 rẻ hơn.
Bây giờ, hãy nói về các tập tin so với các nhóm. Khi bạn đặt các đối tượng trong SQL Server, bạn phải đặt chúng ở cấp độ nhóm. Bạn có thể đặt một bảng hoặc một chỉ mục trong một nhóm, nhưng bạn không thể chọn một tệp cụ thể. Vì vậy, mọi thứ chúng ta đã thảo luận cho đến nay là về việc khi nào nên thêm một nhóm fileg - nhưng khi nào bạn thêm một tệp?
Nếu bạn đang thiết kế bộ nhớ và bạn có 80 ổ cứng, có một số cách bạn có thể phá vỡ nó:
Các hệ thống lưu trữ khác nhau có hồ sơ hiệu suất khác nhau. Tôi đã làm việc với một số SAN hoạt động tốt nhất với mảng ổ đĩa 12-16 và bất cứ thứ gì lớn hơn mà không cải thiện hiệu suất. Một ví dụ khác là SAN với đa luồng: nếu bạn có một số HBA kết nối máy chủ của bạn với bộ lưu trữ của bạn và nếu phần mềm đa luồng của bạn không thực sự hoạt động / hoạt động, thì bạn có thể cần một mảng trên mỗi đường dẫn để phân phối tải. Bốn đường dẫn, bốn nhóm ổ đĩa sẽ có hiệu suất tốt hơn trên các loại ổ đĩa đó.
Trong những trường hợp đó, bạn kết thúc với bốn mảng khác nhau, bốn ổ đĩa khác nhau trong Windows (trừ khi bạn sử dụng điểm gắn kết và thậm chí sau đó là các thư mục khác nhau) và bạn sẽ cần bốn tệp riêng biệt trong SQL Server. Những tệp riêng biệt có thể nằm trong cùng một nhóm.
Lý do chính là hiệu suất. Khi bạn hết dung lượng IOPS trên ổ đĩa filegroup chính của mình, bạn sẽ cần mở rộng sang nhóm filegroup thứ hai để phân chia IOPS trên nhiều đĩa / LUN tùy thuộc vào cấu hình lưu trữ.
EDIT: Brad Wilson đã bình luận tốt về SSD. Nếu bạn đang sử dụng hệ thống lưu trữ SSD / SATA / FC tổng hợp, bạn có thể muốn có các nhóm tệp khác nhau trên các loại lưu trữ khác nhau. Sau đó, bạn có thể đặt các bảng yêu cầu IOPS cực đoan của mình lên filegropus SSD, trong khi các bảng lịch sử / thống kê có thể được lưu trữ trên các nhóm fileg SATA giá rẻ.
Tôi cũng sẽ chỉ ra rằng có một khía cạnh phục hồi dữ liệu / sẵn có cho câu hỏi này. Bằng cách sử dụng nhiều nhóm tệp và không đặt bất kỳ đối tượng nào do người dùng xác định vào nhóm tệp chính, bạn có thể linh hoạt hơn trong việc cho phép khôi phục trực tuyến. điều này cho phép khôi phục từng phần ở cấp độ nhóm tập tin.
Khôi phục trực tuyến có sẵn trong phiên bản Enterprise và Developer của máy chủ sql vào cuối năm 2005
Một ý nghĩ khác xuất hiện trong đầu là tách riêng dữ liệu tham chiếu tĩnh chỉ đọc khỏi dữ liệu giao dịch. Đối với cơ sở dữ liệu lớn hơn, điều này có thể giảm lượng thời gian và / hoặc không gian cần thiết để thực hiện sao lưu.