sobota, 6 listopada 2010

tabela tymczasowa i jej spid

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