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

т.е. ситуация такая, как описывает alexeyvg тут 24858 :
- в списке временных таблиц есть таблица
name id#mytable________________000000004BC1 894946889
Нужно узнать SPID процесса, который её создал и "прибить" его.
Есть такая возможность ?
...
Рейтинг: 0 / 0
15.08.2018, 10:52
    #39687910
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
...
Рейтинг: 0 / 0
15.08.2018, 11:51
    #39687968
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 12:41
    #39688027
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 12:46
    #39688033
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
courtФайл этот (Log_1827.trc) - есть. Профайлером открываеться ...
...
Рейтинг: 0 / 0
15.08.2018, 12:48
    #39688035
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
komradcourtФайл этот (Log_1827.trc) - есть. Профайлером открываеться ...
отложите его в сторону и снова попробуйте запрос
там еще 4 файла на диске

если открывается профайлером, то поищите в профайлере
...
Рейтинг: 0 / 0
15.08.2018, 12:50
    #39688037
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
Поправка:
Код: 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
15.08.2018, 14:46
    #39688163
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 14:50
    #39688169
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
court,

если нет плана в кеше то и не будет нифига. Вообще глобальный смысл искать "зависщую" временную таблицы стремится к нулю.
...
Рейтинг: 0 / 0
15.08.2018, 15:06
    #39688191
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 15:09
    #39688195
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
авторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя sp_getapplock, хорош изобретать велосипеды без колес.
...
Рейтинг: 0 / 0
15.08.2018, 15:10
    #39688197
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
Гавриленко Сергей АлексеевичавторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя sp_getapplock, хорош изобретать велосипеды без колес.\
а они всё велосипеды изобретают
...
Рейтинг: 0 / 0
15.08.2018, 15:41
    #39688224
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
busercourt, Dude, who owns that #temp table?
с 2012+ default не пишет создание временных таблиц. Единсвенное, что ловить создание индекса на такой таблице. Но это всё костыли
...
Рейтинг: 0 / 0
15.08.2018, 15:48
    #39688229
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
TaPaKbusercourt, Dude, who owns that #temp table?
с 2012+ default не пишет создание временных таблиц. Единсвенное, что ловить создание индекса на такой таблице. Но это всё костыли
ох, там так и написано :)
варинат c EE очендь даже жизненный, но это до проблемы :)
...
Рейтинг: 0 / 0
15.08.2018, 16:09
    #39688246
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
Гавриленко Сергей АлексеевичавторВсё это для того, что бы ХП нельзя было запустить второй раз, до окончания выполнения запущенной первойОткройте для себя 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
15.08.2018, 16:13
    #39688252
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 16:20
    #39688259
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 16:25
    #39688264
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
courtTaPaKпропущено...

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

тут 10510723 ещё вариант нашёл
та тоже самое, только dmv больше для людей :)
...
Рейтинг: 0 / 0
15.08.2018, 16:35
    #39688269
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
15.08.2018, 16:37
    #39688271
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать SPID процесса, создавшего временную таблицу?
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать SPID процесса, создавшего временную таблицу? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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