数据库是sql2005
现在想监控数据库的状态,需要查看数据库的一些内容1.执行过得sql占内存状态
目前知道的方法是:SELECT TOP 50
 total_worker_time/execution_count AS [Avg CPU Time],
 (SELECT SUBSTRING(text,statement_start_offset/2,
(CASE WHEN statement_end_offset = -1 
then LEN(CONVERT(nvarchar(max), text)) * 2 
ELSE statement_end_offset end 
-statement_start_offset)/2) 
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text ,*
 FROM sys.dm_exec_query_stats 
 ORDER BY [Avg CPU Time] DESC这个没什么问题,但是少了一点信息,想知道是那个用户执行的,这个是我的问题重点,请指点2.目前数据库的文件大小信息我用sys.database_files来看,如果有更好的更全的代码,请留下,谢谢没办法,只让我发100分

解决方案 »

  1.   

    先回复你第二个问题:
    http://www.mssqltips.com/sqlservertip/1037/system-information-in-sql-server-2000-vs-sql-server-2005/
      

  2.   

    http://blog.csdn.net/tanleittl/article/details/7934234
    有木有耐心看完这篇
      

  3.   

    第一个问题:加上红字那部分,就可以获得spid,有了那个,你就可以连带获取其他信息。
    SELECT TOP 50
            total_worker_time / execution_count AS [Avg CPU Time] ,
            ( SELECT    SUBSTRING(text, statement_start_offset / 2,
                                  ( CASE WHEN statement_end_offset = -1
                                         THEN LEN(CONVERT(NVARCHAR(MAX), text))
                                              * 2
                                         ELSE statement_end_offset
                                    END - statement_start_offset ) / 2)
              FROM      sys.dm_exec_sql_text(a.sql_handle)
            ) AS query_text ,
            A.* ,
            b.spidFROM    sys.dm_exec_query_stats a
            INNER JOIN sys.sysprocesses b ON A.sql_handle = b.sql_handleORDER BY [Avg CPU Time] DESC
      

  4.   

    格式化一下:
    SELECT TOP 50
            total_worker_time / execution_count AS [Avg CPU Time] ,
            ( SELECT    SUBSTRING(text, statement_start_offset / 2,
                                  ( CASE WHEN statement_end_offset = -1
                                         THEN LEN(CONVERT(NVARCHAR(MAX), text))
                                              * 2
                                         ELSE statement_end_offset
                                    END - statement_start_offset ) / 2)
              FROM      sys.dm_exec_sql_text(a.sql_handle)
            ) AS query_text ,
            A.* ,
            b.spid
    FROM    sys.dm_exec_query_stats a
            INNER JOIN sys.sysprocesses b ON A.sql_handle = b.sql_handle
    ORDER BY [Avg CPU Time] DESC
      

  5.   

    上面的语句是查询CPU使用情况的吧,不是内存。 而且个人觉得sys.dm_exec_query_stats 是不能和sys.sysprocesses 相关联的,因为两个VIEW中数据范围是不一样的。 sys.sysprocesses:Contains information about processes that are running on an instance of sys.dm_exec_query_stats:Returns aggregate performance statistics for cached query plans . The view contains one row per query statement within the cached plan, and the lifetime of the rows are tied to the plan itself
      

  6.   

    你如果想查CPU耗费多的语句可以用Profiler Trace或者Extend Events,可以追踪到HOSTNAME,LOGINID。