Diferença entre FreeProcCache e FreeSystemCache

12

Atualmente, eu executo DBCC FREEPROCCACHEquando desejo limpar as informações do buffer pool entre as consultas SQL em execução. No entanto, eu estava revisando esta referência ao artigo da Technet DBCC FREESYSTEMCACHE. Quais caches FREESYSTEMCACHElimpam que FREEPROCCACHEnão?

Sean Long
fonte

Respostas:

25

Quais caches o FREESYSTEMCACHE limpa que o FREEPROCCACHE não faz?

Existem muitos caches de sistema disponíveis no SQL Server. Estou me referindo ao SQL 2008R2 (como eu testei nele).

A consulta abaixo retornará todos os caches disponíveis:

--- ONLY for Educational purpose. Don't attempt to run on PROD !!

select 'DBCC freesystemcache ('+''''+name+''''+')'  from   sys.dm_os_memory_clerks group by name
-- 155 rows

então, por exemplo, você deseja limpar todos os caches que você executará

DBCC FREESYSTEMCACHE ('ALL')

para que caches específicos sejam limpos, você pode executar

DBCC FREESYSTEMCACHE ('userdatabase') -- cleans cache for specific user database
DBCC FREESYSTEMCACHE ('tempdb')  -- clears cache for tempdb
DBCC FREESYSTEMCACHE ('Temporary Tables & Table Variables') -- clears all the temp table and variables
.. and many more (see above 155 rows returned from sql server 2008R2)

Usando o FREEPROCCACHE, você não poderá limpar tudo o que foi mencionado acima nesse nível detalhado.

FREEPROCCACHE ==> de BOL

Remove todos os elementos do cache do plano, remove um plano específico do cache do plano, especificando um identificador de plano ou identificador SQL ou remove todas as entradas de cache associadas a um pool de recursos especificado.

Portanto, basicamente, você pode pensar nele relacionado apenas ao cache do plano, com a capacidade de remover planos específicos do cache com o identificador do plano e / ou o nome do pool.

Fun With DBCC FREEPROCCACHE é um blog de Glenn Berry

Kin Shah
fonte