Phân mảnh cơ sở dữ liệu và cài đặt tự động phát triển


7

Chúng tôi có một số kế hoạch bảo trì cho SQL Server 2008 r2 express của chúng tôi. Mỗi tháng chúng tôi thực hiện phân mảnh cơ sở dữ liệu nếu bất kỳ bảng nào có số trang trên 50 cho bất kỳ bảng nào và phân mảnh trung bình hơn 20.

Nếu kích thước nhật ký cơ sở dữ liệu> 2 MB, thì chế độ khôi phục được thực hiện đơn giản và được thu nhỏ lại và chế độ khôi phục được đặt lại thành FULL. Nếu Page_count> 50 và avg_frag sắc_in_percent> 30 thì chỉ mục là REBUILD.

Và nếu Page_count> 50 và avg_frag sắc_in_percent> 5 và <30 thì chỉ mục là REORGANIZE.

Đây là những gì chúng tôi đang làm cho đến bây giờ. Nhưng chúng tôi thấy rằng các sự kiện tự động tăng cường tài nguyên và nó không nên xảy ra nhiều lần. Bây giờ đối với tất cả cơ sở dữ liệu tự động được đặt thành MB cho tệp mdf và 10% cho tệp ldf là giá trị mặc định trong khi tạo cơ sở dữ liệu mới. Chúng tôi đang lên kế hoạch tăng giá trị tự động cho cơ sở dữ liệu tùy thuộc vào số lượng cơ sở dữ liệu ngày càng lớn hơn mỗi ngày. Tôi muốn biết có bao nhiêu sự kiện autogrowth là lý tưởng cho cơ sở dữ liệu. Tôi có nên đặt autogroth để nó chỉ xảy ra một lần một ngày, tuần hoặc tháng không. Vì vậy, hãy giúp tôi đặt giá trị autogrowth cho cơ sở dữ liệu của tôi. Ngoài ra có một vấn đề khác nếu tôi thực hiện phân mảnh cơ sở dữ liệu hàng tháng thì nó sẽ bị thu hẹp. Vì vậy, sau này cho tất cả các cơ sở dữ liệu mà tôi đã thu nhỏ autogrowth xảy ra một lần khi dữ liệu mới được ghi vào nó. Vì vậy, sẽ có rất nhiều sự kiện autogrowth. Vì vậy, liệu nó sẽ là một vấn đề? Xin vui lòng cho tôi biết một giải pháp.

Câu trả lời:


13

nếu bất kỳ bảng nào có số trang nhiều hơn [hơn] 50 [trang]

Điều đó vẫn còn vô cùng nhỏ. Tôi thường không tính đến phân mảnh cho bất kỳ chỉ mục nào có ít hơn 1000 trang .

và avg_frag sắc_in_percent> 30 thì chỉ mục là REBUILD

Đó là một ngưỡng tốt để xây dựng lại, nhưng tôi cũng sẽ xem xét sắp xếp lại các chỉ mục với sự phân mảnh trong phạm vi từ 5% đến 30%.

Nếu kích thước nhật ký cơ sở dữ liệu> 2 MB, thì chế độ khôi phục được thực hiện đơn giản và được thu nhỏ lại và chế độ khôi phục được đặt lại thành FULL

Tại sao anh làm điều này? Tại sao nó là một vấn đề nếu một tệp nhật ký lớn hơn 2 MB? Điều đó cực kỳ nhỏ. Chưa kể, khi bạn chuyển sang SIMPLE, thu nhỏ, và sau đó quay lại FULLphục hồi, bạn đang phá vỡ chuỗi đăng nhập. Bạn có thể gặp rắc rối nghiêm trọng về thời gian phục hồi. Kích thước tệp nhật ký của bạn một cách thích hợp và chỉ cho phép tự động phát triển trong trường hợp khẩn cấp . Thu hẹp một tệp cơ sở dữ liệu chỉ nên được thực hiện trong các trường hợp cực kỳ góc và không có nghĩa là một phần của lịch bảo trì định kỳ.

Nhưng chúng tôi thấy rằng các sự kiện phát triển tự động là khuyến khích tài nguyên và nó không nên xảy ra lặp đi lặp lại

Chính xác. Đó là nơi kích thước đi vào chơi. Theo dõi và được cảnh báo khi một tỷ lệ không gian nhất định đang được sử dụng. Bằng cách đó, bạn có thể lập kế hoạch cho các hoạt động tăng trưởng tệp thủ công của mình cho một cửa sổ bảo trì để giảm thiểu tác động của người dùng cuối.

và 10% cho tệp ldf là giá trị mặc định trong khi tạo cơ sở dữ liệu mới

Mặc dù tăng trưởng phần trăm là mặc định, tôi khuyên bạn nên chống lại nó. Bạn không muốn có một số lượng tăng trưởng tập tin thay đổi. Nếu bạn phải quay lại tự động phát triển, thì bạn muốn biết chính xác tệp sẽ tăng bao nhiêu. Chưa kể, với sự tăng trưởng của một tệp nhật ký, bạn sẽ có một lượng tệp nhật ký ảo (VLF) khác nhau với không gian bổ sung. Bạn muốn lập kế hoạch thông minh này, và điều này có thể được thực hiện thông qua một lượng tăng trưởng tệp cố định.

Tôi có nên đặt autogroth để nó chỉ xảy ra một lần một ngày, tuần hoặc tháng, v.v.

Đặt tự động tăng cho một lượng không gian cố định (không phải là tỷ lệ phần trăm) và chỉ bạn mới có thể xác định đâu là số tiền tốt. Quá nhỏ, bạn sẽ có chế độ tự động thường xuyên với tác động của người dùng cuối tối thiểu, nhưng xảy ra thường xuyên. Tự động phát triển quá cao, sau đó bạn sẽ có mức tăng trưởng ít thường xuyên hơn nhưng khi nó xảy ra, tác động sẽ kéo dài hơn.

Đề nghị của tôi? Giám sát không gian được sử dụng trong các tệp cơ sở dữ liệu của bạn. Khi nó đạt một tỷ lệ nhất định (giả sử, 80% dung lượng được sử dụng), bạn sẽ được cảnh báo. Và sau đó lên lịch tăng trưởng thủ công trong một cửa sổ bảo trì.


3
Ngoài ra, nếu bạn chuẩn bị tự động bật, bạn nên xem phần Khởi tạo tệp tức thì . Nó chỉ hoạt động cho các tệp dữ liệu nhưng nó sẽ làm cho các sự kiện tăng trưởng đó ít chuyên sâu hơn.
Kenneth Fisher

2
@KennethFisher Tôi đồng ý 1000% với bạn. IFI là một lợi ích lớn nhanh chóng và dễ dàng với các tệp dữ liệu.
Thomas Stringer

@ThomasStringer bạn có thể vui lòng cho biết mức độ thường xuyên xảy ra tự động xảy ra không? Chỉ cần thiết lập chế độ tự động cho cơ sở dữ liệu của tôi, tôi muốn biết điều đó (Tôi biết không có quy tắc cụ thể nào về việc tự động phát triển chỉ có thể xảy ra trong thời gian giới hạn).
nghiên cứu CNTT

@ThomasStringer Sau khi thu hẹp cơ sở dữ liệu, tôi sẽ xây dựng lại hoặc sắp xếp lại chỉ mục. Ngoài ra, tôi cũng sao lưu toàn bộ cơ sở dữ liệu để logchain không bị hỏng.
nghiên cứu CNTT

7

Điểm của Thomas Stringer là tất cả những gì bạn cần cho câu trả lời của mình. Nhưng tôi sẽ đưa ra một cái nhìn sâu sắc hơn về cách bạn xác định cài đặt tự động phát triển của mình?

Nhưng tôi muốn biết có bao nhiêu sự kiện autogrowth là lý tưởng cho cơ sở dữ liệu. Tôi có nên đặt autogroth để nó chỉ xảy ra một lần một ngày, tuần hoặc tháng không. Vì vậy, hãy giúp tôi đặt giá trị autogrowth cho cơ sở dữ liệu của tôi. Ngoài ra còn có một vấn đề khác. Nếu tôi thực hiện phân mảnh cơ sở dữ liệu hàng tháng thì nó sẽ bị thu hẹp. Vì vậy, sau này cho tất cả các cơ sở dữ liệu mà tôi đã thu nhỏ autogrowth xảy ra một lần khi dữ liệu mới được ghi vào nó. Vì vậy, sẽ có rất nhiều sự kiện autogrowth. Vì vậy, liệu nó sẽ là một vấn đề?

Không có công thức toán học để tính toán cài đặt tự động phát triển của bạn, đặc biệt là khi bạn không làm cơ sở dữ liệu của bạn.

Bây giờ, như @ThomasStringer đã chỉ ra rằng bạn không nên cho phép cơ sở dữ liệu của mình tự động ở mức%, thay vào đó đặt thành MB, bạn có thể tìm hiểu các sự kiện Autogrowth xảy ra trên cá thể máy chủ của mình bằng cách sử dụng Trace mặc định .

--below code will help you in finding autogrowth events on your server instance.
IF OBJECT_ID('tempdb..#autogrowthTotal') IS NOT NULL
    DROP TABLE #autogrowthTotal;

IF OBJECT_ID('tempdb..#autogrowthTotal_Final') IS NOT NULL
    DROP TABLE #autogrowthTotal_Final;

DECLARE @filename NVARCHAR(1000);
DECLARE @bc INT;
DECLARE @ec INT;
DECLARE @bfn VARCHAR(1000);
DECLARE @efn VARCHAR(10);

-- Get the name of the current default trace
SELECT @filename = CAST(value AS NVARCHAR(1000))
FROM::fn_trace_getinfo(DEFAULT)
WHERE traceid = 1
    AND property = 2;

-- rip apart file name into pieces
SET @filename = REVERSE(@filename);
SET @bc = CHARINDEX('.', @filename);
SET @ec = CHARINDEX('_', @filename) + 1;
SET @efn = REVERSE(SUBSTRING(@filename, 1, @bc));
SET @bfn = REVERSE(SUBSTRING(@filename, @ec, LEN(@filename)));
-- set filename without rollover number
SET @filename = @bfn + @efn

-- process all trace files
SELECT ftg.StartTime
    ,te.NAME AS EventName
    ,DB_NAME(ftg.databaseid) AS DatabaseName
    ,ftg.[FileName] AS LogicalFileName
    ,(ftg.IntegerData * 8) / 1024.0 AS GrowthMB
    ,(ftg.duration / 1000) AS DurMS
    ,mf.physical_name AS PhysicalFileName
INTO #autogrowthTotal
FROM::fn_trace_gettable(@filename, DEFAULT) AS ftg
INNER JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id
INNER JOIN sys.master_files mf ON (mf.database_id = ftg.databaseid)
    AND (mf.NAME = ftg.[FileName])
WHERE (
        ftg.EventClass = 92 -- Data File Auto-grow
        OR ftg.EventClass = 93
        ) -- Log File Auto-grow
ORDER BY ftg.StartTime

SELECT count(1) AS NoOfTimesEventFired
    ,CONVERT(VARCHAR(10), StartTime, 120) AS StartTime
    ,EventName
    ,DatabaseName
    ,[LogicalFileName]
    ,PhysicalFileName
    ,SUM(GrowthMB) AS TotalGrowthMB
    ,SUM(DurMS) AS TotalDurationMS
INTO #autogrowthTotal_Final
FROM #autogrowthTotal
GROUP BY CONVERT(VARCHAR(10), StartTime, 120)
    ,EventName
    ,DatabaseName
    ,[LogicalFileName]
    ,PhysicalFileName
--having count(1) > 5 or SUM(DurMS)/1000 > 60 -- change this for finetuning....
ORDER BY CONVERT(VARCHAR(10), StartTime, 120)

SELECT *
FROM #autogrowthTotal_Final

Dưới đây sẽ là đầu ra

nhập mô tả hình ảnh ở đây

Lưu ý: Tôi đã nhấn mạnh trong hình ảnh ý nghĩa của từng cột và những gì bạn nên tìm kiếm.

Về cơ bản, bạn phải theo dõi các sự kiện phát triển tự động trong một khoảng thời gian, ví dụ như trong hoạt động cao hoặc cho toàn bộ chu kỳ kinh doanh của bạn và sau đó tính trung bình nó sẽ cung cấp cho bạn một số giá trị chính xác mà bạn có thể chọn cho cài đặt tự động phát triển.

Bây giờ, đối với tệp Nhật ký, bạn cũng phải xem xét các yếu tố như Bảo trì chỉ mục, chạy CHECKDB, v.v. Vì vậy, hãy kích thước tệp nhật ký để hỗ trợ khối lượng thay đổi dữ liệu xảy ra trong cơ sở dữ liệu và thường xuyên sao lưu nhật ký để cho phép sử dụng lại không gian nhanh chóng trong tệp nhật ký.

Ngoài ra, đáng nói là bạn cũng nên kích hoạt Khởi tạo tệp tức thì . Chỉ hoạt động cho các tệp dữ liệu!

Tham khảo Tầm quan trọng của việc quản lý kích thước tệp dữ liệu, đặc biệt là sự tăng trưởng tệp dữ liệu và thu hẹp tệp dữ liệu của Paul Randal.

Lưu ý: Không thu hẹp cơ sở dữ liệu của bạn, trừ khi bạn thực hiện một đợt thanh lọc dữ liệu khổng lồ và bạn chắc chắn rằng cơ sở dữ liệu sẽ không phát triển lớn như vậy nữa. Nó gây ra sự phân mảnh và cơ sở dữ liệu có nghĩa là để phát triển!


Tôi tìm thấy dấu vết mặc định bị vô hiệu hóa hầu hết thời gian. Tôi thấy dễ dàng hơn để có được sự tăng trưởng nhật ký với DMV trong SQL 2005+ hoặc sysperfinfo trong SQL 2000: sqlblog.com/bloss/jonathan_kehayias/archive/2009/06/06/ trộm

@ShawnMelton bạn cũng phải xem xét lợi ích của theo dõi mặc định. DMV rất tuyệt trong năm 2005 trở lên, nhưng họ được thiết lập lại mỗi lần máy chủ sql khởi động lại hoặc ngay cả khi cơ sở dữ liệu nếu bị tắt. Theo dõi mặc định được bật theo mặc định và theo dõi trọng lượng rất nhẹ với tối đa 5 tệp và chúng cuộn qua khi thời gian trôi qua. Tham khảo trang Simple-talk.com/sql/performance/ . Lưu ý: Tôi không nói rằng bạn không nên sử dụng DMV, nhưng thông tin tương tự có thể thu được với ít tính toán và mã hóa, tại sao không tận dụng nó!
Kin Shah

Ngoài ra, nó sẽ không cung cấp cho bạn thời gian bắt đầu và kết thúc của các sự kiện đã xảy ra.
Kin Shah
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.