আমি কীভাবে সক্রিয় এসকিউএল সার্ভার সংযোগগুলি দেখতে পাচ্ছি?


298

আমি এসকিউএল সার্ভার 2008 এন্টারপ্রাইজ ব্যবহার করছি। আমি কোনও সক্রিয় এসকিউএল সার্ভার সংযোগ এবং সমস্ত সংযোগের সম্পর্কিত তথ্য দেখতে চাই, যেমন আইপি ঠিকানা, কোন ডাটাবেস বা কোনও কিছুর সাথে সংযোগ স্থাপন করে।

এই সমস্যাটি সমাধান করার জন্য কি বিদ্যমান আদেশ রয়েছে?



sys.dm_exec_sessions, সেশন আইডি চেক করতে> 50
শিওয়ানগিনি

উত্তর:


354

আপনি sp_whoসঞ্চিত পদ্ধতিটি ব্যবহার করতে পারেন ।

মাইক্রোসফ্ট এসকিউএল সার্ভার ডেটাবেস ইঞ্জিনের একটি ইভেন্টে বর্তমান ব্যবহারকারী, সেশন এবং প্রক্রিয়াগুলি সম্পর্কে তথ্য সরবরাহ করে। নিষ্ক্রিয় নয়, নির্দিষ্ট ব্যবহারকারীর সাথে সম্পর্কিত বা নির্দিষ্ট সেশনের সাথে সম্পর্কিত এমন প্রক্রিয়াগুলি ফিরিয়ে দিতে তথ্যগুলি ফিল্টার করা যেতে পারে।


9
যখন আপনাকে নির্দিষ্ট ডিবি-র জন্য ফিল্টার করতে হয় sys.sysprocesses থেকে নির্বাচন করা ভাল
ইমান

আমি কীভাবে কেবল নির্দিষ্ট ডেটাবেসগুলির জন্য একটি ফিল্টার যুক্ত করব? কোথায় Dbname = 'ডাটাবেস নাম' ?? আমি এটি চেষ্টা করেছিলাম এবং আমি একটি ত্রুটি পেয়েছি
NULL.Dude

1
@ জিও ডুড, Abমান আবিদির অর্থ সিএস.সাইস প্রসেসেসগুলি থেকে আপনার নিজের নির্বাচিত ক্যোয়ারীটি তৈরি করা এবং সেই ক্যোয়ারীর যেখানে একটি ক্লজ যুক্ত করা। আপনাকে ডিবিডে ফিল্টার করতে হবে। আপনি সিস.ড্যাটাবেসগুলিতে ডাটাবেস আইডি খুঁজে পেতে পারেন (বা আপনি এই দুটিতে যোগ দিতে পারেন)।
bvgheluwe

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

মাইক্রোসফ্ট ডকুমেন্টেশন sys.sysprocesses জন্য দেখুন


5
জিনিসগুলি স্বয়ংক্রিয় করার সময়, এই ক্যোয়ারীটি sp_ who এর চেয়ে বেশি প্রদর্শিত হতে পারে যা প্রদর্শিত হওয়ার দিকে আরও বেশি আকৃষ্ট হয়।
কলিন

এটি আমার পছন্দের পদ্ধতি, তবে এটি ওপির প্রশ্নের পুরোপুরি উত্তর দেয় না। যোগ সুপারিশ hostnameকরতে SELECTএবং GROUP BYক্লজ তা দেখতে ক্লায়েন্ট সংযুক্ত। এছাড়াও আমি কেবল এমএসএফটাই টাইপো বুঝতে পেরেছি loginame- কলামের নামগুলি 8 টি অক্ষরের মধ্যে সীমাবদ্ধ থাকার সময় থেকে এটি কোনও শিল্পকর্ম? lol
অযৌক্তিক

13
sys.sysprocesses এসকিউএল সার্ভারের আরও সাম্প্রতিক সংস্করণগুলিতে হ্রাস করা হয়েছে । এটি এই তিনটি পরিচালনা দর্শনকে ম্যাপ করে: sys.dm_exec_connifications, sys.dm_exec_sessions এবং sys.dm_exec_requests।
মাইক শেরিল 'ক্যাট রিকল'

আমি পছন্দ করিORDER BY 1, 2 DESC, 3
স্লারতিদান

56

এছাড়াও sp_who, আপনি "অননুমোদিত" sp_who2সিস্টেম সঞ্চিত পদ্ধতিও ব্যবহার করতে পারেন যা আপনাকে আরও বিশদ তথ্য দেয়। Sp_Wo এবং sp_ who2 এর মধ্যে পার্থক্য দেখুন ।


16
ডিবিও ফার্স্টের সাথে কে যুক্ত?
কার্ল জি

44

সরঞ্জামদণ্ডে "ক্রিয়াকলাপ মনিটর" আইকনটি ক্লিক করুন ...

থারস্টেনের মন্তব্য থেকে:

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে সার্ভারে ডান ক্লিক করুন, প্রসঙ্গ মেনু থেকে "ক্রিয়াকলাপ মনিটর" চয়ন করুন বা কীবোর্ড শর্টকাট Ctrl+ Alt+ ব্যবহার করুন A


12
এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে, সার্ভারে ডান ক্লিক করুন, প্রসঙ্গ মেনু থেকে "ক্রিয়াকলাপ মনিটর" চয়ন করুন -আর-কীবোর্ড শর্টকাট Ctrl + Alt + A ব্যবহার করুন
থারস্টেন হোগলিন

ভাল বিকল্প, তবে এর জন্য sys.sysprocesses থেকে DB_NAME (dbid) এক্সট্রাকশন তুলনায় আরও প্রাইভেলিজ প্রয়োজন।
ডের জিঞ্জার

25

ডাটাবেসের সাথে সংযুক্ত সমস্ত সেশনগুলি অনুসন্ধান করার জন্য নীচে আমার স্ক্রিপ্টটি দেওয়া আছে এবং আপনি পরীক্ষা করতে পারেন যে এই সেশনগুলি কোনও I / O করছে কিনা এবং সেগুলি হত্যার বিকল্প রয়েছে কি না।

স্ক্রিপ্ট প্রতিটি সেশনের স্থিতি প্রদর্শন করে।

নীচে দেখুন।

--==============================================================================
-- 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

--==============================================================================

13

আমি এটি একসাথে ছুঁড়েছি যাতে আপনি ফলাফল সম্পর্কে কিছু জিজ্ঞাসা করতে পারেন

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

sys.sysprocesses অবচিত করা হয়েছে
মার্সেলো মিয়োরেলি

5

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;

4

আপনি নিম্নলিখিত টি-এসকিউএল কমান্ডটি সম্পাদন করতে পারেন:

SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.