DBCC FREEPROCCACHE atau DBCC FREESYSTEMCACHE ('Rencana SQL') tidak melakukan apa pun untuk membebaskan memori CACHESTORE_SQLCP

13

CACHESTORE_SQLCP Sql Paket membutuhkan waktu> 38 GB setelah beberapa hari.

Kami sudah menjalankan opsi "optimalkan untuk beban kerja ad hoc" aktif. (Kerangka Entitas dan pelaporan khusus membuat banyak hoc iklan!)

SQL Server 2016 SE 3.00.2164.0.v1 pada AWS RDS dengan mirroring multi-AZ

Ketika saya menjalankan:

DBCC FREESYSTEMCACHE('SQL Plans');

atau

DBCC FREEPROCCACHE

atau

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

atau

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

Tampaknya tidak jelas:

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

Saya menjalankan dengan Query Store diaktifkan, tetapi saya menonaktifkannya untuk melihat apakah itu mengganggu apa pun, sepertinya tidak membantu, tapi saya tidak melakukannya.

Yang aneh juga

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

adalah 1-3 atau lebih (tampaknya hanya menunjukkan permintaan yang sedang berjalan saat ini), meskipun semua memori dicadangkan, bahkan sebelum saya berusaha menghapus apa pun. Apa yang saya lewatkan?

CACHESTORE_SQLCP mengambil lebih dari 60% dari semua memori yang tersedia, yang menjadi perhatian karena ada menunggu memori terjadi sesekali. Selain itu, kami harus membunuh DBCC CHECKDB rutin selama akhir pekan yang berlangsung selama 4 jam karena memori yang tidak cukup sedang menunggu (itu diselesaikan secara instan tanpa kesalahan dengan PHYSICAL_ONLY aktif).

Apakah ada cara untuk mendapatkan kembali memori ini (selain reboot malam !?)

Grafik Konsumsi Memori Grafik Konsumsi Memori

Perbarui dari komentar / jawaban

Ketika saya berlari

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

saya mendapat

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

Yang termasuk ALTER SERVER STATEizin yang diperlukan .

Output dari DBCC FREEPROCCACHEis

Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda.

Yang merupakan pesan standar. Fungsi DBCC lain yang RDS tidak mendukung memberikan pesan kesalahan tentang izin.

(Sehari kemudian dan setelah menjalankan itu lagi, Paket SQL masih 38.321.280 kb)

Perbarui dari komentar / jawaban

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

output:

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal') tidak melakukan sesuatu yang berbeda

Memperbarui

SQL Error Log mencatat berikut ini setiap kali:

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.

Memperbarui

Ada peningkatan versi mesin pada RDS dari 13.00.2164.0.v1 ke 13.00.4422.0.v1 tersedia. Meskipun diatur ke pemutakhiran versi minor-otomatis, sepertinya pembaruan ini tidak membuat kami diperbarui. Akan reboot dan instal akhir pekan ini untuk melihat apakah itu membantu.

Nama Terdengar Profesional
sumber

Jawaban:

5

Saya memutakhirkan ke 13.00.4422.0.v1 (SQL Server 2016 SP1) dan memulai kembali.

Sejauh ini, saya dapat menghapus memori SQL Plan menggunakan DBCC FREESYSTEMCACHE('SQL Plans');perintah!

Waktu akan memberi tahu untuk melihat apakah ia menggunakan memori sedikit lebih bijaksana sekarang, tetapi setidaknya sekarang saya memiliki cara untuk mengatur ulang jika terlalu membengkak lagi.

Nama Terdengar Profesional
sumber
1
Tetap saya sarankan untuk tidak sering membersihkan SQLCP dan terus mencari tahu penyebab
utamanya
Entity Framework dan fitur pelaporan khusus yang memungkinkan hampir semua pengguna menjalankan hampir semua permintaan, dengan cara, menciptakan banyak permintaan adhoc. Jika ada cara untuk membersihkannya, atau bahkan menyuruh mereka untuk tidak pernah di-cache sejak awal, itu mungkin membantu. Sejauh ini, cache rencana telah melayang di sekitar 5.8GB sejak instalasi SP1.
Nama Terdengar Profesional
Sudahkah Anda mengaktifkan Optimize for Ad-Hoc Workload. Dibandingkan dengan 38G jika sekarang menggunakan 5 GI percaya ini tidak akan menjadi masalah untuk mempertimbangkan beban kerja
Shanky
Ya, Optimalkan untuk Beban Kerja Ad-Hoc diatur (seperti yang disebutkan di atas dalam pertanyaan)
Nama Terdengar Profesional
1
Kami melihat masalah yang sama pada 13.0.4001.0. Harus bouncing SQL untuk menghapus cache proc. Tidak ada yang dikompilasi, tetapi cache cache 'macet' dan tidak akan menghapus apa pun yang kami coba. Belum pernah melihatnya terjadi lagi sejak memantul SQL, tetapi bertanya-tanya apakah ada beberapa jenis kebocoran memori atau bug.
GoodwinSQL
3

Persyaratan

Untuk menjalankan DBCC FREEPROCCACHEatau DBCC FREESYSTEMCACHEakun Anda memerlukan izin ALTER SERVER STATE.

Referensi

Gubernur Sumber Daya

Apakah AWS RDS memungkinkan pengaturan sumber daya gubernur? Jika ya, maka sintaksnya adalah:

DBCC FREEPROCCACHE ('<pool_name>'). 

Cari tahu apakah Anda memiliki kolam dengan:

SELECT * FROM sys.dm_resource_governor_resource_pools

Memverifikasi izin

Jalankan perintah berikut untuk menentukan apakah Anda memiliki izin ini:

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

Keterbatasan / Pembatasan

Ada beberapa batasan pada izin yang diberikan kepada administrator AWS RDS instance seperti yang didokumentasikan dalam artikel Microsoft SQL Server di Amazon RDS di bab Microsoft SQL Server Security

Berikut gambaran umum:

Peran tingkat server berikut saat ini tidak tersedia di Amazon RDS:

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

Izin tingkat server berikut ini tidak tersedia pada contoh SQL Server DB:

  • OPERASI BULK ADMINISTER
  • ALTER KREDENTIAL APAPUN
  • ALTER PEMBERITAHUAN ACARA APAPUN
  • ALTER SESI ACARA APA PUN
  • ALTER AUDIT SERVER APA PUN
  • ALTER SUMBER DAYA
  • PENGATURAN ALTER (Anda dapat menggunakan API Grup Parameter DB untuk memodifikasi parameter. Untuk informasi lebih lanjut, lihat Bekerja dengan Grup Parameter DB.
  • SERVER OTENTIK
  • CONTROL_SERVER
  • BUAT PEMBERITAHUAN ACARA DDL
  • BUAT ENDPOINT
  • BUATLAH PERINGATAN PERISTIWA ACARA
  • PERAKITAN AKSES EKSTERNAL
  • SHUTDOWN (Anda dapat menggunakan opsi reboot RDS sebagai gantinya)
  • PERAKITAN TIDAK AMAN
  • ALTER KELOMPOK KETERSEDIAAN APA SAJA (Hanya SQL Server 2012)
  • BUAT KELOMPOK KETERSEDIAAN APA SAJA (Hanya SQL Server 2012)

Pembatasan / pembatasan ini mungkin telah berubah sejak dokumen diterbitkan.

Sumber daya lainnya

Brent Ozar menulis artikel " SQL Server RDS " di mana ia mencatat bahwa ...

Banyak perintah DBCC yang tidak berfungsi sama sekali - DBCC DBINFOdan DBCC LOGINFOditolak secara eksplisit. Namun, saya menemukan bahwa saya dapat berlari DBCC FREEPROCCACHEsesering yang saya inginkan.

Ingatlah bahwa batasan ini dapat berubah seiring waktu - fitur baru ditambahkan secara berkala.

Dukungan Amazon

Jika akun Anda memiliki izin yang diperlukan dan Anda tidak dapat membebaskan cache, maka Anda mungkin ingin membuka tiket dukungan dengan Amazon.

John alias hot2use
sumber
Pertanyaan yang diperbarui dengan detail lebih lanjut berdasarkan ini. Terima kasih atas tanggapan Anda yang penuh perhatian dan terperinci. Saya mengalami masalah izin dengan hal-hal lain di RDS, tetapi ini harus didukung. Saya akan menghubungi Dukungan Amazon hari ini jika saya tidak mendapatkan banyak kegiatan di sini. Tampaknya lebih seperti masalah SQL Server daripada masalah RDS, dan saya tidak tahu seberapa luas atau spesifik dukungan mereka akan dibandingkan dengan komunitas yang baik ini!
Professional Sounding Name
1
Saya menghargai umpan balik Anda. Saya kira Anda mungkin ingin membuka tiket dengan Amazon atau Microsoft karena tampaknya tidak ada yang berhasil. Dan sekali lagi, itu mungkin bug atau fitur (batasan karena ....).
John aka hot2use