Ne DBCC FREEPROCCACHE ne de DBCC FREESYSTEMCACHE ('SQL Planları') CACHESTORE_SQLCP belleği boşaltmak için hiçbir şey yapmaz


13

CACHESTORE_SQLCP Sql Planları birkaç gün sonra> 38 GB alır.

Halihazırda "geçici iş yükleri için optimize et" seçeneğiyle çalışıyoruz. (Entity Framework ve özel raporlama çok sayıda reklam alanı yaratır!)

Çoklu AZ yansıtmalı AWS RDS'de SQL Server 2016 SE 3.00.2164.0.v1

Koştuğumda:

DBCC FREESYSTEMCACHE('SQL Plans');

veya

DBCC FREEPROCCACHE

veya

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

veya

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

Anlaşılan o değil:

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 etkinken çalışıyordum, ancak herhangi bir şeye müdahale edip etmediğini görmek için devre dışı bıraktım, yardımcı olmadı, ama bıraktım.

Gerçekten tuhaf olan da

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

1-3 ya da öylesine (sadece şu anda çalışan sorguları gösteriyor gibi görünüyor), bir şey temizlemeye çalışmadan önce bile, tüm bellek ayrılmış olsa bile. Neyi kaçırıyorum?

CACHESTORE_SQLCP, kullanılabilir belleğin% 60'ından fazlasını kaplıyor, bu da endişe verici çünkü zaman zaman bellek beklemeleri var. Buna ek olarak, yetersiz bellek beklemeleri istiflediğinden (PHYSICAL_ONLY açıkken hatasız tamamlandığı için) 4 saat süren hafta sonu rutin bir DBCC CHECKDB'yi öldürmek zorunda kaldık.

Bu hafızayı geri almanın herhangi bir yolu var mı (gece yeniden başlatma dışında !?)?

Bellek Tüketim Grafiği Bellek Tüketim Tablosu

Yorumlardan / cevaplardan güncelleme

Koştuğumda

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

alırım

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

Hangi gerekli ALTER SERVER STATEizni içerir .

Çıkış DBCC FREEPROCCACHEIS

DBCC yürütmesi tamamlandı. DBCC hata mesajları yazdırdıysa, sistem yöneticinize başvurun.

Standart mesaj hangisidir? RDS'nin desteklemediği diğer DBCC işlevleri, izinler hakkında hata iletileri verir.

(Bir gün sonra ve bunu tekrar çalıştırdıktan sonra, SQL Planları hala 38.321.280 kb'dir)

Yorumlardan / cevaplardan güncelleme

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

çıktılar:

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal') farklı bir şey yapmaz

Güncelleme

SQL Hata Günlüğü her seferinde aşağıdakileri kaydeder:

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.

Güncelleme

RDS'de 13.00.2164.0.v1'den 13.00.4422.0.v1'e kadar bir motor sürümü yükseltmesi var. Otomatik küçük sürüm yükseltmesine ayarlanmış olsa da, bizi en son sürüme güncel tutmadı. Yeniden başlatılır ve bu hafta sonu yardımcı olup olmadığını görmek için yükler.

Yanıtlar:


5

13.00.4422.0.v1'e (SQL Server 2016 SP1) yükselttim ve yeniden başlattım.

Şimdiye kadar, DBCC FREESYSTEMCACHE('SQL Plans');komut kullanarak SQL Plan belleği temizleyebilirsiniz !

Şimdi hafızayı biraz daha akıllıca kullanıp kullanmadığını görecek, ama en azından şimdi tekrar çok şişirilirse sıfırlamanın bir yolu var.


1
Hala SQLCP'yi sık sık temizlememeyi ve devam etmeyi ve temel sebebi
bulmamayı öneririm

Entity Framework ve neredeyse her kullanıcının neredeyse her sorguyu çalıştırmasına izin veren özel bir raporlama özelliği, bir şekilde çok sayıda adhoc sorgusu oluşturur. Bunları temizlemek için bir yol olsaydı, hatta ilk etapta asla önbelleğe alınmamasını söyleseydi, bu yardımcı olabilir. Şimdiye kadar, SP1 kurulumundan bu yana plan önbelleği yaklaşık 5.8GB seviyesinde kaldı.
Profesyonel Sondaj Adı

Eğer etkin mı Optimize for Ad-Hoc Workload. 38G ile karşılaştırıldığında, şimdi 5 GI alıyorsa, bunun iş yükünü göz önünde bulundurmaktan endişelenecek bir şey olmayacağına inanıyoruz
Shanky

Evet, Geçici İş Yükü için En İyi Duruma Getir ayarlandı (yukarıda belirtildiği gibi)
Profesyonel Sondaj Adı

1
Aynı sorunu 13.0.4001.0'da gördük. Proc önbelleğini temizlemek için SQL sıçrama vardı. Hiçbir şey derlenmemiştir, ancak proc önbellek 'sıkışmış' ve ne denediğimiz önemli değil. SQL'i zıplattığından beri tekrar olduğunu görmedim, ancak bir tür bellek sızıntısı veya hatası olup olmadığını merak ediyorum.
GoodwinSQL

3

Gereksinimler

Çalıştırmak DBCC FREEPROCCACHEveya DBCC FREESYSTEMCACHEhesabınız için izin gerekiyor ALTER SERVER STATE.

Referanslar

Kaynak Yöneticisi

AWS RDS kaynak düzenleyici ayarlarına izin veriyor mu? Evet ise, sözdizimi:

DBCC FREEPROCCACHE ('<pool_name>'). 

Havuzunuz olup olmadığını öğrenin:

SELECT * FROM sys.dm_resource_governor_resource_pools

İzinleri doğrulama

Bu izinlere sahip olup olmadığınızı belirlemek için aşağıdaki komutu çalıştırın:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Sınırlamalar / Kısıtlamalar

Microsoft SQL Server Güvenliği bölümündeki Amazon RDS'deki Microsoft SQL Server makalesinde belgelendiği gibi AWS RDS örneklerinin yöneticilerine verilen izinlerde bazı kısıtlamalar vardır

İşte genel bakış:

Aşağıdaki sunucu düzeyi roller şu anda Amazon RDS'de mevcut değildir:

  • bulkadmin
  • dbcreator
  • diskadmin
  • securityadmin
  • serveradmin
  • sysadmin

Aşağıdaki sunucu düzeyinde izinler SQL Server DB örneklerinde kullanılamaz:

  • YÖNETİCİ TOPLU İŞLEMLERİ
  • HERHANGİ BİR KREDİ DEĞİŞTİRME
  • OLAY BİLDİRİMİNİ DEĞİŞTİRİN
  • HERHANGİ BİR OLAY OTURUMUNU DEĞİŞTİRİN
  • HERHANGİ BİR SUNUCU DENETİMİNİ DEĞİŞTİRİN
  • ALTER KAYNAKLARI
  • ALTER SETTINGS (Parametreleri değiştirmek için DB Parametre Grubu API'lerini kullanabilirsiniz. Daha fazla bilgi için, bkz. DB Parametre Gruplarıyla Çalışma.
  • DOĞRU SERVER
  • CONTROL_SERVER
  • DDL OLAY BİLDİRİMİ OLUŞTUR
  • ENDPOINT OLUŞTUR
  • İZLEME OLAY BİLDİRİMİ OLUŞTUR
  • DIŞ ERİŞİM MONTAJI
  • KAPATMA (Bunun yerine RDS yeniden başlatma seçeneğini kullanabilirsiniz)
  • GÜVENLİ MONTAJ
  • HERHANGİ BİR MEVCUT GRUBU DEĞİŞTİRİN (sadece SQL Server 2012)
  • HERHANGİ BİR MEVCUT GRUP OLUŞTUR (yalnızca SQL Server 2012)

Bu kısıtlamalar / sınırlamalar belge yayınlandığından beri değişmiş olabilir.

Diğer kaynaklar

Brent Ozar, " SQL Server RDS " adlı bir makale yazdı ve burada ...

Birçok DBCC komutu hiç çalışmaz DBCC DBINFOve DBCC LOGINFOaçıkça reddedilir. Ancak DBCC FREEPROCCACHEistediğim sıklıkta koşabileceğimi keşfettim .

Bu sınırlamaların zaman içinde değişebileceğini unutmayın - düzenli olarak yeni özellikler eklenir.

Amazon Desteği

Hesabınızda gerekli izinler varsa ve önbelleği boşaltamazsanız, Amazon ile bir destek bileti açmak isteyebilirsiniz.


Bu soruna dayanarak daha fazla ayrıntı içeren soru güncellendi. Düşünceli ve ayrıntılı yanıtınız için teşekkür ederiz. RDS'deki diğer şeylerle ilgili izin sorunları ile karşılaşıyorum, ancak bu desteklenmelidir. Burada fazla etkinlik almazsam bugün Amazon Desteği ile iletişime geçeceğim. Bir RDS probleminden daha çok bir SQL Server problemine benziyordu ve desteklerinin bu güzel topluluğa kıyasla ne kadar bilgili veya spesifik olacağını bilmiyorum!
Profesyonel Sondaj Adı

1
Geri bildiriminiz için teşekkür ederim. Sanırım Amazon ya da Microsoft ile hiçbir şey işe yaramadığı için bir bilet açmak isteyebilirsiniz. Ve sonra tekrar, bir hata veya bir özellik olabilir (nedeniyle sınırlama ....).
John aka hot2use
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.