powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать SPID процесса, создавшего временную таблицу?
25 сообщений из 27, страница 1 из 2
Как узнать SPID процесса, создавшего временную таблицу?
    #32026733
Шредер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, subj.
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #32027005
Временные таблицы доступны только из той сессии, из которой они были созданы. Поэтому правильный ответ - id текущей сессии.
Т.е.:
Select @@spid
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #32027008
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Александр+Спелицин
Временные таблицы доступны только из той сессии, из которой они были созданы.
Вот тут вы батенька не правы...
Есть еще такие временные таблицы - ##<table_name>
Вопрос очевидно по ним!
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #32027060
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, что нужно "Шредер", а вот мне нужно было узнать, кто создал локальную врем. таблицу.
Например, в tempdb..sysobjects я вижу:
name id
#mytable________________000000004BC1 894946889
#mytable________________000000004CE2 839481277
Кто их создал? Точно знаю, что не мой процесс.
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #32027470
nic_ii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня несколько раз было такое, что после завершения процесса временные таблицы оставались неудаленными. То ли процедура завершалась некорректно, то ли баг какой в семерке... однако после перезагрузки сервера они исчезали. Если же породивший таблицу процесс еще не умер то его номер "можно" узнать через Enterprise manager - идешь в Management->CurrentActivity->Locks/Objects и смотришь tempdb там все процессы, которые ее держат (при большой нагрузке на сервер и активном использовании временных таблиц это тебе ничего не даст так как нет информации об именах залокированных таблиц )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как узнать SPID процесса, создавшего временную таблицу?
    #39687892
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, ничего с апреля 2002г. не изменилось по сабжевому вопросу ? :)

т.е. ситуация такая, как описывает alexeyvg тут 24858 :
- в списке временных таблиц есть таблица
name id#mytable________________000000004BC1 894946889
Нужно узнать SPID процесса, который её создал и "прибить" его.
Есть такая возможность ?
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39687910
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39687968
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser ,

Спасибо !
Похоже, это оно, но что-то не очень пока получаеться ...

Сервер 2008R2.
Пробовал первые два скрипта (те которые "In SQL Server 2005, 2008 and 2008 R2, you should be able to pull this information from the default trace"), - оба валятся с ошибкой

Код: plaintext
1.
Msg 568, Level 16, State 23, Line 8
 Encountered an error or an unexpected end of trace file 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\Log_1827.trc'. 

Файл этот (Log_1827.trc) - есть. Профайлером открываеться ...
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688027
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

Как вариант, можно поискать в кеше планы, обращающиеся к искомой таблице. В атрибутах такого плана будет содержаться spid, для которого он был скомпилирован.
Искать примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @name sysname = N'#mytabe';

with xmlnamespaces(default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select distinct
 pa.value as session_id
from
 (select quotename(@name)) o(name) cross apply
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp cross apply
 (select value from sys.dm_exec_plan_attributes(cp.plan_handle) where attribute = N'optional_spid') pa
where
 qp.query_plan.exist('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")]') = 1 and
 pa.value <> 0;

Естественно, в результате может быть много мусора, или вообще результата не будет.
Но, по крайней мере, можно попробовать.

Задача упрощается если на таблице есть индекс, а еще лучше кластерный индекс. Тогда можно найти только живые временные таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with xmlnamespaces(default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select distinct
 pa.value as session_id
from
 (select quotename(@name)) o(name) cross apply
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp cross apply
 (select value from sys.dm_exec_plan_attributes(cp.plan_handle) where attribute = N'optional_spid') pa cross apply
 (select qp.query_plan.query('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]').value('(*/@Index)[1]', 'sysname')) i(name)
where
 qp.query_plan.exist('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]') = 1 and
 pa.value <> 0 and
 exists(select 1 from tempdb.sys.sysindexes where quotename(name) = i.name);
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688033
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtФайл этот (Log_1827.trc) - есть. Профайлером открываеться ...
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688035
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradcourtФайл этот (Log_1827.trc) - есть. Профайлером открываеться ...
отложите его в сторону и снова попробуйте запрос
там еще 4 файла на диске

если открывается профайлером, то поищите в профайлере
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688037
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with xmlnamespaces(default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select distinct
 pa.value as session_id
from
 (select quotename(@name)) o(name) cross apply
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp cross apply
 (select value from sys.dm_exec_plan_attributes(cp.plan_handle) where attribute = N'optional_spid') pa cross apply
 (select qp.query_plan.query('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]').value('(*/@Index)[1]', 'sysname')) i(name)
where
 qp.query_plan.exist('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]') = 1 and
 pa.value <> 0 and
 exists(select 1 from tempdb.sys.indexes where quotename(name) = i.name and object_name(object_id, db_id('tempdb')) like @name + N'[_]%');
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688163
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmПоправка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with xmlnamespaces(default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select distinct
 pa.value as session_id
from
 (select quotename(@name)) o(name) cross apply
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp cross apply
 (select value from sys.dm_exec_plan_attributes(cp.plan_handle) where attribute = N'optional_spid') pa cross apply
 (select qp.query_plan.query('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]').value('(*/@Index)[1]', 'sysname')) i(name)
where
 qp.query_plan.exist('//*[@Database = "[tempdb]" and @Table = sql:column("o.name")][@Index]') = 1 and
 pa.value <> 0 and
 exists(select 1 from tempdb.sys.indexes where quotename(name) = i.name and object_name(object_id, db_id('tempdb')) like @name + N'[_]%');


invm ,

пустой результат ...

Проверил и на боевом 2008R2, где и "зависла" времянка.
А затем на своём тестовом 2017-ом : в одном окне запроса SSMS создал времянку, вставил несколько записей и сделал SELECT из неё,
и не закрывая первого окна, в другом выполнил этот запрос, - пусто в обоих случаях
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688169
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

если нет плана в кеше то и не будет нифига. Вообще глобальный смысл искать "зависщую" временную таблицы стремится к нулю.
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688191
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKcourt,

если нет плана в кеше то и не будет нифига. Вообще глобальный смысл искать "зависщую" временную таблицы стремится к нулю.Смысл могу объяснить:
- эта табличка - "флажок" который создаётся при запуске одной ХП, и держится установленным, пока эта ХП не отработает.
Всё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первой
Код: sql
1.
2.
3.
4.
5.
6.
7.
  -- Проверяем наличие врем.таб-флажка. Если таблица есть, то "на выход". Если нет - создаём.
  if exists (select 1 from tempdb..sysobjects where name like '#Flag%')	
  begin
	-- "Флажок" - есть, ХП УЖЕ выполняется, - на выход
    	RAISERROR ('!', 16, 1)
	return 0	
  end


Вот сейчас получается такая ситуация, что "стартануть" ХП нельзя
(т.е. проблему пока решил по другому, просто переименовав в ХП этот флажок на #Flag1, но суть вопроса осталась.)

Вообще, можно как-то "чужую времянку" удалить, кроме как "убить" породивший её коннект или рестартануть сервер ?
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688195
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя sp_getapplock, хорош изобретать велосипеды без колес.
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688197
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичавторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя sp_getapplock, хорош изобретать велосипеды без колес.\
а они всё велосипеды изобретают
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688224
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
busercourt, Dude, who owns that #temp table?
с 2012+ default не пишет создание временных таблиц. Единсвенное, что ловить создание индекса на такой таблице. Но это всё костыли
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688229
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKbusercourt, Dude, who owns that #temp table?
с 2012+ default не пишет создание временных таблиц. Единсвенное, что ловить создание индекса на такой таблице. Но это всё костыли
ох, там так и написано :)
варинат c EE очендь даже жизненный, но это до проблемы :)
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688246
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичавторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя sp_getapplock, хорош изобретать велосипеды без колес.нуу, велик вполне нормальный, давно ездит :)

-----------------------------------------------------------------------------
Хорошо, а на вопрос, "в каком коннекте было установлено вот это вот всё":
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @result int;
EXEC @result=sp_getapplock 
	@Resource = 'test1'
	,@LockMode = 'Exclusive'
	,@LockOwner = 'Session'
	,@LockTimeout = 0; 


ответ будет проще чем с "флажком" ?
Так что бы "по быстрому" я его не нашел ...
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688252
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtГавриленко Сергей Алексеевичпропущено...
Откройте для себя sp_getapplock, хорош изобретать велосипеды без колес.нуу, велик вполне нормальный, давно ездит :)

-----------------------------------------------------------------------------
Хорошо, а на вопрос, "в каком коннекте было установлено вот это вот всё":
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @result int;
EXEC @result=sp_getapplock 
	@Resource = 'test1'
	,@LockMode = 'Exclusive'
	,@LockOwner = 'Session'
	,@LockTimeout = 0; 


ответ будет проще чем с "флажком" ?
Так что бы "по быстрому" я его не нашел ...
авторDECLARE @Code VARCRAH(255) = 'test1'
SELECT TOP 1 request_session_Id
FROM
sys.dm_tran_locks a
WHERE
a.resource_type = 'APPLICATION' AND
a.Request_Owner_Type = 'SESSION' AND
a.resource_description LIKE '%' + @Code + '%'
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688259
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKcourtпропущено...
нуу, велик вполне нормальный, давно ездит :)

-----------------------------------------------------------------------------
Хорошо, а на вопрос, "в каком коннекте было установлено вот это вот всё":
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @result int;
EXEC @result=sp_getapplock 
	@Resource = 'test1'
	,@LockMode = 'Exclusive'
	,@LockOwner = 'Session'
	,@LockTimeout = 0; 



ответ будет проще чем с "флажком" ?
Так что бы "по быстрому" я его не нашел ...
авторDECLARE @Code VARCRAH(255) = 'test1'
SELECT TOP 1 request_session_Id
FROM
sys.dm_tran_locks a
WHERE
a.resource_type = 'APPLICATION' AND
a.Request_Owner_Type = 'SESSION' AND
a.resource_description LIKE '%' + @Code + '%' Спасибо.

тут 10510723 ещё вариант нашёл
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688264
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtTaPaKпропущено...

пропущено...
Спасибо.

тут 10510723 ещё вариант нашёл
та тоже самое, только dmv больше для людей :)
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688269
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DECLARE @Code VARCRAH(255) = 'test1'
SELECT TOP 1 request_session_Id
FROM
sys.dm_tran_locks a
WHERE
a.resource_type = 'APPLICATION' AND
a.Request_Owner_Type = 'SESSION' AND
a.resource_description LIKE '%' + @Code + '%' Если длина @Code превысит 32, то работать не будет.
...
Рейтинг: 0 / 0
Как узнать SPID процесса, создавшего временную таблицу?
    #39688271
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmDECLARE @Code VARCRAH(255) = 'test1'
SELECT TOP 1 request_session_Id
FROM
sys.dm_tran_locks a
WHERE
a.resource_type = 'APPLICATION' AND
a.Request_Owner_Type = 'SESSION' AND
a.resource_description LIKE '%' + @Code + '%' Если длина @Code превысит 32, то работать не будет.
так не создавайте
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать SPID процесса, создавшего временную таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]