SQL Performance


checkpoint  [seconds]

DBCC DROPCLEANBUFFERS

#TABLES WITHOUT PRIMARY KEY

USE incrLifeproNew;
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
ORDER BY [Schema], [Table];

#DATA/LOG FILE 

with fs 
as (
select database_id, type, round(size * 8.0 / 1024,2) size from sys.master_files
)
select 
    name,
    (select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeMB,
    (select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeMB
from sys.databases db
where name not in ('db1','db2')
order by LogFileSizeMB desc;


select DB_NAME(database_id)dbname,name,round(size * 8.0 /1024,2) size,type_desc,physical_name
from sys.master_files where type=1
order by size desc;

#EXPANSIVE QUERIES

SELECT TOP 50
t.text ,
execution_count ,
statement_start_offset AS stmt_start_offset ,
sql_handle ,
plan_handle ,
total_logical_reads / execution_count AS avg_logical_reads ,
total_logical_writes / execution_count AS avg_logical_writes ,
total_physical_reads / execution_count AS avg_physical_reads
FROM    sys.dm_exec_query_stats AS s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
--WHERE    DB_NAME(t.dbid) = 'SQLMonTest'
ORDER BY avg_physical_reads DESC;

#Table in buffer

SELECT
    SCHEMA_NAME(objects.schema_id) AS SchemaName,
    objects.name AS ObjectName,
    objects.type_desc AS ObjectType,
    COUNT(*) AS [Total Pages In Buffer],
    COUNT(*) * 8 / 1024 AS [Buffer Size in MB],
    SUM(CASE dm_os_buffer_descriptors.is_modified 
                WHEN 1 THEN 1 ELSE 0
        END) AS [Dirty Pages],
    SUM(CASE dm_os_buffer_descriptors.is_modified 
                WHEN 1 THEN 0 ELSE 1
        END) AS [Clean Pages],
    SUM(CASE dm_os_buffer_descriptors.is_modified 
                WHEN 1 THEN 1 ELSE 0
        END) * 8 / 1024 AS [Dirty Page (MB)],
    SUM(CASE dm_os_buffer_descriptors.is_modified 
                WHEN 1 THEN 0 ELSE 1
        END) * 8 / 1024 AS [Clean Page (MB)]
FROM sys.dm_os_buffer_descriptors
INNER JOIN sys.allocation_units ON allocation_units.allocation_unit_id = dm_os_buffer_descriptors.allocation_unit_id
INNER JOIN sys.partitions ON
    ((allocation_units.container_id = partitions.hobt_id AND type IN (1,3))
    OR (allocation_units.container_id = partitions.partition_id AND type IN (2)))
INNER JOIN sys.objects ON partitions.object_id = objects.object_id
WHERE allocation_units.type IN (1,2,3)
    AND objects.is_ms_shipped = 0 
    AND dm_os_buffer_descriptors.database_id = DB_ID()
GROUP BY objects.schema_id, objects.name, objects.type_desc
ORDER BY [Total Pages In Buffer] DESC;

https://blog.sqlauthority.com/2019/06/14/sql-server-clean-pages-and-dirty-pages-count-memory-buffer-pools/