пятница, 22 ноября 2019 г.

Мониторинг SQL server

Статья про мониторинг использования памяти, метрики буферного кэша, DROPCLEANBUFFERS, средняя продолжительность жизни страниц памяти


SQL Server In-Memory database internal memory structure monitoring

Полезные скрипты для оценки занимаемой памяти

IF
(
    SELECT COUNT(1)
    FROM sys.data_spaces
    WHERE type = 'FX'
) > 0
    BEGIN
        SELECT OBJECT_NAME(object_id) AS tblName,
               CAST(memory_used_by_table_kb / 1024.00 AS DECIMAL(10, 2)) [Total used Memory MB],
               CAST(memory_allocated_for_table_kb / 1024.00 AS DECIMAL(10, 2)) - CAST(memory_used_by_table_kb / 1024.00 AS DECIMAL(10, 2)) [Total Unused Memory MB],
               CAST(memory_used_by_indexes_kb / 1024.00 AS DECIMAL(10, 2)) [Index used Memory MB],
               CAST(memory_allocated_for_indexes_kb / 1024.00 AS DECIMAL(10, 2)) - CAST(memory_used_by_indexes_kb / 1024.00 AS DECIMAL(10, 2)) [Index Unused Memory MB]
        FROM sys.dm_db_xtp_table_memory_stats;
    END;

Место, занимаемое таблицами

select
    s.Name as SchemaName
    ,t.NAME as TableName
    ,p.rows as RowCounts
    ,SUM(a.total_pages) * 8 as TotalSpaceKB
    ,SUM(a.used_pages) * 8 as UsedSpaceKB
    ,(SUM(a.total_pages) - SUM(a.used_pages)) * 8 as UnusedSpaceKB
from
    sys.tables t
     inner join sys.schemas s on
         s.schema_id = t.schema_id
    inner join sys.indexes i on
        t.OBJECT_ID = i.object_id
    inner join sys.partitions p on
        i.object_id = p.OBJECT_ID and i.index_id = p.index_id
    inner join sys.allocation_units a on
        p.partition_id = a.container_id
where
    t.NAME not like 'dt%' -- filter out system tables for diagramming
    and t.is_ms_shipped = 0
    and i.OBJECT_ID > 255
group by
    t.Name
    ,s.Name
    ,p.Rows
order by
    s.Name
    ,t.Name
Место, занимаемое индексами

select distinct
    OBJECT_NAME(i.OBJECT_ID) as TableName
    ,i.name as IndexName
    ,i.index_id as IndexID
    ,8 * SUM(a.used_pages) as 'Indexsize(KB)'
from
    sys.indexes as i
    join sys.partitions as p on
        p.OBJECT_ID = i.OBJECT_ID and p.index_id = i.index_id
     join sys.allocation_units as a on
         a.container_id = p.partition_id
where
     i.name is not null
group by
    i.OBJECT_ID
     ,i.index_id
    ,i.name
having
(
    sum(a.used_pages) != 0
)
order by
    OBJECT_NAME(i.OBJECT_ID)
    ,i.index_id

Комментариев нет:

Отправить комментарий