it-swarm.dev

كيف يمكنني رؤية اتصالات SQL Server النشطة؟

أنا أستخدم SQL Server 2008 Enterprise. أريد أن أرى أي اتصالات SQL Server نشطة والمعلومات ذات الصلة بجميع الاتصالات ، مثل عنوان IP أو الاتصال بقاعدة البيانات أو أي شيء.

هل هناك أوامر موجودة لحل هذه المشكلة؟

252
George2

يمكنك استخدام sp_who الإجراء المخزن.

يوفر معلومات حول المستخدمين الحاليين وجلسات العمل والعمليات في مثيل Microsoft SQL Server Database Engine. يمكن تصفية المعلومات لإرجاع فقط تلك العمليات غير الخاملة أو التي تنتمي إلى مستخدم معين أو التي تنتمي إلى جلسة محددة.

308
Mehrdad Afshari
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

راجع أيضًا وثائق Microsoft الخاصة بـ sys.sysprocesses .

299
Syed Umar Ahmed

بصرف النظر عن sp_who ، يمكنك أيضًا استخدام الإجراء "غير الموثق" لنظام sp_who2 المخزن والذي يوفر لك معلومات أكثر تفصيلاً. راجعالفرق بين sp_who و sp_who2.

47
Sklivvz

انقر على أيقونة "مراقبة النشاط" في شريط الأدوات ...

من تعليقات ثورستن:

في SQL Server Management Studio ، انقر بزر الماوس الأيمن على الخادم ، واختر "مراقب النشاط" من قائمة السياق - أو استخدم اختصار لوحة المفاتيح Ctrl + Alt + A.

38
Fernando Santos

في ما يلي نص برمجي للعثور على جميع الجلسات المتصلة بقاعدة بيانات ويمكنك التحقق مما إذا كانت تلك الجلسات تقوم بأي إدخال/إخراج وهناك خيار لقتلها.

يظهر النص أيضًا حالة كل جلسة.

إلقاء نظرة أدناه.

--==============================================================================
-- See who is connected to the database.
-- Analyse what each spid is doing, reads and writes.
-- If safe you can copy and paste the killcommand - last column.
-- Marcelo Miorelli
-- 18-july-2017 - London (UK)
-- Tested on SQL Server 2016.
--==============================================================================
USE master
go
SELECT
     sdes.session_id
    ,sdes.login_time
    ,sdes.last_request_start_time
    ,sdes.last_request_end_time
    ,sdes.is_user_process
    ,sdes.Host_name
    ,sdes.program_name
    ,sdes.login_name
    ,sdes.status

    ,sdec.num_reads
    ,sdec.num_writes
    ,sdec.last_read
    ,sdec.last_write
    ,sdes.reads
    ,sdes.logical_reads
    ,sdes.writes

    ,sdest.DatabaseName
    ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

    SELECT DB_NAME(dbid) AS DatabaseName
        ,OBJECT_NAME(objectid) AS ObjName
        ,COALESCE((
            SELECT TEXT AS [processing-instruction(definition)]
            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
            FOR XML PATH('')
                ,TYPE
            ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

) sdest
WHERE sdes.session_id <> @@SPID
  AND sdest.DatabaseName ='yourdatabasename'
--ORDER BY sdes.last_request_start_time DESC

--==============================================================================
19
marcello miorelli

رميت هذا معًا حتى تتمكن من القيام ببعض الاستفسار عن النتائج

Declare @dbName varchar(150)
set @dbName = '[YOURDATABASENAME]'

--Total machine connections
--SELECT  COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0

--Available connections
DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL)
INSERT INTO @SPWHO1 
    SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame
SELECT * FROM @SPWHO1 WHERE DBName = @dbName

--Running connections
DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL)
INSERT INTO @SPWHO2 
    EXEC sp_who2 'Active'
SELECT * FROM @SPWHO2 WHERE DBName = @dbName
12
Don Rolling

يُعد استعلام MS الذي يوضح استخدام الأمر " kill " مفيدًا جدًا في توفير معلومات الاتصال:

SELECT conn.session_id, Host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

HTH ، التحيات ،

0
Zalakain