Cả DBCC FREEPROCCACHE và DBCC FREESYSTEMCACHE ('Kế hoạch SQL') đều không làm gì để giải phóng bộ nhớ CACHESTORE_QueryCP


13

Gói CACHESTORE_QueryCP chiếm tới> 38 GB sau vài ngày.

Chúng tôi đã chạy với tùy chọn "tối ưu hóa cho khối lượng công việc ad hoc" trên. (Khung thực thể và báo cáo tùy chỉnh tạo ra rất nhiều hocs quảng cáo!)

SQL Server 2016 SE 3.00.2164.0.v1 trên AWS RDS với tính năng phản chiếu đa AZ

Khi tôi chạy:

DBCC FREESYSTEMCACHE('SQL Plans');

hoặc là

DBCC FREEPROCCACHE

hoặc là

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

hoặc là

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

Nó dường như không xóa nó:

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048

Tôi đã chạy với Store Store được kích hoạt, nhưng tôi đã vô hiệu hóa nó để xem liệu điều đó có can thiệp vào bất cứ điều gì không, nó dường như không giúp ích gì, nhưng tôi đã bỏ nó đi.

Điều thực sự kỳ lạ cũng là

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

là 1-3 hoặc hơn (dường như chỉ hiển thị từng truy vấn hiện đang chạy), mặc dù tất cả bộ nhớ đó được bảo lưu, ngay cả trước khi tôi cố gắng xóa bất cứ điều gì. Tôi đang thiếu gì?

CACHESTORE_QueryCP đang chiếm hơn 60% bộ nhớ khả dụng, đây là một vấn đề đáng lo ngại vì thỉnh thoảng có bộ nhớ chờ xảy ra. Ngoài ra, chúng tôi đã phải giết một DBCC CHECKDB thông thường vào cuối tuần kéo dài 4 giờ vì bộ nhớ không đủ để chờ đợi (nó đã hoàn thành ngay lập tức mà không có lỗi với PHYSICS_ONLY).

Có cách nào để lấy lại ký ức này (ngoài việc khởi động lại hàng đêm!?)?

Đồ thị tiêu thụ bộ nhớ Biểu đồ tiêu thụ bộ nhớ

Cập nhật từ ý kiến ​​/ câu trả lời

Khi tôi chạy

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

tôi có

entity_name subentity_name  permission_name
server      CONNECT SQL
server      CREATE ANY DATABASE
server      ALTER ANY LOGIN
server      ALTER ANY LINKED SERVER
server      ALTER ANY CONNECTION
server      ALTER TRACE
server      VIEW ANY DATABASE
server      VIEW ANY DEFINITION
server      VIEW SERVER STATE
server      ALTER SERVER STATE
server      CREATE SERVER ROLE
server      ALTER ANY SERVER ROLE

Trong đó bao gồm sự ALTER SERVER STATEcho phép cần thiết .

Đầu ra của DBCC FREEPROCCACHE

Thực hiện DBCC hoàn thành. Nếu DBCC in thông báo lỗi, liên hệ với quản trị viên hệ thống của bạn.

Đó là thông điệp tiêu chuẩn. Các chức năng DBCC khác mà RDS không hỗ trợ đưa ra thông báo lỗi về quyền.

(Một ngày sau và sau khi chạy lại, Kế hoạch SQL vẫn còn 38.321.280 kb)

Cập nhật từ ý kiến ​​/ câu trả lời

SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools

đầu ra:

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal') không làm gì khác

Cập nhật

Nhật ký lỗi SQL ghi nhật ký sau mỗi lần:

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Cập nhật

Có phiên bản nâng cấp động cơ trên RDS từ 13.00.2164.0.v1 lên 13.00.4422.0.v1. Mặc dù nó được đặt thành nâng cấp phiên bản nhỏ tự động, nhưng dường như chúng tôi không cập nhật cho chúng tôi bản mới nhất. Sẽ khởi động lại và cài đặt vào cuối tuần này để xem nếu nó giúp.

Câu trả lời:


5

Tôi đã nâng cấp lên 13.00.4422.0.v1 (SQL Server 2016 SP1) và khởi động lại.

Cho đến nay, tôi có thể xóa bộ nhớ SQL Plan bằng DBCC FREESYSTEMCACHE('SQL Plans');lệnh!

Thời gian sẽ trả lời để xem liệu bây giờ nó có sử dụng bộ nhớ khôn ngoan hơn không, nhưng ít nhất bây giờ tôi có cách để thiết lập lại nếu nó trở nên quá khó khăn một lần nữa.


1
Tuy nhiên, tôi sẽ đề nghị không thường xuyên xóa SQLCP và tiếp tục và tìm hiểu nguyên nhân gốc
Shanky

Entity Framework và một tính năng báo cáo tùy chỉnh cho phép hầu hết mọi người dùng chạy hầu hết mọi truy vấn, theo một cách nào đó, tạo ra rất nhiều truy vấn adhoc. Nếu có một cách để thanh lọc những người đó, hoặc thậm chí nói với họ rằng đừng bao giờ được lưu vào bộ nhớ cache ngay từ đầu, điều đó có thể giúp ích. Cho đến nay, bộ nhớ cache của gói đã lơ lửng ở mức khoảng 5,8 GB kể từ khi cài đặt SP1.
Tên âm thanh chuyên nghiệp

Bạn đã kích hoạt Optimize for Ad-Hoc Workload. So với 38G nếu bây giờ mất 5 GI, tin rằng đây không phải là điều đáng lo ngại khi xem xét khối lượng công việc
Shanky

Có, Tối ưu hóa cho khối lượng công việc Ad-Hoc được đặt (như đã nói ở trên trong câu hỏi)
Tên âm thanh chuyên nghiệp

1
Chúng tôi đã thấy vấn đề tương tự vào ngày 13.0.4001.0. Phải trả lại SQL để xóa bộ đệm cache. Không có gì được biên dịch, nhưng bộ đệm cache đã bị 'kẹt' và sẽ không rõ ràng cho dù chúng tôi đã thử gì. Không thấy nó xảy ra một lần nữa kể từ khi nảy SQL, nhưng tự hỏi liệu có một loại rò rỉ bộ nhớ hoặc lỗi nào không.
GoodwinSQL

3

Yêu cầu

Để chạy DBCC FREEPROCCACHEhoặc DBCC FREESYSTEMCACHEtài khoản của bạn cần có sự cho phép ALTER SERVER STATE.

Người giới thiệu

Thống đốc tài nguyên

AWS RDS có cho phép cài đặt thống đốc tài nguyên không? Nếu có, thì cú pháp là:

DBCC FREEPROCCACHE ('<pool_name>'). 

Tìm hiểu nếu bạn có hồ bơi với:

SELECT * FROM sys.dm_resource_governor_resource_pools

Xác minh quyền

Chạy lệnh sau để xác định xem bạn có các quyền này không:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Hạn chế / hạn chế

Có một số hạn chế về quyền được cấp cho quản trị viên của các phiên bản AWS RDS như được ghi trong bài viết Microsoft SQL Server trên Amazon RDS trong chương Microsoft SQL Server Security

Dưới đây là một cái nhìn tổng quan:

Các vai trò cấp máy chủ sau đây hiện không có sẵn trong Amazon RDS:

  • số lượng lớn
  • dbcreator
  • đĩa
  • bảo mật
  • máy chủ
  • sysadmin

Các quyền cấp độ máy chủ sau đây không khả dụng trên các phiên bản SQL Server DB:

  • HOẠT ĐỘNG BULK ADMINISTER
  • THAY ĐỔI BẤT K CR TÍN DỤNG
  • THAY ĐỔI THÔNG BÁO SỰ KIỆN
  • THAY ĐỔI BẤT K S PHẦN NÀO SỰ KIỆN
  • THAY ĐỔI MỌI KIỂM TOÁN MÁY CHỦ
  • THAY ĐỔI NGUỒN
  • CÀI ĐẶT THAY ĐỔI (Bạn có thể sử dụng API nhóm tham số DB để sửa đổi tham số. Để biết thêm thông tin, hãy xem Làm việc với các nhóm tham số DB.
  • MÁY CHỦ TỰ ĐỘNG
  • KIỂM SOÁT
  • TẠO THÔNG BÁO SỰ KIỆN DDL
  • TẠO ENDPOINT
  • TẠO THÔNG BÁO SỰ KIỆN
  • ĐÁNH GIÁ TIẾP CẬN BÊN NGOÀI
  • SHUTDOWN (Bạn có thể sử dụng tùy chọn khởi động lại RDS thay thế)
  • LẮP RÁP
  • THAY ĐỔI MỌI NHÓM CÓ S AVN (chỉ dành cho SQL Server 2012)
  • TẠO BẤT K GROUP NHÓM CÓ S AVN (chỉ dành cho SQL Server 2012)

Những hạn chế / giới hạn này có thể đã thay đổi kể từ khi tài liệu được xuất bản.

Các nguồn lực khác

Brent Ozar đã viết một bài báo " SQL Server RDS " nơi ông lưu ý rằng ...

Nhiều lệnh DBCC hoàn toàn không hoạt động - DBCC DBINFODBCC LOGINFObị từ chối rõ ràng. Tôi đã làm, tuy nhiên, phát hiện ra rằng tôi có thể chạy DBCC FREEPROCCACHEthường xuyên như tôi muốn.

Hãy nhớ rằng những hạn chế này có thể thay đổi theo thời gian - các tính năng mới được thêm vào một cách thường xuyên.

Hỗ trợ Amazon

Nếu tài khoản của bạn có các quyền cần thiết và bạn không thể giải phóng bộ nhớ cache, thì bạn có thể muốn mở một vé hỗ trợ với Amazon.


Câu hỏi cập nhật với nhiều chi tiết hơn dựa trên điều này. Cảm ơn bạn đã phản hồi chu đáo và chi tiết của bạn. Tôi chạy trên các vấn đề về quyền với những thứ khác trong RDS, nhưng điều này nên được hỗ trợ. Tôi sẽ liên hệ với bộ phận Hỗ trợ của Amazon sau hôm nay nếu tôi không có nhiều hoạt động ở đây. Có vẻ như vấn đề về SQL Server hơn là vấn đề RDS và tôi không biết mức độ hiểu biết hoặc hỗ trợ cụ thể của họ sẽ được so sánh với cộng đồng tốt đẹp này như thế nào!
Tên âm thanh chuyên nghiệp

1
Tôi đánh giá cao phản hồi của bạn. Tôi đoán bạn có thể muốn mở một vé với Amazon hoặc Microsoft vì dường như không có gì hoạt động. Và một lần nữa, nó có thể là một lỗi hoặc một tính năng (giới hạn do ....).
John aka hot2use
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.