sql-server - قواعد - طريقة البحث في sql




قائمة الاستعلامات التي تعمل على SQL Server (11)

أود أن أقترح الاستعلام عن وجهات النظر 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 التي تأخذ كافة موارد الملقم. هناك العديد من المرات عندما لا يمكنني حتى عرض شاشة النشاط واستخدام طرق العرض هذه لمشاهدة ما يحدث.

أنصحك بقراءة المقالة التالية. حصلت على هذه الإشارة من هنا .

هل هناك طريقة لإدراج الاستعلامات التي تعمل حاليًا على MS SQL Server (إما من خلال Enterprise Manager أو SQL) و / أو من المتصل؟

أعتقد أن لديّ طلب تشغيل طويل جدًا يتم تنفيذه على أحد خوادم قواعد البيانات الخاصة بي وأود أن تتبعه وإيقافه (أو الشخص الذي يستمر في تشغيله).


إذا كنت تستخدم SQL Server 2005 أو 2008 ، يمكنك استخدام DMV للعثور على هذا ...

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

سيظهر لك هذا أطول SPID على قيد التشغيل على ملقم SQL 2000 أو SQL 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

إذا كنت بحاجة إلى رؤية SQL تعمل من أجل spid محدد من النتائج ، استخدم شيئًا مثل هذا:

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    master.dbo.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)

سيكون النص الصحيح مثل هذا:

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

في الواقع ، تشغيل EXEC sp_who2 في Query Analyzer / Management Studio يعطي معلومات أكثر من sp_who .

أبعد من ذلك يمكنك إعداد SQL Profiler لمشاهدة كل حركة المرور من الداخل والخارج إلى الخادم. يتيح لك Profiler أيضًا تضييق نطاق المحتوى الذي تشاهده بالضبط.

بالنسبة لـ SQL Server 2008:

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

ضع في اعتبارك أن المنقط هو حقا تسجيل ومشاهدة التطبيق. وسوف تستمر في تسجيل ومشاهدة طالما أنها تعمل. يمكن أن تملأ ملفات نصية أو قواعد بيانات أو محركات أقراص صلبة ، لذا كن حذرًا عند مشاهدتها وطول المدة.


في عام 2005 ، يمكنك النقر بزر الماوس الأيمن على قاعدة البيانات ، والانتقال إلى التقارير ، وهناك قائمة كاملة بالتقارير حول الانتقالات والأقفال وغيرها ...


هنا استعلام سيظهر أي استعلامات تمنع. لست متأكدًا تمامًا مما إذا كان سيتم عرض استعلامات بطيئة فقط:

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 )

هناك العديد من وجهات نظر الإدارة المضمنة في المنتج. على SQL 2000 يمكنك استخدام sysprocesses . على SQL 2K5 هناك المزيد من المشاهدات مثل sys.dm_exec_connections و sys.dm_exec_sessions و sys.dm_exec_requests .

هناك أيضًا إجراءات مثل sp_who تستفيد من هذه المشاهدات. في 2K5 إدارة ستوديو يمكنك أيضا الحصول على مراقبة النشاط.

وأخيراً وليس آخراً ، هناك مخطوطات ساهمت في المجتمع مثل " من هو نشط" من آدم Machanic .


يمكنك استخدام الاستعلام أدناه للعثور على طلب آخر تشغيل:

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/ : http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/


يمكنك تشغيل الأمر sp_who للحصول على قائمة بكل المستخدمين الحاليين والجلسات والعمليات. يمكنك بعد ذلك تشغيل الأمر KILL على أي spid تمنع الآخرين.


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




sql-server