CACHESTORE_SQLCP Sql Plans ใช้เวลา> 38 GB หลังจากสองสามวัน
เรากำลังใช้งานตัวเลือก "เพิ่มประสิทธิภาพสำหรับภาระงาน Ad hoc" (Entity Framework และการรายงานที่กำหนดเองสร้างโฆษณาจำนวนมาก!)
SQL Server 2016 SE 3.00.2164.0.v1 บน AWS RDS พร้อมการจำลองแบบหลาย AZ
เมื่อฉันวิ่ง:
DBCC FREESYSTEMCACHE('SQL Plans');
หรือ
DBCC FREEPROCCACHE
หรือ
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
หรือ
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
ดูเหมือนจะไม่ชัดเจนว่า:
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
ฉันเปิดใช้งานโดยเปิดใช้งาน Query Store แต่ฉันปิดใช้งานเพื่อดูว่าสิ่งใดรบกวนสิ่งใดหรือไม่ดูเหมือนว่าจะช่วยได้ แต่ฉันปิดไป
สิ่งที่แปลกจริงๆก็คือ
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
เป็น 1-3 หรือมากกว่านั้น (ดูเหมือนว่าจะแสดงเพียงแค่เคยแสดงคำค้นหาที่กำลังทำงานอยู่) แม้ว่าหน่วยความจำนั้นสงวนไว้ก่อนที่ฉันจะพยายามล้างสิ่งใดก็ตาม ฉันกำลังคิดถึงอะไร
CACHESTORE_SQLCP ใช้เวลามากกว่า 60% ของหน่วยความจำที่มีอยู่ทั้งหมดซึ่งเป็นข้อกังวลเนื่องจากมีหน่วยความจำรอเกิดขึ้นเป็นครั้งคราว นอกจากนี้เรายังต้องฆ่า DBCC CHECKDB เป็นประจำในช่วงสุดสัปดาห์ที่ยาวนาน 4 ชั่วโมงเพราะหน่วยความจำไม่เพียงพอรอการรอ (มันเสร็จสมบูรณ์ทันทีโดยไม่มีข้อผิดพลาดเมื่อเปิด PHYSICAL_ONLY)
มีวิธีใดบ้างที่จะเรียกคืนหน่วยความจำนี้ (นอกเหนือจากการรีบูตทุกคืน!?)
อัปเดตจากความเห็น / คำตอบ
เมื่อฉันวิ่ง
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
ฉันเข้าใจ
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
ซึ่งรวมถึงการALTER SERVER STATE
อนุญาตที่จำเป็น
ผลลัพธ์ของDBCC FREEPROCCACHE
คือ
การดำเนินการ DBCC เสร็จสมบูรณ์ ถ้า DBCC พิมพ์ข้อความผิดพลาดติดต่อผู้ดูแลระบบของคุณ
ซึ่งเป็นข้อความมาตรฐาน ฟังก์ชัน DBCC อื่น ๆ ที่ RDS ไม่สนับสนุนให้ข้อความแสดงข้อผิดพลาดเกี่ยวกับการอนุญาต
(หนึ่งวันต่อมาและหลังจากนั้นให้เรียกใช้อีกครั้งแผนการ SQL ยังคงอยู่ที่ 38,321,280 kb)
อัปเดตจากความเห็น / คำตอบ
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
เอาท์พุท:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
ไม่ได้ทำอะไรที่แตกต่าง
ปรับปรุง
บันทึกข้อผิดพลาด SQL บันทึกต่อไปนี้ในแต่ละครั้ง:
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.
ปรับปรุง
มีการอัพเกรดเครื่องยนต์ใน RDS จาก 13.00.2164.0.v1 เป็น 13.00.4422.0.v1 แม้ว่ามันจะถูกตั้งค่าให้อัพเกรดอัตโนมัติเป็นรุ่นรอง แต่ก็ไม่ได้ทำให้เรามีการอัพเดทเป็นเวอร์ชั่นล่าสุด จะเริ่มต้นใหม่และติดตั้งวันหยุดสุดสัปดาห์นี้เพื่อดูว่าจะช่วย