Πώς βρίσκουμε τι queries τρέχουν αυτή τη στιγμή στον SQL Server

Πώς βρίσκουμε τι queries τρέχουν αυτή τη στιγμή στον SQL Server
Πώς βρίσκουμε τι queries τρέχουν αυτή τη στιγμή στον SQL Server

Πολλές φορές θα χρειαστεί να ψάξουμε γρήγορα τι queries τρέχουν σε ένα instance του SQL Server. Σε αυτό το άρθρο θα δούμε ένα query που έχω γράψει που μπορεί να μας αντλήσει άμεσα όση πληροφορία χρειαζόμαστε.

To query αντλεί πληροφορία από τα συστημικά views dm_exec_requests, databases, dm_exec_sql_text dm_exec_sesions, dm_exec_query_memory_grants και dm_exec_query_plan.

Μέσα από αυτό το query μπορούμε να δούμε τα παρακάτω:

  • Σε ποια βάση δεδομένων τρέχει
  • Τι τύπου εντολή είναι (select,update,delete,backup … )
  • Το sql text
  • Τι καθυστερεί το query
  • Αν το μπλοκάρει κάποιο άλλο session
  • Αν είναι ο Head Blocker
  • Την μνήμη που καταλαμβάνει
  • Το πλάνο του
  • Από ποιο μηχάνημα τρέχει
  • Από ποιο πρόγραμμα τρέχει
  • Από ποιον χρήστη τρέχει

To query

Το μόνο που έχουμε να κάνουμε είναι να τρέξουμε το παρακάτω select query σε ένα query window:

SELECT 
d.name
,p.command
,p.status
,p.session_id
,p.blocking_session_id
,
case
when p2.session_id is not null and (p.blocking_session_id = 0 or p.session_id IS NULL) then '1' else '0' end as head_blocker
,t.text
,p.start_time
,p.total_elapsed_time/1000 as elapsed_time_secs,p.wait_time/1000 as wait_time
,p.last_wait_type
,dr.host_name
,dr.program_name
,dr.login_name
,m.granted_memory_kb
,m.grant_time
,p.plan_handle
,ph.query_plan
,p.sql_handle
FROM sys.dm_exec_requests p
--left join sys.dm_os_waiting_tasks w on w.session_id = p.session_id
inner join sys.databases d on d.database_id = p.database_id
outer apply sys.dm_exec_sql_text(p.sql_handle) t
outer apply sys.dm_exec_query_plan(p.plan_handle) as ph
inner join sys.dm_exec_sessions dr on dr.session_id = p.session_id
left join sys.dm_exec_query_memory_grants m on m.session_id = p.session_id
left join sys.dm_exec_requests p2 ON (p.session_id = p2.blocking_session_id)
where 1=1
and text is not null
--and p.session_id in (select spid from sysprocesses where blocked<>0)
order by  p.start_time;

Το αποτέλεσμα

Τρέχοντας το query θα επιστρέψει τα αποτελέσματα όπως παρακάτω. Επίσης επιλέγοντας διπλό κλικ στο query_plan θα ανοίξει το γραφικό του κάθε πλάνου:

Πώς βρίσκουμε τι queries τρέχουν αυτή τη στιγμή στον SQL Server

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση