如题:
如何用T-SQL 查看在在访问数据库的进程,那些用户是用户进程,那些是阻塞进程?

解决方案 »

  1.   

    Select distinct spid,blocked from master..sysprocesses where blocked <> 0 
    其中spid是等待的进程,blocked是引起阻塞的进程
      

  2.   

    2000以后才适用:
    -- Connectivity informations 
     ;WITH con AS 
        (SELECT SES.host_name AS HostName 
               ,CON.client_net_address AS ClientAddress 
               ,SES.login_name AS LoginName 
               ,SES.program_name AS ProgramName 
               ,EP.name AS ConnectionTyp 
               ,CON.net_transport AS NetTransport 
               ,CON.protocol_type AS ProtocolType 
               ,CONVERT(VARBINARY(9), CON.protocol_version) AS TDSVersionHex 
               ,SES.client_interface_name AS ClientInterface 
               ,CON.encrypt_option AS IsEncryted 
               ,CON.auth_scheme AS Auth 
         FROM sys.dm_exec_connections AS CON 
              LEFT JOIN sys.endpoints AS EP 
                  ON CON.endpoint_id = EP.endpoint_id 
              INNER JOIN sys.dm_exec_sessions as SES 
                  ON CON.session_id = SES.session_id) 
     -- Detailed list 
     SELECT * 
     FROM con 
     -- Optional filter 
     --WHERE con.ClientInterface = 'ODBC' 
     ORDER by con.TDSVersionHex,con.HostName 
             ,con.LoginName 
             ,con.ProgramName; 
      
     /* 
     -- Count of different connectivity parameters 
     SELECT COUNT(*) AS [Connections #] 
           ,COUNT(DISTINCT con.HostName) AS [Hosts #] 
           ,COUNT(DISTINCT con.LoginName) AS [Logins #] 
           ,COUNT(DISTINCT con.ProgramName) AS [Programs #] 
           ,COUNT(DISTINCT con.NetTransport) AS [NetTransport #] 
           ,COUNT(DISTINCT con.TDSVersionHex) AS [TdsVersions #] 
           ,COUNT(DISTINCT con.ClientInterface) AS [ClientInterfaces #] 
     FROM con; 
     */
    -- Current processes and their SQL statements 
     SELECT PRO.loginame AS LoginName 
           ,DB.name AS DatabaseName 
           ,PRO.[status] as ProcessStatus 
           ,PRO.cmd AS Command 
           ,PRO.last_batch AS LastBatch 
           ,PRO.cpu AS Cpu 
           ,PRO.physical_io AS PhysicalIo 
           ,SES.row_count AS [RowCount] 
           ,STM.[text] AS SQLStatement 
     FROM sys.sysprocesses AS PRO 
          INNER JOIN sys.databases AS DB 
              ON PRO.dbid = DB.database_id 
          INNER JOIN sys.dm_exec_sessions AS SES 
             ON PRO.spid = SES.session_id 
          CROSS APPLY sys.dm_exec_sql_text(PRO.sql_handle) AS STM      
     WHERE PRO.spid >= 50  -- Exclude system processes 
     ORDER BY PRO.physical_io DESC 
             ,PRO.cpu DESC;
      

  3.   

    Select distinct spid,blocked from master..sysprocesses where blocked <> 0  
    其中spid是等待的进程,blocked是引起阻塞的进程