এসকিউএল সার্ভারে চলমান প্রশ্নের তালিকা করুন List


200

বর্তমানে এমএস এসকিউএল সার্ভারে চলছে (যেগুলি এন্টারপ্রাইজ ম্যানেজার বা এসকিউএল মাধ্যমে) এবং / অথবা কে সংযুক্ত আছে তার তালিকা তৈরি করার কোনও উপায় আছে কি?

আমি মনে করি যে আমার একটি দীর্ঘতম চলমান ক্যোয়ারী আমার একটি ডাটাবেস সার্ভারে কার্যকর করা হচ্ছে এবং আমি এটি ট্র্যাক করে এটি বন্ধ করতে চাই (বা যে ব্যক্তি এটি শুরু করে চলেছেন)।

উত্তর:


203

এটি আপনাকে একটি এসকিউএল 2000 বা এসকিউএল 2005 সার্ভারে দীর্ঘতম চলমান এসপিআইডি দেখায়:

select
    P.spid
,   right(convert(varchar, 
            dateadd(ms, datediff(ms, P.last_batch, getdate()), '1900-01-01'), 
            121), 12) as 'batch_duration'
,   P.program_name
,   P.hostname
,   P.loginame
from master.dbo.sysprocesses P
where P.spid > 50
and      P.status not in ('background', 'sleeping')
and      P.cmd not in ('AWAITING COMMAND'
                    ,'MIRROR HANDLER'
                    ,'LAZY WRITER'
                    ,'CHECKPOINT SLEEP'
                    ,'RA MANAGER')
order by batch_duration desc

যদি ফলাফলগুলি থেকে কোনও প্রদত্ত স্পাইডের জন্য এসকিউএল চালিত দেখতে হয় তবে এই জাতীয় কিছু ব্যবহার করুন:

declare
    @spid int
,   @stmt_start int
,   @stmt_end int
,   @sql_handle binary(20)

set @spid = XXX -- Fill this in

select  top 1
    @sql_handle = sql_handle
,   @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
,   @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from    sys.sysprocesses
where   spid = @spid
order by ecid

SELECT
    SUBSTRING(  text,
            COALESCE(NULLIF(@stmt_start, 0), 1),
            CASE @stmt_end
                WHEN -1
                    THEN DATALENGTH(text)
                ELSE
                    (@stmt_end - @stmt_start)
                END
        )
FROM ::fn_get_sql(@sql_handle)

3
আপনি এসকিউএল ভি 12 + (অর্থাত্ অ্যাজুরি) এর সাথে মাস্টার সম্পর্কিত রেফারেন্সগুলি সরিয়ে কাজ করে এটি পরিবর্তন করতে পারেন eg 'dbo.sysprocesses' এর সাথে 'master.dbo.sysprocesses' প্রতিস্থাপন করুন
কেভিন

আমি এর msসাথে কোয়ান্টাইজেশন প্রতিস্থাপনের পরামর্শ দেব s। একটি সম্ভাব্য ওভারফ্লো হতে পারে (আমার জন্য ঘটেছে)।
জাভেরেভ এভেজেনি

অ্যাজুরের জন্য আপনার "মাস্টার.ডিবো.সিসপ্রসেসস" পরিবর্তন করতে হবে "সিএসএসসিসপ্রসেসিস"
ড্যান্টন হিউয়ার

93

আপনি যদি এসকিউএল সার্ভার 2005 বা 2008 চালাচ্ছেন তবে আপনি এটি আবিষ্কার করতে ডিএমভি ব্যবহার করতে পারেন ...

SELECT  *
FROM    sys.dm_exec_requests  
        CROSS APPLY sys.dm_exec_sql_text(sql_handle)  

1
এই কোয়েরিটি এসকিউএল সার্ভার ২০০৫-এর অধীনে কাজ করছে না যদি বর্তমান ডাটাবেস সামঞ্জস্যতা স্তরটি 90 এর চেয়ে কম হয় your
আলেকজান্ডার প্রভিন উদ্দিন

31

সমস্ত বর্তমান ব্যবহারকারী, সেশন এবং প্রক্রিয়াগুলির তালিকা পেতে আপনি sp_Wh কমান্ডটি চালাতে পারেন । এরপরে আপনি যে কোনও স্পিডে অন্যকে অবরুদ্ধ করে চলেছে কিল কমান্ডটি চালাতে পারেন ।


3
এটি সর্বদা সহায়ক নয়। কখনও কখনও অনুসন্ধানগুলি শিশু স্পাইডের উদ্ভব বলে মনে হয়, বিশেষত যখন ওপেনকুরি বা লিঙ্কযুক্ত সার্ভারগুলি ব্যবহৃত হয়। কেবলমাত্র sp_Wo থেকে পিতামাতাদের জিজ্ঞাসাটি কি তা বলা শক্ত হতে পারে।
নাথান

17

আমি sysমতামত জিজ্ঞাসা পরামর্শ দিতে হবে । অনুরূপ কিছু

SELECT * 
FROM 
   sys.dm_exec_sessions s
   LEFT  JOIN sys.dm_exec_connections c
        ON  s.session_id = c.session_id
   LEFT JOIN sys.dm_db_task_space_usage tsu
        ON  tsu.session_id = s.session_id
   LEFT JOIN sys.dm_os_tasks t
        ON  t.session_id = tsu.session_id
        AND t.request_id = tsu.request_id
   LEFT JOIN sys.dm_exec_requests r
        ON  r.session_id = tsu.session_id
        AND r.request_id = tsu.request_id
   OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL

এইভাবে আপনি একটি পেতে পারেন TotalPagesAllocatedযা আপনাকে spidসার্ভারের সমস্ত সংস্থান গ্রহণ করছে তা নির্ধারণ করতে সহায়তা করতে পারে । অনেক সময় আছে যখন আমি এমনকি ক্রিয়াকলাপ মনিটরও আনতে পারি না এবং sysকী চলছে তা দেখার জন্য এই দৃশ্যগুলি ব্যবহার করতে পারি।

আমি আপনাকে নিম্নলিখিত নিবন্ধটি পড়ার পরামর্শ দিচ্ছি। আমি এখান থেকে এই রেফারেন্স পেয়েছি


1
আমরা কোয়েস্ট ডিবি পারফরম্যান্স বিশ্লেষণও ব্যবহার করি যা সার্ভারে যা চলছে তার খুব ভাল ভিজ্যুয়াল চিত্র দেয়। সে সম্পর্কে খারাপ জিনিসগুলির মধ্যে একটিটি এটি জানায় যে কে ক্ষতিগ্রস্থ হয়েছে তবে কে সম্পদগুলি গ্রাস করছে তা নির্ধারণ করা শক্ত। এটি যদিও সাহায্য করবে।
dhi

16

পণ্যটিতে অন্তর্নির্মিত বিভিন্ন পরিচালনা দর্শন রয়েছে। এসকিউএল 2000 এ আপনি সিসপ্রসেসগুলি ব্যবহার করবেন । এসকিউএল 2 কে 5-তে আরও রয়েছে sys.dm_exec_connitions , sys.dm_exec_sessions এবং sys.dm_exec_requests এর মত আরও দর্শন

এখানে sp_Who এর মতো পদ্ধতি রয়েছে যা এই মতামতগুলিকে উত্সাহ দেয়। 2 কে 5 ম্যানেজমেন্ট স্টুডিওতে আপনি ক্রিয়াকলাপ মনিটরও পাবেন।

এবং সর্বশেষে তবে সর্বনিম্ন নয় যে অ্যাডাম মাচানিক দ্বারা হু অ্যাক্টিভেটের মতো সম্প্রদায়ের অবদান স্ক্রিপ্ট রয়েছে


11

আসলে, EXEC sp_who2ক্যোয়ারী অ্যানালাইজার / ম্যানেজমেন্ট স্টুডিওতে চালানো তার চেয়ে আরও বেশি তথ্য দেয় sp_who

এর বাইরে আপনি সার্ভারে সমস্ত ইন-আউট ট্র্যাফিক দেখতে এসকিউএল প্রোফাইলার সেট আপ করতে পারেন। প্রোফাইলার আপনাকে যা যা দেখছেন ঠিক তা সংকুচিত করতে দেয়।

এসকিউএল সার্ভার ২০০৮ এর জন্য:

START - All Programs - Microsoft SQL Server 2008 - Performance Tools - SQL Server Profiler

মনে রাখবেন যে প্রোফাইলারটি সত্যই একটি লগিং এবং দেখার অ্যাপ্লিকেশন। এটি যতক্ষণ চলবে ততক্ষণ লগ এবং পর্যবেক্ষণ করতে থাকবে। এটি পাঠ্য ফাইল বা ডাটাবেস বা হার্ড ড্রাইভ পূরণ করতে পারে, তাই আপনার কী তা দেখছে এবং কতক্ষণ তা সতর্ক থাকুন।


1
এসকিউএল সার্ভার প্রোফাইলার হ'ল প্রত্যেককেই শুরু করা উচিত, অবশ্যই!
শেন

11
SELECT
    p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, r.command,
    p.program_name, text 
FROM
    sys.dm_exec_requests AS r,
    master.dbo.sysprocesses AS p 
    CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
WHERE
    p.status NOT IN ('sleeping', 'background') 
AND r.session_id = p.spid

11

একটি নোট হিসাবে, এসকিউএল সার্ভারের জন্য এসকিউএল সার্ভার অ্যাক্টিভিটি মনিটর ২০০৮ আপনার বর্তমান সার্ভারটি ডান ক্লিক করে এবং প্রসঙ্গ মেনুতে "ক্রিয়াকলাপ মনিটর" এ গিয়ে পাওয়া যাবে। আপনি যদি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করেন তবে প্রক্রিয়াগুলি হ্রাস করার পক্ষে এটি সবচেয়ে সহজ উপায় ছিল।


এটি একটি মন্তব্য করা উচিত ছিল, তবে, হ্যাঁ, এটি এত দরকারী এবং উত্তর হিসাবে এটি আরও দৃশ্যমানতা পেয়েছে :-) এবং এটি এখনই আমাকে সাহায্য করেছে। ধন্যবাদ
লাউডেনভিয়ার

9

অবজেক্ট এক্সপ্লোরার এ, ড্রিল ডাউন ডাউন: সার্ভার -> পরিচালনা -> ক্রিয়াকলাপ মনিটর। এটি আপনাকে বর্তমান সার্ভারে সমস্ত সংযোগ দেখার অনুমতি দেবে।


1
আমি এসকিউএল উপর ব্যবস্থাপনার অধীনে কার্যকলাপ নিরীক্ষণ নামক কিছুই দেখছি না 2008.
jpierson

5

এখানে এমন একটি কোয়েরি রয়েছে যা যে কোনও প্রশ্নকে অবরুদ্ধ করছে show আমি পুরোপুরি নিশ্চিত নই যে এটি কেবল ধীর অনুসন্ধানগুলি দেখায় কিনা:

SELECT p.spid
,convert(char(12), d.name) db_name
, program_name
, convert(char(12), l.name) login_name
, convert(char(12), hostname) hostname
, cmd
, p.status
, p.blocked
, login_time
, last_batch
, p.spid
FROM      master..sysprocesses p
JOIN      master..sysdatabases d ON p.dbid =  d.dbid
JOIN      master..syslogins l ON p.sid = l.sid
WHERE     p.blocked = 0
AND       EXISTS (  SELECT 1
          FROM      master..sysprocesses p2
          WHERE     p2.blocked = p.spid )

5

ডান স্ক্রিপ্টটি এটির মতো হবে:

select 
p.spid, p.status,p.hostname,p.loginame,p.cpu,r.start_time, t.text
    from sys.dm_exec_requests as r, sys.sysprocesses p 
    cross apply sys.dm_exec_sql_text(p.sql_handle) t
    where p.status not in ('sleeping', 'background')
    and r.session_id=p.spid

5

চলমান সর্বশেষ অনুরোধটি জানতে আপনি নীচের ক্যোয়ারীটি ব্যবহার করতে পারেন:

SELECT
    der.session_id
    ,est.TEXT AS QueryText
    ,der.status
    ,der.blocking_session_id
    ,der.cpu_time
    ,der.total_elapsed_time
FROM sys.dm_exec_requests AS der
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est

নীচে স্ক্রিপ্ট ব্যবহার করে আপনি প্রতি ডাটাবেস সংযোগের সংখ্যাও পেতে পারেন:

SELECT 
    DB_NAME(DBID) AS DataBaseName
    ,COUNT(DBID) AS NumberOfConnections
    ,LogiName 
FROM sys.sysprocesses
WHERE DBID > 0
GROUP BY DBID, LogiName

আরও তথ্যের জন্য দয়া করে দেখুন: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/


4

২০০৫ সালে আপনি কোনও ডাটাবেজে ডান ক্লিক করতে পারেন, রিপোর্টে যেতে পারেন এবং ট্রানজিশন এবং লক ইত্যাদির প্রতিবেদনের পুরো তালিকা রয়েছে ...


4

এটি দিয়ে চেষ্টা করুন:

এটি আপনাকে সমস্ত ব্যবহারকারীর অনুসন্ধান সরবরাহ করবে। স্পিড 50 অবধি, এগুলি সমস্ত স্কয়ার সার্ভারের অভ্যন্তরীণ প্রক্রিয়া সেশন। তবে আপনি যদি চান তবে আপনি যেখানে ক্লজটি সরিয়ে ফেলতে পারেন:

select
r.session_id,
r.start_time,
s.login_name,
c.client_net_address,
s.host_name,
s.program_name,
st.text
from sys.dm_exec_requests r
inner join sys.dm_exec_sessions s
on r.session_id = s.session_id
left join sys.dm_exec_connections c
on r.session_id = c.session_id
outer apply sys.dm_exec_sql_text(r.sql_handle) st where r.session_id  > 50

2
SELECT 
    p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, t.text
FROM
    sys.dm_exec_requests as r,
    master.dbo.sysprocesses as p
    CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) t
WHERE
    p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid

এবং

KILL @spid

2
এটা কি ঠিক আছে .. !! এবং যদি আমি স্পিড দ্বারা হত্যা। এটি কি কেবল একটি প্রশ্ন খুন করবে? আমার সন্দেহটি স্পিড এবং সেশন_এই প্রতিটি স্বেচ্ছায় যে সেশন বা সার্ভারে চলছে তা অনন্য?
বাটভস্কি

1

এক্সিকিউটিভ ক্যোয়ারিগুলি নিরীক্ষণ করতে এবং এসএমএল স্টুডিওতে ক্রিয়াকলাপ মনিটর ব্যবহার করে কীভাবে সংযুক্ত রয়েছে এবং যদি তাদের সংযোগটি অন্য সংযোগগুলি অবরুদ্ধ করে চলেছে তবে সিকিএল সার্ভার প্রোফাইলার (সরঞ্জাম মেনু) ব্যবহার করুন।


1

আপনার খুব ব্যবহারযোগ্য প্রক্রিয়াটি চেষ্টা করা উচিত sp_whoIsActiveযা এখানে পাওয়া যাবে: http://Woisactive.com এবং এটি বিনামূল্যে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.