SSMS verbraucht CPU und reagiert nicht mehr alle paar Minuten…

Problem: Das SSMS (SQL Server Management Studio) hängt alle paar Minuten – Auch ein Neustart des SSMS bringt nichts.
Nebeninformation: CPU vom SSMS wird 15-25% und das RAM vom SSMS mehrere GB!

 

Ursache: Eine T-SQL Query ist syntaktisch defekt und das SSMS „wild“ zu werden. Es scheint mit einem Zusammenhang mit dem IntelliSense zu haben.

Lösung: Korrektur des T-SQL Code und ein paar Minuten geduldig sein, CPU verringert sich schneller und das RAM normalisiert sich etwas später!

Ähnliche Feststellungen:
https://superuser.com/questions/1195570/sql-server-management-studio-cpu-and-ram-usage-keeps-increasing-for-no-reason

Sperrende SQL Befehle indentifizieren

/*
Bitte als "sa" anmelden (möglicherweise reicht die Windows-Authentification)
Hinweis: wenn z.B. ein Satz verändert wird, werden neben der Tabelle auch alle Indizes gesperrt.
Das ist der Grund für die vielen gesperrten Zeilen
*/
/*
KILL 141 
KILL 141 WITH STATUSONLY  --dies ist nur bei komplexen Rollback's sinnvoll möglich
*/
USE master
go



-- Locks indentifizieren -------------------------------------------------------------------------------- 
Select request_session_id, blocking_session_id, DatabaseName,dbid, LockedObjectName, LockedObjectId, LockedResource, LockType, LoginName, HostName
	, IsUserTransaction, TransactionName, TransactionStartTime  
    , replace(replace(replace(replace(  ST.text   ,CHAR(9),' ')  ,CHAR(13),' ')  ,CHAR(10),' '),';',':')  AS SqlStatementText /* SQL Statement */

from (
SELECT DISTINCT L.request_session_id AS request_session_id,    -- Anfragender System Process Identifier 
  t2.blocking_session_id as blocking_session_id,	       -- Blockierender System Process Identifier
  --request_owner_guid AS UOW,                        -- Identifiziert die Arbeitseinheits-ID (Unit of Work, UOW) verteilter Transaktionen 
  DB_NAME(L.resource_database_id) AS DatabaseName,  -- Databasename 
  O.Name AS LockedObjectName,                       -- Object name 
  P.object_id AS LockedObjectId,                    -- Eindeutige Object identification number 
  L.resource_type AS LockedResource,                -- Resource which is locked: DATABASE, FILE, OBJECT, PAGE, KEY, EXTENT, RID, APPLICATION, METADATA, HOBT, ALLOCATION_UNIT. 
  L.request_mode AS LockType,                       -- Lock Type: Exclusive locks (X), Intent locks (I), Shared locks (S), Update locks (U),  Schema locks (Sch) 
  --L.resource_description AS LockDescription,      -- LockDescription 
  --ST.text AS SqlStatementText,                      -- SQL Statement 
  --replace(replace(replace(  ST.text   ,CHAR(9),' ')  ,CHAR(13),'/*CR*/')  ,CHAR(10),'/*LF*/')  AS SqlStatementText, /* SQL Statement */
  CN.most_recent_sql_handle,
  ES.login_name AS LoginName,                       -- Loginname mit dem der User an der DB angemeldet ist 
  ES.host_name AS HostName,                         -- Hostname des verbunden clients 
  TST.is_user_transaction as IsUserTransaction,     -- 1 = Die Transaktion wurde von einer Benutzeranforderung initiiert.  0 = Systemtransaktion. 
  AT.name as TransactionName,                       -- Transaktionsname 
  AT.transaction_begin_time as TransactionStartTime,-- Uhrzeit des Transaktionsbeginns. 
  CN.auth_scheme as AuthenticationMethod            -- Login Methode SQL / Windows authentifizierung 

FROM sys.dm_tran_locks L 
  left JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id 
  left JOIN sys.objects O ON O.object_id = P.object_id 
  left JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id 
  left JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id 
  left JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id 
  left JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id 
  left  JOIN sys.dm_os_waiting_tasks as t2
        ON L.lock_owner_address = t2.resource_address
) as temp
  CROSS APPLY sys.dm_exec_sql_text(temp.most_recent_sql_handle) AS ST 

WHERE 1=1
      --and resource_database_id = db_id('SalesLogix_Prod')  --nur Locks einer bestimmten Datenbank betrachten
      --and L.request_mode in ('X', 'IX')                    -- Exklusive Locks 
      --and L.request_mode NOT in ('S')
      --and (t2.blocking_session_id IS NOT NULL OR L.request_mode = 'X')  --klare Störer und Opfer darstellen
ORDER BY temp.request_session_id