Como ver o que é armazenado em cache na memória no SQL Server 2008?

1

Existe uma maneira de descobrir o que é armazenado em cache no SQL Server 2008 R2? Eu encontrei o seguinte artigo legal aqui:

link

No entanto, gostaria de saber quantos dados (por exemplo, em porcentagem e KB) são armazenados em cada tabela e índice.

Existem alguns mecanismos simples para obter esses dados?

    
por Ondrej Peterka 31.05.2013 / 15:00

2 respostas

1

O DMV sys.dm_os_buffer_descriptors tem duas colunas que serão relevantes aqui: database_id e allocation_unit_id. Com o allocation_unit_id, você pode passar por sys.partitions para sys.indexes e, finalmente, para sys.objects. Isso parece obter a contagem por objeto dentro do contexto do banco de dados atual. Adaptar conforme necessário

SELECT
  s.name   AS [schema_name]
  , o.name AS [object_name]
  , i.name AS [index_name]
  , COUNT( * )
FROM       sys.dm_os_buffer_descriptors AS buff
INNER JOIN sys.[allocation_units] AS au
        ON buff.allocation_unit_id = au.allocation_unit_id
INNER JOIN sys.partitions part
        ON ( au.type IN ( 1, 3 )
             AND au.[container_id] = part.[hobt_id] )
        OR ( au.type = 2
             AND au.[container_id] = part.[partition_id] )
INNER JOIN sys.data_spaces ds
        ON au.[data_space_id] = [ds].[data_space_id]
INNER JOIN sys.[indexes] AS i
        ON part.[object_id] = i.[object_id]
       AND part.[index_id] = i.[index_id]
INNER JOIN sys.[objects] AS o
        ON [i].[object_id] = [o].[object_id]
INNER JOIN sys.schemas s
        ON [o].[schema_id] = [s].[schema_id]
WHERE      o.is_ms_shipped = 0
       AND buff.database_id = DB_ID( )
GROUP      BY s.name
              , o.name
              , i.name
ORDER      BY s.name
              , o.name
              , i.name
    
por 31.05.2013 / 16:18
0

Aqui está uma declaração que retorna algumas informações de tamanho ...

-- Breaks down buffers by object (table, index) in the buffer pool
SELECT  OBJECT_NAME(p.[object_id]) AS [ObjectName] ,
        p.index_id ,
        COUNT(*) / 128 AS [Buffer size(MB)] ,
        COUNT(*) AS [Buffer_count]
FROM    sys.allocation_units AS a
        INNER JOIN sys.dm_os_buffer_descriptors
                 AS b ON a.allocation_unit_id = b.allocation_unit_id
        INNER JOIN sys.partitions AS p ON a.container_id = p.hobt_id
WHERE   b.database_id = DB_ID()
        AND p.[object_id] > 100 -- exclude system objects
GROUP BY p.[object_id] ,
        p.index_id
ORDER BY buffer_count DESC ;
    
por 06.06.2013 / 20:11