Comment vider le cache de la mémoire tampon ou d'autres caches sans redémarrer mon instance RDS pour SQL Server ?

Lecture de 3 minute(s)
0

Je veux créer un serveur lié à partir d'une instance Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server vers SQL Server. Comment puis-je faire cela sans redémarrer mon instance de base de données ?

Brève description

Il existe plusieurs méthodes pour vider le cache de SQL Server, de l'effacement très détaillé à l'effacement complet du cache. Vous pouvez utiliser les outils suivants pour vider le cache. Tous ces outils sont disponibles avec les commandes de console de base de données (DBCC) pour SQL Server :

  • DBCC FREEPROCCACHE : effacer le cache en supprimant l'intégralité du cache du plan. Cette commande peut également supprimer des plans spécifiques ou supprimer des entrées de cache liées à un pool de ressources.
  • DBCC FREESYSTEMCACHE : En plus de supprimer des éléments du cache du plan, DBCC FREESYSTEMCACHE peut effacer d'autres caches de mémoire.
  • CONFIGURATION ÉTENDUE DE LA BASE DE DONNÉES DBCC ALTER : Cette commande est disponible à partir de SQL Server 2016.

Solution

Remarque : Il est recommandé de tester minutieusement les commandes suivantes avant de les exécuter dans votre environnement de production. Les tests permettent d'identifier les problèmes potentiels pouvant survenir lors de la mise en œuvre.

Identifier les cinq principaux caches et la mémoire utilisée

Exécuter la commande suivante pour identifier les cinq principaux caches et la mémoire utilisée :

SELECT TOP(5) name AS [Name],
SUM(pages_kb) AS [SizeKb]
FROM sys.dm_os_memory_cache_counters WITH (NOLOCK)
GROUP BY name
ORDER BY SizeKb DESC

Supprimer un plan du cache (problème de détection des paramètres)

Exécuter la commande suivante pour identifier le mauvais plan :

SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid)
AS [DatabaseName], st.text
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text LIKE N'%[search string]%' OPTION (RECOMPILE);

Exécuter l'une des commandes suivantes pour supprimer le mauvais plan :

DBCC FREEPROCCACHE (plan_handle);

ou

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE [plan_handle];

Supprimer du cache les plans préparés et selon les besoins

Si vous avez trop de plans en fonction de vos besoins dans le cache, exécutez la commande suivante pour les supprimer :

DBCC FREESYSTEMCACHE ('SQL Plans')

Vider le cache du plan pour la base de données en cours

Si vous exécutez SQL Server 2016 ou une version ultérieure, exécutez la commande suivante :

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

ou

DBCC FREESYSTEMCACHE('DatabaseName')

Si vous utilisez une version de SQL Server antérieure à SQL 2016, exécutez la commande suivante :

declare @dbid int = (select DB_ID())
DBCC FLUSHPROCINDB (@dbid);

Effacer tous les caches

DBCC FREESYSTEMCACHE('ALL')

ou

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

Remarque : La commande DBCC DROPCLEANBUFFERS est utilisée pour effacer tous les caches et la mémoire tampon. Cette commande n'est pas prise en charge dans Amazon RDS pour SQL Server car elle nécessite l'appartenance au rôle de serveur fixe sysadmin.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an