Máy chủ Sql - Thực tiễn tốt nhất để phát triển tệp cơ sở dữ liệu


16

Tôi đã theo dõi sự tăng trưởng của tập tin thông qua trình thu thập dữ liệu trong máy chủ sql 2008 r2 trong hai tuần. Cơ sở dữ liệu đang tăng trưởng ổn định ở mức khoảng 35 (MB) / ngày. DB vẫn chưa đạt kích thước ban đầu là 2 GB.

Tăng trưởng tự động tệp DB được đặt thành 5MB và tôi muốn thử một cách tiếp cận khác, vì vậy tôi đang tìm kiếm đề xuất và nhận xét.

Có một nhiệm vụ điều chỉnh chạy mỗi tuần vào tối Chủ nhật lúc 1:30 sáng. Nhiệm vụ sẽ:

  • Kiểm tra tính toàn vẹn cơ sở dữ liệu
  • Thu nhỏ tệp nhật ký - (Điều này ổn vì chế độ ghi nhật ký đơn giản)
  • Cơ sở dữ liệu thu nhỏ
  • Sắp xếp lại chỉ số
  • Chỉ số xây dựng lại
  • Cập nhật số liệu thống kê
  • Dọn dẹp lịch sử

Tôi muốn thêm hai bước nữa vào kế hoạch điều chỉnh hàng tuần:

  1. Tăng tệp cơ sở dữ liệu thêm 500 MB nếu không gian sử dụng đạt đến một ngưỡng hoặc tổng kích thước nhất định.
  2. Tăng tệp nhật ký thêm 250 MB (sau khi thu nhỏ) nếu không gian đã sử dụng đạt đến ngưỡng nhất định của tổng kích thước.

Bằng cách đặt gánh nặng tăng trưởng trong giờ ngoại tuyến, tôi hy vọng sẽ đạt được hiệu suất bằng cách giảm số lượng sự kiện tăng trưởng tự động trong khi tải nặng.

Tôi có hai câu hỏi liên quan đến các tập tin phát triển tự động.

  • Nơi tốt nhất để đặt các bước phát triển tệp sẽ là trước các bước hiện tại hay sau?
  • Nếu tôi sử dụng ALTER DATABASE|MODIFY FILEđể phát triển tệp thì làm thế nào tôi có thể xác định nếu SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)?

2
DB của bạn phải có đủ kích thước để nó không bao giờ phát triển. Dù sao đi nữa, hãy đảm bảo Khởi tạo tệp tức thì được bật.
Remus Rusanu

3
@Remus trong khi lý tưởng, bạn đang nói rằng bạn đã định cỡ trước mọi cơ sở dữ liệu một cách hoàn hảo trong suốt sự nghiệp của mình? Luôn luôn có một số công việc đoán liên quan và điều chỉnh được thực hiện. Tôi sẽ đồng ý rằng tăng trưởng nên được kiểm soát và không chỉ còn lại 7 lần một ngày.
Aaron Bertrand

3
@AaronBertrand: Tôi ủng hộ lời khuyên đơn giản, cường điệu . Trong thời gian tôi học nó gậy tốt hơn. Hầu hết người dùng không thể xử lý 'tùy thuộc' và những người có thể tự mình nhận ra rằng có các màu xám ở giữa đen và trắng ...
Remus Rusanu

3
@DanAndrews: phân bổ quá mức có thể có hiệu ứng 'hạ lưu'. Hãy nghĩ rằng một nhà phát triển đang cố gắng khôi phục DB trên máy của mình chỉ để phát hiện ra nó cần hai ổ 1TB mới cho 1Gb dữ liệu ...
Remus Rusanu

2
Tôi chỉ chơi trò bênh vực của quỷ. Tuy nhiên, HD có giá rẻ. Mất thời gian trong sản xuất để cấu hình lại và mất hiệu suất là tốn kém.
Dan Andrew

Câu trả lời:


24

Bạn nên đặt mục tiêu phát triển tự động càng ít càng tốt. Bảy lần một ngày là tuyệt vời, ngay cả với khởi tạo tập tin ngay lập tức.

Đừng làm cơ sở dữ liệu thu nhỏ. Không bao giờ. Shrinkfile, có thể, nhưng chỉ sau một sự kiện bất thường. Thu hẹp nó chỉ để phát triển trở lại là một bài tập vô ích và thực sự nên được gọi là phân mảnh tự động.

Nếu mô hình khôi phục là đơn giản, không có cách nào trên trái đất bạn cần phát triển tệp nhật ký của mình thêm 250 GB. Không gian được sử dụng trong tệp sẽ tự động dọn sạch theo thời gian, trừ khi bạn bắt đầu giao dịch một tháng trước và không có ý định bao giờ thực hiện hoặc hoàn trả lại.

Vì vậy, lời khuyên của tôi sẽ là:

Tự động phát triển tệp dữ liệu theo cách thủ công trong khoảng thời gian yên tĩnh đến kích thước sẽ phù hợp với vài tháng tăng trưởng. Bạn đang tiết kiệm nó trong lúc này là gì?

Đặt mức tăng tăng trưởng tự động cho tệp dữ liệu thành một thứ tương đối nhỏ (để nó không làm gián đoạn người dùng khi nó xảy ra) và cảnh báo về sự kiện này (ví dụ: bạn có thể bắt gặp nó trong dấu vết mặc định hoặc thông qua mở rộng sự kiện). Điều này có thể cho bạn biết rằng bạn đang đạt điểm cao mà bạn ước tính và đã đến lúc phát triển thủ công trở lại. Tại thời điểm này, bạn sẽ muốn giữ sổ tay này trong trường hợp bạn muốn thêm tệp / filegroup mới trên một ổ đĩa khác để chứa dung lượng, vì cuối cùng bạn sẽ lấp đầy ổ đĩa hiện tại.

Tự động phát triển tệp nhật ký để, gấp đôi số lượng lớn nhất từng có. Nó không nên tự động phát triển hơn nữa trừ khi có một số giao dịch bất thường giữ mọi thứ. Bạn cũng nên theo dõi sự kiện này để bạn biết về họ.


Cảm ơn về đầu vào ... Tôi sẽ biết lời khuyên của bạn về việc phát triển tệp nhật ký và theo dõi nó trong một thời gian. Tôi đã sử dụng GB không chính xác cho MB ở kích thước tự động. Tôi đồng ý và không nghĩ Cơ sở dữ liệu Shrink đang làm những gì nó dự định làm. Vào cuối năm, DB đạt 15GB, tại thời điểm công việc được tạo ra, chúng tôi đã hết chỗ để sao lưu.

+1 cho nên được gọi là phân đoạn tự động :-) Bạn đã khởi chạy sự cố Kết nối cho vấn đề đó chưa? :-)
marc_s

10

Tăng trưởng tự động là điều mà bạn nên cố gắng tránh nếu có thể. Vấn đề là bạn không kiểm soát được thời điểm tăng trưởng có thể xảy ra và hệ thống của bạn có thể bị ảnh hưởng nghiêm trọng trong khi nó làm như vậy.

Đặt kích thước tệp của bạn thành một cái gì đó hợp lý trong một tháng hoặc lâu hơn và theo dõi tốc độ tăng trưởng của bạn từ đó tìm ra khoảng không gian bạn ước tính cho lượng thời gian X và đặt kích thước của bạn thành đó + biên độ lỗi.

Tôi đã thiết lập một công việc giám sát đơn giản sẽ cảnh báo cho tôi khi kích thước tệp đạt mức tối đa được xác định trước trước khi tăng trưởng tự động. Bạn có thể sử dụng một cái gì đó như thế này:

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

Điều này tất nhiên có thể được lên kế hoạch như một công việc.


Tôi xóa cơ sở dữ liệu "AND instance_name = 'mà bạn quan tâm" để nó trả về tất cả các cơ sở dữ liệu. Sau đó sử dụng một số đếm trong đó kích thước nhật ký là một ngưỡng trên ngưỡng trong câu lệnh IF. Nếu số lượng cao hơn 1, tôi thực hiện sp_send_dbmail với câu lệnh chọn từ bảng tạm thời để gửi email tên của các bản ghi vượt quá giới hạn.
Nick Winstanley
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.