sys.dm_exec_cursors (Transact-SQL)

platí pro:SQL Server

Vrací informace o kurzorech, které jsou otevřené v různých databázích.

Syntax

  
dm_exec_cursors (session_id | 0 )  

Argumenty

session_id | 0
ID relace. Pokud je session_id specifikováno, tato funkce vrací informace o kurzorech ve specifikované relaci.

Pokud je zadáno 0, funkce vrací informace o všech kurzorech pro všechny relace.

Vrácená tabulka

Název sloupce Datový typ Description
session_id int ID relace, která tento kurzor drží.
cursor_id int ID kurzorového objektu.
name nvarchar(256) Název kurzoru definovaný uživatelem.
vlastnosti nvarchar(256) Specifikuje vlastnosti kurzoru. Hodnoty následujících vlastností jsou spojeny do hodnoty tohoto sloupce:
Rozhraní deklarací
Typ kurzoru
Souběžnost kurzorů
Rozsah kurzoru
Úroveň vnoření kurzoru

Například hodnota vrácená v tomto sloupci může být "TSQL | Dynamic | Optimistický | Global (0)".
sql_handle varbinary(64) Přiložte k textu dávky, která označila kurzor.
statement_start_offset int Počet znaků do právě vykonávané dávkové nebo uložené procedury, na které aktuálně vykonávaný příkaz začíná. Lze jej použít společně s funkcí sql_handle, statement_end_offset a dynamické správy sys.dm_exec_sql_text k získání aktuálně vykonávaného příkazu pro požadavek.
statement_end_offset int Počet znaků do právě vykonávané batch nebo uložené procedury, při které právě vykonávaný příkaz končí. Lze jej použít společně s funkcí sql_handle, statement_start_offset a dynamické správy sys.dm_exec_sql_text k získání aktuálně vykonávaného příkazu pro požadavek.
plan_generation_num bigint Pořadové číslo, které lze použít k rozlišení mezi instancemi plánů po překompilaci.
creation_time datetime Časové razítko, kdy byl kurzor vytvořen.
is_open bit Specifikuje, zda je kurzor otevřený.
is_async_population bit Specifikuje, zda vlákno na pozadí stále asynchronně vyplňuje kurzor KEYSET nebo STATICKÝ.
is_close_on_commit bit Specifikuje, zda byl kurzor deklarován použitím .CURSOR_CLOSE_ON_COMMIT

1 = Kurzor se zavře po skončení transakce.
fetch_status int Vrací stav posledního načtení kurzoru. Toto je poslední vrácená hodnota @@FETCH_STATUS.
fetch_buffer_size int Vrací informace o velikosti bufferu pro načítaní.

1 = Transact-SQL kurzorů. Tuto hodnotu lze nastavit na vyšší hodnotu pro API kurzory.
fetch_buffer_start int Pro kurzor FAST_FORWARD a DYNAMIC vrací 0, pokud kurzor není otevřený nebo je umístěn před prvním řádkem. Jinak se vrátí -1.

Pro kurzory STATIC a KEYSET vrací 0, pokud kurzor není otevřený, a -1, pokud je kurzor umístěn za poslední řádkem.

Jinak vrací číslo řádku, ve kterém je umístěn.
ansi_position int Pozice kurzoru v bufferu pro načítání.
worker_time bigint Čas strávený v mikrosekundách pracovníky při provádění kurzoru.
čte bigint Počet přečtených provedených kurzorem.
píše bigint Počet zápisů provedených kurzorem.
dormant_duration bigint Milisekundy od spuštění posledního dotazu (otevření nebo načítání) na tomto kurzoru.

Povolení

Vyžaduje VIEW oprávnění SERVER STATE na serveru.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje VIEW oprávnění SERVER PERFORMANCE STATE na serveru.

Poznámky

Následující tabulka poskytuje informace o rozhraní pro deklaraci kurzoru a zahrnuje možné hodnoty pro sloupec vlastností.

Property Description
API Kurzor byl deklarován pomocí jednoho z API pro přístup k datům (ODBC, OLEDB).
TSQL Kurzor byl deklarován pomocí syntaxe Transact-SQL DECLARE CURSOR.

Následující tabulka poskytuje informace o typu kurzoru a obsahuje možné hodnoty pro sloupec vlastností.

Typ Description
Sada klíčů Kurzor byl označen jako Keyset.
Dynamický Kurzor byl označen jako dynamický.
Snapshot Kurzor byl označen jako Snapshot nebo Static.
Fast_Forward Kurzor byl označen jako Fast Forward.

Následující tabulka poskytuje informace o souběžnosti kurzoru a obsahuje možné hodnoty pro sloupec vlastností.

Concurrency Description
Jen pro čtení Kurzor byl označen jako pouze pro čtení.
Zámky na svitky Kurzor používá zámky na posuvné posuvky.
Optimistický Kurzor používá optimistickou kontrolu souběžnosti.

Následující tabulka poskytuje informace o rozsahu kurzoru a zahrnuje možné hodnoty pro sloupec vlastností.

Scope Description
Local Určuje, že rozsah kurzoru je místní pro dávku, uloženou proceduru nebo aktivační událost, ve které byl kurzor vytvořen.
Globální Určuje, že rozsah kurzoru je globální pro připojení.

Examples

A. Detekce starých kurzorů

Tento příklad vrací informace o kurzorech, které byly na serveru otevřené déle než stanovený čas 36 hodin.

SELECT creation_time, cursor_id, name, c.session_id, login_name   
FROM sys.dm_exec_cursors(0) AS c   
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id   
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;  
GO  

Viz také

Zobrazení a funkce dynamické správy (Transact-SQL)
zobrazení a funkce související se spouštěním dynamické správy (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)