注册 登录
编程论坛 SQL Server论坛

关于数据库dmv的问题

上帝之允 发布于 2010-10-27 19:53, 664 次点击
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
        ((CASE qs.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
ORDER BY total_worker_time/execution_count DESC;
选择占用cpu最多的前5位查询
中substring中是什么意思,有些理解不了
谢谢
3 回复
#2
png2010-10-28 06:07
跟这段对比一下运行结果会有帮助吗?

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
    st.text,
    qs.statement_start_offset,
    qs.statement_end_offset
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC
#3
上帝之允2010-10-28 12:45
就是substring中的无法理解好像,怎么这么麻烦,还是不太懂
#4
png2010-10-29 05:40
举个例子 substring ('abcdefghij', 4, 3) 得出 'def'

原语举中的 st.text 相当于 'abcdefghij'
原语举中的 (qs.statement_start_offset/2)+1 相当于 4
原语举中的         ((CASE qs.statement_end_offset
                      WHEN -1 THEN DATALENGTH(st.text)
                      ELSE qs.statement_end_offset
                      END - qs.statement_start_offset)/2) + 1
相当于 3

1