当前位置:Gxlcms > 数据库问题 > SQL常用性能相关脚本

SQL常用性能相关脚本

时间:2021-07-01 10:21:17 帮助过:3人阅读

查询当前的事务 select t2.session_id as SPID, t2.transaction_id, transaction_begin_time, N已执行+ltrim(datediff(mi,transaction_begin_time,getdate()))+N分钟 as mi, case transaction_type when 1 then N读/写事务 when 2 then N只读事务 when 3 then N系统事务 when 4 then N分布式事务 end tran_Type, case transaction_state when 0 then N事务尚未完全初始化 when 1 then N事务已初始化但尚未启动 when 2 then N事务处于活动状态 when 3 then N事务已结束。该状态用于只读事务 when 4 then N已对分布式事务启动提交进程 when 5 then N事务处于准备就绪状态且等待解析 when 6 then N事务已提交 when 7 then N事务正在被回滚 when 0 then N事务已回滚 end transaction_state, client_net_address, client_tcp_port, program_name, t2.text from sys.dm_tran_active_transactions t1 join ( select a.session_id, transaction_id, client_net_address, client_tcp_port, text,c.program_name from sys.dm_tran_session_transactions a join ( select session_id,a2.text,client_net_address,client_tcp_port from sys.dm_exec_connections a1 cross apply sys.dm_exec_sql_text(a1.most_recent_sql_Handle) a2 ) b on a.session_id=b.session_id left join sys.dm_exec_sessions c on a.session_id=c.session_id where is_user_transaction=1 )t2 on t1.transaction_ID=t2.transaction_ID ORDER BY t2.transaction_id ----索引执行情况 SELECT objects.name , databases.name , indexes.name , user_seeks , user_scans , user_lookups , partition_stats.row_count FROM sys.dm_db_index_usage_stats stats LEFT JOIN sys.objects objects ON stats.object_id = objects.object_id LEFT JOIN sys.databases databases ON databases.database_id = stats.database_id LEFT JOIN sys.indexes indexes ON indexes.index_id = stats.index_id AND stats.object_id = indexes.object_id LEFT JOIN sys.dm_db_partition_stats partition_stats ON stats.object_id = partition_stats.object_id AND indexes.index_id = partition_stats.index_id WHERE 1 = 1 --AND databases.database_id = 7 AND objects.name IS NOT NULL AND indexes.name IS NOT NULL AND user_scans>0 ORDER BY user_scans DESC ,stats.object_id ,indexes.index_id ----最占用CPU SELECT TOP 100 execution_count, total_logical_reads /execution_count AS [Avg Logical Reads], total_elapsed_time /execution_count AS [Avg Elapsed Time], db_name(st.dbid) as [database name], object_name(st.dbid) as [object name], object_name(st.objectid) as [object name 1], SUBSTRING(st.text, (qs.statement_start_offset / 2) + 1, ((CASE statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st WHERE execution_count > 100 AND qs.creation_time > dateadd(day,-3,getdate()) ORDER BY 1 DESC; ---执行时间最长的命令 SELECT TOP 10 COALESCE(DB_NAME(st.dbid), DB_NAME(CAST(pa.value as int))+*,Resource) AS DBNAME, SUBSTRING(text, -- starting value for substring CASE WHEN statement_start_offset = 0 OR statement_start_offset IS NULL THEN 1 ELSE statement_start_offset/2 + 1 END, -- ending value for substring CASE WHEN statement_end_offset = 0 OR statement_end_offset = -1 OR statement_end_offset IS NULL THEN LEN(text) ELSE statement_end_offset/2 END - CASE WHEN statement_start_offset = 0 OR statement_start_offset IS NULL THEN 1 ELSE statement_start_offset/2 END + 1 ) AS TSQL, total_logical_reads/execution_count AS AVG_LOGICAL_READS FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_sql_text(sql_handle) st OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) pa WHERE attribute = dbid ORDER BY AVG_LOGICAL_READS DESC ; ----缺索引 SELECT TOP 30 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) , avg_user_impact, TableName = statement, [EqualityUsage] = equality_columns , [InequalityUsage] = inequality_columns, [Include Cloumns] = included_columns FROM sys.dm_db_missing_index_groups g INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle ORDER BY [Total Cost] DESC; --经常更新却很少使用的索引 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT DB_NAME() AS DatabaseName , SCHEMA_NAME(o.Schema_ID) AS SchemaName , OBJECT_NAME(s.[object_id]) AS TableName , i.name AS IndexName , s.user_updates , s.system_seeks + s.system_scans + s.system_lookups AS [System usage] INTO #TempUnusedIndexes FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id INNER JOIN sys.objects o ON i.object_id = O.object_id WHERE 1=2 EXEC sp_MSForEachDB USE [?]; INSERT INTO #TempUnusedIndexes SELECT TOP 20 DB_NAME() AS DatabaseName , SCHEMA_NAME(o.Schema_ID) AS SchemaName , OBJECT_NAME(s.[object_id]) AS TableName , i.name AS IndexName , s.user_updates , s.system_seeks + s.system_scans + s.system_lookups AS [System usage] FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id INNER JOIN sys.objects o ON i.object_id = O.object_id WHERE s.database_id = DB_ID() AND OBJECTPROPERTY(s.[object_id], ‘‘IsMsShipped‘‘) = 0 AND s.user_seeks = 0 AND s.user_scans = 0 AND s.user_lookups = 0 AND i.name IS NOT NULL ORDER BY s.user_updates DESC SELECT TOP 20 * FROM #TempUnusedIndexes WHERE DatabaseName = agilepoint50 ORDER BY [user_updates] DESC DROP TABLE #TempUnusedIndexes ---维护代价最高的索引 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT DB_NAME() AS DatabaseName , SCHEMA_NAME(o.Schema_ID) AS SchemaName , OBJECT_NAME(s.[object_id]) AS TableName , i.name AS IndexName , (s.user_updates ) AS [update usage] , (s.user_seeks + s.user_scans + s.user_lookups) AS [Retrieval usage] , (s.user_updates) - (s.user_seeks + s.user_scans + s.user_lookups) AS [Maintenance cost] , s.system_seeks + s.system_scans + s.system_lookups AS [System usage] , s.last_user_seek , s.last_user_scan , s.last_user_lookup INTO #TempMaintenanceCost FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id INNER JOIN sys.objects o ON i.object_id = O.object_id WHERE 1=2 EXEC sp_MSForEachDB USE [?]; INSERT INTO #TempMaintenanceCost SELECT TOP 20 DB_NAME() AS DatabaseName , SCHEMA_NAME(o.Schema_ID) AS SchemaName , OBJECT_NAME(s.[object_id]) AS TableName , i.name AS IndexName , (s.user_updates ) AS [update usage] , (s.user_seeks + s.user_scans + s.user_lookups) AS [Retrieval usage] , (s.user_updates) - (s.user_seeks + user_scans + s.user_lookups) AS [Maintenance cost] , s.system_seeks + s.system_scans + s.system_lookups AS [System usage] , s.last_user_seek , s.last_user_scan , s.last_user_lookup FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id INNER JOIN sys.objects o ON i.object_id = O.object_id WHERE s.database_id = DB_ID() AND i.name IS NOT NULL AND OBJECTPROPERTY(s.[object_id], ‘‘IsMsShipped‘‘) = 0 AND (s.user_seeks + s.user_scans + s.user_lookups) > 0 ORDER BY [Maintenance cost] DESC SELECT top 20 * FROM #TempMaintenanceCost WHERE DatabaseName =agilepoint50 ORDER BY [Maintenance cost] DESC DROP TABLE #TempMaintenanceCost ---表及数据库的空间占用 set nocount on declare @db varchar(20) set @db = db_name() dbcc updateusage(@db) with no_infomsgs go create table #tblspace ( 数据表名称 varchar(50) null, 记录笔数 int null, 保留空间 varchar(15) null, 数据使用空间 varchar(15) null, 索引使用空间 varchar(15) null, 未使用空间 varchar(15) null, ) declare @tblname varchar(50) declare curtbls cursor for select table_name from information_schema.tables where table_type = base table open curtbls Fetch next from curtbls into @tblname while @@fetch_status = 0 begin insert #tblspace exec sp_spaceused @tblname fetch next from curtbls into @tblname end close curtbls deallocate curtbls select * from #tblspace order by convert(int,left(保留空间,len(保留空间)-2)) desc drop table #tblspace

 

SQL常用性能相关脚本

标签:

人气教程排行