Danh sách các bước chính xác để kiểm tra đường cơ sở của SQL Server?


10

Trước khi chạy kiểm tra hiệu năng / đường cơ sở cho một ứng dụng sử dụng SQL Server, tôi muốn có thể đặt phiên bản ở trạng thái "sạch" mà không cần khởi động lại phiên bản. Có những bước tôi có xu hướng làm theo, nhưng tôi muốn xây dựng một danh sách dứt khoát theo đúng trình tự và không có các bước dư thừa.

Danh sách các bước này có hoàn thành việc đặt SQL Server ở trạng thái "sạch" không?

Là trình tự hợp lý / chính xác?

Có bất kỳ bước dư thừa?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'

5
FYI, DROPCLEANBUFFERStốt cho thử nghiệm nhưng không phải lúc nào cũng chính xác. Nếu bạn đang tham khảo một bảng có dung lượng lớn, rất có thể bạn sẽ luôn có các trang trong bộ nhớ và thời gian IO sẽ không phải là một yếu tố lớn trong truy vấn đó. Bạn có thể đặt nhiều trọng lượng hơn vào IO hơn là thực tế trong trường hợp đó.
JNK

Bạn đang nói về thử nghiệm trong môi trường sản xuất hay môi trường thử nghiệm bị cô lập?
bopapa_1979

Bất cứ ai kiểm tra trong môi trường Prod nên bị sa thải. :) Vâng, kiểm tra môi trường.
Eric Higgins

Câu trả lời:


5

Đầu tiên, tôi lùi lại và hỏi những phép đo nào bạn dự định thu thập trong quá trình kiểm tra. Ví dụ: nếu bạn đang đếm các lần đọc logic bằng truy vấn, thì bạn không cần phải giải phóng bộ đệm. Tôi là một fan hâm mộ lớn của việc sử dụng các lần đọc logic vì nó độc lập với việc dữ liệu được lưu trong bộ nhớ cache hay trên đĩa - và trong sản xuất, thật khó để đoán liệu dữ liệu của truy vấn có được lưu vào bộ nhớ cache hay không (trừ khi bạn lưu trữ toàn bộ cơ sở dữ liệu trong bộ nhớ) . Nếu bạn điều chỉnh để giảm thiểu đọc hợp lý, thì ứng dụng sẽ chạy nhanh hơn cho dù dữ liệu có trong bộ nhớ cache hay không.

Tiếp theo, tôi sẽ hỏi những gì thay đổi giữa các lần chạy. Ví dụ: bằng cách chạy EXEC SP_UPDATESTATS trong mỗi cơ sở dữ liệu như bạn đã đề xuất, bạn sẽ lấy mẫu lại các số liệu thống kê cho các bảng đã được cập nhật. Tuy nhiên, trừ khi bạn đang cập nhật số liệu thống kê với fullscan, bạn sẽ nhận được các hàng ngẫu nhiên từ bảng - điều đó không quá lặp lại và tôi không nghĩ bạn thực sự muốn làm điều đó. Thay vào đó, bạn có thể muốn khôi phục cơ sở dữ liệu giữa mỗi lần chạy để bạn luôn kiểm tra chính xác cùng một dữ liệu. Nếu các thử nghiệm của bạn đang thực hiện chèn / cập nhật / xóa, chúng có thể có các cấu hình hiệu suất khác nhau trên mỗi lần chạy nếu bạn không khôi phục cơ sở dữ liệu (vì chúng đang thêm / thay đổi dữ liệu, cộng với thay đổi số liệu thống kê trên dữ liệu) - và thậm chí tệ hơn,


Điểm rất tốt, mục tiêu là có mọi thứ giống hệt nhau giữa các lần chạy. Các phép đo tôi thực hiện trong trường hợp này @ hand là thời gian chạy cho các chức năng cụ thể trong một ứng dụng (x giây để trả về danh sách cho ứng dụng, y giây để thêm một mục hàng đợi, v.v.). Những gì đang thay đổi giữa các bài kiểm tra có thể là các phần của mã ứng dụng & không phải các đối tượng SQL, các đối tượng SQL và không phải là mã ứng dụng hoặc cài đặt cấp độ thể hiện / DB như đồng thời mà không thay đổi mã ứng dụng. Nếu tôi thêm một khôi phục ra khỏi cổng trước mỗi bài kiểm tra, bạn cảm thấy thế nào về danh sách của tôi ở trên @ điểm đó? Tôi có thiếu thứ gì không, hay trình tự cần một số công việc?
Eric Higgins

Brent, bạn đang dùng CPU tài khoản trong thử nghiệm của bạn?
AK

@EricHiggins Thay vì kiểm tra nhiều thứ cùng một lúc, tôi sẽ kiểm tra từng phần riêng lẻ. Tôi muốn kiểm tra các truy vấn trực tiếp và xem những gì thay đổi hiệu suất ở đó. Ví dụ: chạy theo dõi SQL trong khi thực hiện các chức năng cụ thể trong ứng dụng và sau đó tiếp tục phát lại dấu vết đó trong khi thực hiện thay đổi chỉ mục / cấu hình để cải thiện hiệu suất và xem những thứ như đọc logic và số liệu CPU theo dõi.
Brent Ozar

@AlexKuznetsov Tôi thực sự không phải là người thực hiện thử nghiệm - Eric là người đã đặt câu hỏi. Khi tôi thực hiện loại công việc này, tôi sẽ xem xét các số liệu CPU ở cấp độ truy vấn cũng như toàn bộ máy chủ.
Brent Ozar

Chúng tôi sử dụng trình tạo tải của bên thứ 3 (và có một người toàn thời gian dành riêng cho việc phát triển các bài kiểm tra tải). Vì vậy, các thử nghiệm của tôi là chính xác đối với giao dịch, trình tự, số người dùng, các bước chính xác được thực hiện trong ứng dụng ... mọi thứ. Vì vậy, tôi không nhất thiết phải xem xét các số liệu loại bảng điều khiển SQL. Phần mềm kiểm tra tải theo dõi thời gian phản hồi của các mô-đun ứng dụng đến mili giây. Vì vậy, thực hiện khôi phục DB là một ý tưởng tốt. Tôi cần phải tỉnh táo kiểm tra các bước khác mà tôi đang làm để chắc chắn rằng tôi đang hoàn thành trạng thái "Clean slate" mà tôi đang tìm kiếm trước mỗi vòng thử nghiệm.
Eric Higgins
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.