Πώς βρίσκουμε τι queries τρέχουν αυτή τη στιγμή στον SQL Server
Τελευταίες δημοσιεύσεις από Stratos Matzouranis (Προβολή όλων)
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
Πολλές φορές θα χρειαστεί να ψάξουμε γρήγορα τι 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 θα ανοίξει το γραφικό του κάθε πλάνου: