Могу ли я очистить буфер для некоторой указанной базы данных вместо всего сервера SQL - PullRequest
7 голосов
/ 06 апреля 2011

из того, что я знаю, если я выполню 'DBCC FREEPROCCACHE' и 'DBCC DROPCLEANBUFFERS', буфер всего сервера будет очищен. Интересно, есть ли способ очистить буфер только указанной базы данных. следовательно, запрос для других баз данных не будет затронут.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вы можете удалить все планы выполнения из одной базы данных, используя DBCC FLUSHPROCINDB(<db_id>).Я не знаю ни одной подобной команды для очистки определенных страниц из буферного кеша.

Однако вы можете на мгновение отключить базу данных, а затем снова подключиться к ней, чтобы очистить кеш планов и буферадля базы данных, если ситуация позволяет это.

1 голос
/ 06 сентября 2017

Не возможно с FREEPROCCACHE или DBCC FREEPROCCACHE

Согласно msdn https://msdn.microsoft.com/en-us/library/cc293622.aspx

DBCC FREEPROCCACHE Эта команда удаляет все кэшированные планы из памяти DBCC FLUSHPROCINDB (<dbid>) Эта команда позволяет вам указать конкретный идентификатор базы данных, а затем очищает все планы из этой конкретной базы данных.

идентификатор базы данных можно получить таким образом

DECLARE @intDBID INT;
SET @intDBID = (SELECT [dbid] 
                FROM master.dbo.sysdatabases 
                WHERE name = 'AdventureWorks');

-- Flush the procedure cache for one database only
DBCC FLUSHPROCINDB (@intDBID);
...