Jak znaleźć właściciela tabeli tymczasowej a w zasadzie jego sesion id (SPID), dziwne ale nie ma takiej bezpośredniej metody. Można skojarzyć trace robione z serwera z obiektami, ale co jeżeli nie monitorujemy zdarzeń. Można pobawić się w detektywa
Robimy tabelkę tymczasową na sesji 65
CREATE TABLE #rk_test (i VARCHAR(100))
go
INSERT #rk_test
SELECT 'tekst'
go 1000
z innej sesji szukamy tabeli w bazie tempdb
select id ,NAME, DB_ID() AS bazaid
from tempdb.sys.sysobjects
where xtype ='U'
and name like '#rk_test%'
id NAME bazaid
---------------------------------------------- ------
474333853 #rk_test____________________________________________________________________________________________________________000000001D2C 1
Sprawdzamy ile stron zajmuje na dysku
CREATE TABLE #dbcc_ind(PageFID smallint,
PagePID int,
IAMFID int,
IAMPID int,
ObjectID int,
IndexID int,
PartitionNumber bigint,
PartitionID bigint,
Iam_Chain_Type varchar(80),
PageType int,
IndexLevel int,
NexPageFID int,
NextPagePID int,
PrevPageFID int,
PrevPagePID int)
go
INSERT #dbcc_ind
EXECUTE ('DBCC IND (2,474333853, 1) WITH TABLERESULTS, NO_INFOMSGS')
go
SELECT COUNT(*) FROM #dbcc_ind WHERE PageType =1
-----------
3
Tabela zajmuje 3 strony na dysku
Patrzymy jaki spid utworzył tabelę z trzema stronami
SELECT *
FROM sys.dm_db_session_space_usage t1
INNER JOIN sys.dm_exec_connections AS t2
ON t1.session_id = t2.session_id
CROSS APPLY sys.dm_exec_sql_text(t2.most_recent_sql_handle)
WHERE database_id = DB_ID('tempdb')
AND user_objects_alloc_page_count =3
AND t1.session_id > 50
ORDER BY 3 desc
Metoda ta jest niedokładna jednak przeważnie szukamy duzych obiektów a te już łatwiej wyłapać ze względu na duże ilości zajętych stron
Brak komentarzy:
Prześlij komentarz