View Full Version : استفاده از SQL Server Profiler
mahdy.asia
دوشنبه 22 دی 1393, 09:00 صبح
سلام، من می خواهم بعضی تراکنش های سیستم را از داخل برنامه اجرایی بررسی نمایم (بدون استفاده از ابزار SQL Server Profiler یا ابزارهای کمکی ).
آیا جداول مربوط SQL Server Profiler مشخص است یا با روشی من می توانم با کدنویسی به اطلاعات مربوطه دسترسی پیدا نمایم؟
من با SQL2008R2 کار می کنم.
pashna
دوشنبه 22 دی 1393, 21:40 عصر
سلام،
بستگی داره چه چیزی رو بخواهید
mahdy.asia
سه شنبه 23 دی 1393, 11:03 صبح
بستگی داره چه چیزی رو بخواهید
هر چی بیشتر بهتر (هدف بررسی تراکنش های انجام شده در اسکیوال است) نظیر نام پروسیجر اجرا شده ، محتوای پروسیجر ، وضعیت اجرا یا خطا، نام کامپیوتر اجرا کننده و ...
pashna
سه شنبه 23 دی 1393, 22:45 عصر
سلام،
تو نسخههای جدید اسکیوال سرور dmv هستند که میشه اطلات زیادی ازشون گرفت، مثلا کوئریِ زیر یه نمونه از اینهاست که آخرین کوئریهای رون شده تواین یه دیتابیسِ خاص رو بهت میده :
SELECT dest.text AS [Query] ,
deqs.last_execution_time ,
deqs.execution_count ,
deqs.total_worker_time ,
deqs.last_worker_time ,
deqs.min_worker_time ,
deqs.max_worker_time ,
deqs.total_physical_reads ,
deqs.total_logical_reads ,
deqs.total_logical_writes ,
deqs.total_rows
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE dest.dbid = DB_ID('msdb')
ORDER BY deqs.last_execution_time DESC
ولی این کوئریها دیتا رو فقط وقتی تواین cache باشه نشون میده ، یا اگه اسکیوال سرور ریست بشه چیزی برنمیگردون. شما باید دقیقا بدونید چی میخواید
mahdy.asia
پنج شنبه 25 دی 1393, 17:13 عصر
ولی این کوئریها دیتا رو فقط وقتی تواین cache باشه نشون میده ، یا اگه اسکیوال سرور ریست بشه چیزی برنمیگردون. شما باید دقیقا بدونید چی میخواید من دقیقا وضعیت آنلاین رو می خوام چون اگر چیزی رو نیاز داشته باشم خودم می تونم ذخیره کنم
mahdy.asia
یک شنبه 28 دی 1393, 12:00 عصر
نام کامپیوتری که کوئری مورد نظر رو انجام می ده چطور در بیارم ؟
pashna
دوشنبه 29 دی 1393, 22:21 عصر
SELECT TOP 100
SUBSTRING(st.text, ( qs.statement_start_offset / 2 ) + 1,
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) AS statement_text ,
ss.host_name ,
execution_count ,
total_worker_time / 1000 AS total_worker_time_ms ,
( total_worker_time / 1000 ) / execution_count AS avg_worker_time_ms ,
total_logical_reads ,
total_logical_reads / execution_count AS avg_logical_reads ,
qs.total_elapsed_time / 1000 AS total_elapsed_time_ms ,
( qs.total_elapsed_time / 1000 ) / execution_count AS avg_elapsed_time_ms ,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
CROSS APPLY sys.dm_exec_requests rq
CROSS APPLY sys.dm_exec_sessions ss
ORDER BY creation_time
mahdy.asia
سه شنبه 30 دی 1393, 09:25 صبح
اگر Query رو اجرا کنید می بینید که :
ظاهرا به نظر می آید --sys.dm_exec_requests rq-- sys.dm_exec_sessions ss ارتباط درست برقرار نشده است و باعث شده اطلاعات تکراری بوجود آید.
اطلاعات statement_text با host_name ارتباط ندارد و ظاهر statement_text
pashna
چهارشنبه 01 بهمن 1393, 21:12 عصر
سلام،
حق با شما است ، درستش کردم
SELECT TOP 100
SUBSTRING(st.text, ( qs.statement_start_offset / 2 ) + 1,
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) AS statement_text ,
ss.host_name ,
execution_count ,
total_worker_time / 1000 AS total_worker_time_ms ,
( total_worker_time / 1000 ) / execution_count AS avg_worker_time_ms ,
total_logical_reads ,
total_logical_reads / execution_count AS avg_logical_reads ,
qs.total_elapsed_time / 1000 AS total_elapsed_time_ms ,
( qs.total_elapsed_time / 1000 ) / execution_count AS avg_elapsed_time_ms ,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
INNER JOIN sys.dm_exec_requests rq ON rq.query_plan_hash = qs.query_plan_hash
INNER JOIN sys.dm_exec_sessions ss ON ss.session_id = rq.session_id
ORDER BY creation_time
mahdy.asia
جمعه 03 بهمن 1393, 13:21 عصر
ظاهرا رابطه های زیر دچار اشکال هست و باعث می شه که فقط یک ردیف اطلاعات نمایش بده اونم درست نیست.
INNER JOIN sys.dm_exec_requests rq ON rq.query_plan_hash = qs.query_plan_hash
INNER JOIN sys.dm_exec_sessions ss ON ss.session_id = rq.session_id
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.