Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
Здравствуйте! Подскажите пожалуйста, как можно узнать какие сеансы ссылаются на глобальную временную таблицу (##Tmp)
Дело в том, что есть один сеанс, который создает эту таблицу и держит ее, нужно в определенный момент узнать, есть ли сеансы, помимо того, что создал эту таблицу и если такого сеанса (второго, дополнительного) нет, то нужно эту таблицу удалить

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)   Apr 22 2011 19:23:43   Copyright (c) Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) 
3 июл 18, 11:24    [21538678]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist,

ссылаются ? это как?

ps RTM это к психологам
3 июл 18, 11:25    [21538683]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
msLex
Member

Откуда:
Сообщений: 7979
TaPaK
Sandist,

ссылаются ? это как?
Используют и не дают удалиться.
3 июл 18, 11:28    [21538700]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msLex,

так а чем не устраивает что она сама удалится если никого нет?
3 июл 18, 11:31    [21538709]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
TaPaK,
Один сеанс создает его, другие используют, система не удалит таблицу до тех пор, пока все сеансы ее не освободят
Нужно узнать какие именно держат эту таблицу, если среди них не будет нужных, то удалить таблицу

Есть таблица, в которой видно какие сеансы на какие ресурсы ссылаются?
3 июл 18, 11:36    [21538732]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist,

долбаная бредятина. Если сеанс использует - значит надо, если никто не использует сама дропнется. Если пакет не дошёл до вашей богомерзкой глобальной таблицы, то что? дропнем пусть потом страдает?

но наверное этого знать не хочу....

SELECT 
        request_session_id
	request_mode, 
	request_type,
	request_status
FROM    sys.dm_tran_locks WHERE resource_associated_entity_id = OBJECT_ID('tempdb..##NAME')

не забудьте раздать всем VIEW SERVER STATE, если не ошибаюсь
3 июл 18, 11:40    [21538746]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
или вообще заверните в try/catch свой дроп и в цикл...
3 июл 18, 11:41    [21538751]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
TaPaK,
это не то
я имею ввиду не те процессы которые используют ее в текущий момент, а просто процессы благодаря которым она жива
то есть вот если я в текущий момент не буду осуществлять select update или что что к таблице, то тот запрос который ты переслал не отобразить соединение
3 июл 18, 12:03    [21538865]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 9263
Sandist
это не то
Этол именно то. Потому что "использует" означает, что на таблицу наложена какая-либо блокировка. Другого трактования нет.

Можете взять способ TaPaK'а. Только нужно еще добавить условие resource_database_id = db_id('tempdb').
Но результат может быть недостоверным.

Более правильно так:
set lock_timeout 0;

begin try
 drop table ##NAME
end try
begin catch
 select error_number(), error_message();
end catch;

set lock_timeout -1;
Если в блоке catch error_number() = 1222, то таблица используется.
3 июл 18, 12:15    [21538910]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist
TaPaK,
это не то
я имею ввиду не те процессы которые используют ее в текущий момент, а просто процессы благодаря которым она жива
то есть вот если я в текущий момент не буду осуществлять select update или что что к таблице, то тот запрос который ты переслал не отобразить соединение

я вас огорчу... сервер так не делает, а проверяет именно активные ссылки
3 июл 18, 12:19    [21538930]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
invm,
Не знаю как правильно донести мысль

Сеанс1:
create table ##NAME (id int)
insert into ##NAME (id) values (1)

Сеанс2:
select * from ##Name

Сеанс3:
select * from ##Name

Вот после этих операций, таблица никем не будет блокироваться, не будет использоваться, но жить она будет
Если я закрою Сеанс 2 и Сеанс1, таблица будет жить
Нужно просто узнать из-за каких сеансов пока жива временная таблица?
Система ведь как-то понимает, что если я сейчас закрою сеанс, на таблицу ничего не ссылается (или ссылается), значит ее нужно удалить/не удалять

Вот где эта такая инфа хранится?
3 июл 18, 12:23    [21538945]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Sandist,

перейдите к изучению, что же такое сеанс, и узнайте что вы в ssms пооткрывали
3 июл 18, 12:25    [21538947]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
TaPaK,
так есть где-то такая информация?
3 июл 18, 12:27    [21538954]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 9263
Sandist
Если я закрою Сеанс 2 и Сеанс1, таблица будет жить
Ошибаетесь.
Таблица останется жить, только если Сеанс3 удерживает на нее какую-либо блокировку.
Sandist
Система ведь как-то понимает, что если я сейчас закрою сеанс, на таблицу ничего не ссылается (или ссылается), значит ее нужно удалить/не удалять

Вот где эта такая инфа хранится?
Нигде. Ибо она не нужна.

У вас явные проблемы с пониманием смысла термина "ссылается". Для вас это - упоминается в каком-то ранее выполненном запросе.
3 июл 18, 12:38    [21538980]     Ответить | Цитировать Сообщить модератору
 Re: Какие сеансы ссылаются на глобальную временную таблицу  [new]
Sandist
Member

Откуда:
Сообщений: 401
invm,

Да, вы правы
спасибо
3 июл 18, 12:49    [21539013]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить