Đo lường kế hoạch trục xuất


9

Chúng tôi có SQL Server 2016 SP1 với bộ nhớ tối đa được đặt thành 24GB.
Máy chủ này có số lượng biên dịch cao, chỉ 10% trong số các biên dịch này là từ các truy vấn Ad-Hoc. Vì vậy, các gói mới được biên dịch nên được lưu trữ trong bộ đệm của gói nhưng kích thước của bộ đệm của gói không tăng (khoảng 3,72 GB).

Tôi nghi ngờ rằng có áp lực bộ nhớ cục bộ dẫn đến loại bỏ các kế hoạch từ bộ đệm. Giới hạn áp suất bộ nhớ cache của gói là 5GB. (75% bộ nhớ mục tiêu hiển thị từ 0-4GB + 10% bộ nhớ mục tiêu hiển thị từ 4GB-64GB + 5% bộ nhớ mục tiêu hiển thị> 64GB). Khi một bộ đệm đạt tới 75% giới hạn áp suất, các gói sẽ bị xóa khỏi bộ đệm. Trong trường hợp của tôi 75% của 5 GB là 3,75 GB. Vì vậy, điều hợp lý là đây là nguyên nhân của các biên dịch cao.

Có cách nào để đo lường (perfmon, các sự kiện mở rộng, ...) loại bỏ khỏi các kế hoạch ra khỏi bộ đệm không? Vì vậy, tôi có thể chắc chắn áp lực bộ nhớ cục bộ thực sự là nguyên nhân của các biên dịch cao?

Câu trả lời:


9

Có một XEvent cho điều đó:

query_cache_removal_statistic

Xảy ra khi một kế hoạch truy vấn được xóa khỏi bộ đệm của kế hoạch và các thống kê lịch sử cho đối tượng sắp bị hủy

Vì vậy, một cái gì đó như:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

Ngoài ra, nếu bộ đệm kế hoạch của bạn có số lượng lớn các gói sử dụng một lần, hãy cân nhắc cài đặt tối ưu hóa cho khối lượng công việc đặc biệt .

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.