数据库SQL优化分析查询语句总结
方法一:
SELECT TOP 10 TEXT AS 'SQL Statement' ,last_execution_time AS 'Last Execution Time' ,(total_logical_reads + total_physical_reads + total_logical_writes) / execution_count AS [Average IO] ,(total_worker_time / execution_count) / 1000000.0 AS [Average CPU Time (sec)] ,(total_elapsed_time / execution_count) / 1000000.0 AS [Average Elapsed Time (sec)] ,execution_count AS "Execution Count" ,qs.total_physical_reads,qs.total_logical_writes ,qp.query_plan AS "Query Plan" FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp ORDER BY total_elapsed_time / execution_count DESC |
示例:
方法二:
SELECT DB_ID(DB.dbid) '数据库名' , OBJECT_ID(db.objectid) '对象' , QS.creation_time '编译计划的时间' , QS.last_execution_time '上次执行计划的时间' , QS.execution_count '执行的次数' , QS.total_elapsed_time / 1000 '占用的总时间(秒)' , QS.total_physical_reads '物理读取总次数' , QS.total_worker_time / 1000 'CPU 时间总量(秒)' , QS.total_logical_writes '逻辑写入总次数' , QS.total_logical_reads N '逻辑读取总次数' , QS.total_elapsed_time / 1000 N '总花费时间(秒)' , 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 '执行语句' FROM sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) AS ST INNER JOIN ( SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) ) DB ON QS.plan_handle = DB.plan_handle where 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) not like '%fetch%' ORDER BY QS.total_elapsed_time / 1000 DESC |
示例:
方法三:
SELECT s2.dbid, ( SELECT TOP 1 SUBSTRING (s2.text,statement_start_offset / 2+1 , ( ( CASE WHEN statement_end_offset = -1 THEN (LEN( CONVERT (nvarchar( max ),s2.text)) * 2) ELSE statement_end_offset END ) - statement_start_offset) / 2+1)) AS sql_statement, execution_count, plan_generation_num, last_execution_time, total_worker_time, last_worker_time, min_worker_time, max_worker_time, total_physical_reads, last_physical_reads, min_physical_reads, max_physical_reads, total_logical_writes, last_logical_writes, min_logical_writes, max_logical_writes FROM sys.dm_exec_query_stats AS s1 CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 WHERE s2.objectid is null ORDER BY s1.total_worker_time desc |
示例:
方式四:
选取了前10个最耗CPU时间的会话:
SELECT TOP 10 [session_id], [request_id], [start_time] AS '开始时间' , [status] AS '状态' , [command] AS '命令' , dest.[text] AS 'sql语句' , DB_NAME([database_id]) AS '数据库名' , [blocking_session_id] AS '正在阻塞其他会话的会话ID' , [wait_type] AS '等待资源类型' , [wait_time] AS '等待时间' , [wait_resource] AS '等待的资源' , [reads] AS '物理读次数' , [writes] AS '写次数' , [logical_reads] AS '逻辑读次数' , [row_count] AS '返回结果行数' FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest WHERE [session_id]>50 AND DB_NAME(der.[database_id])= 'gposdb' ORDER BY [cpu_time] DESC |
示例:
资料来源:
http://www.cnblogs.com/sdadx/p/6510213.html
http://blog.csdn.net/tianlianchao1982/article/details/5562035
https://www.cnblogs.com/xunziji/archive/2012/03/20/2408348.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端