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

Откуда: Санкт-Петербург
Сообщений: 54
Подскажите пожалуйста, какой есть выигрыш от использование временных таблиц в MSSQL.
Например в Oracle не логируются операции-транзакции по временным таблицам и не пишется redo log.
Как это происходит с временными таблицами в MSSQL?
4 авг 16, 22:31    [19502164]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
pgalaktionov,

тут они точно в транзакции
а также само создание таблиц тоже под транзакцией
т.е если под транзакцией создаешь а потом откатываешся то таблицы нету

табличные переменные вроде без транзакции работают
4 авг 16, 22:51    [19502207]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
leov
табличные переменные вроде без транзакции работают
Вам показалось.
4 авг 16, 22:58    [19502231]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Гавриленко Сергей Алексеевич
leov
табличные переменные вроде без транзакции работают
Вам показалось.
я вообще не особо был уверен
но вот накрапал тест и вроде таки вне транзакции оно
declare @t table(id int)
insert @t(id) values(1)
select * from @t
begin tran
insert @t(id) values(2)
select * from @t
rollback
select * from @t

(1 row(s) affected)

id
-----------
1

(1 row(s) affected)


(1 row(s) affected)

id
-----------
1
2

(2 row(s) affected)

id
-----------
1
2

(2 row(s) affected)
4 авг 16, 23:08    [19502271]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
leov
Гавриленко Сергей Алексеевич
пропущено...
Вам показалось.
я вообще не особо был уверен
но вот накрапал тест и вроде таки вне транзакции оно
declare @t table(id int)
insert @t(id) values(1)
select * from @t
begin tran
insert @t(id) values(2)
select * from @t
rollback
select * from @t


(1 row(s) affected)

id
-----------
1

(1 row(s) affected)


(1 row(s) affected)

id
-----------
1
2

(2 row(s) affected)

id
-----------
1
2

(2 row(s) affected)
Оу оу, полегче. Если данные из табличных переменных не откатываются, это не значит, что они не логируются. А если логируются, значит работают вполне себе в трензакции.

Сообщение было отредактировано: 4 авг 16, 23:13
4 авг 16, 23:11    [19502285]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Гавриленко Сергей Алексеевич,

я не буду спорить по терминологии
но какая-же это нафиг транзакция если она не может откатиться
4 авг 16, 23:20    [19502338]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Павел-П
Member

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

ну вот такая вот слегка обрезенная транзакция :-)
http://www.sqlservercentral.com/articles/Temporary Tables/66720/
5 авг 16, 00:41    [19502718]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
leov
я не буду спорить по терминологии
Начать с того, что это не временные таблицы.
С временными таблицами ваш тест вернул бы другой результат.

Терминология тоже важна.
Вы спрашиваете про одно, а все поняли вопрос по другому.
5 авг 16, 01:40    [19502913]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
pgalaktionov
Подскажите пожалуйста, какой есть выигрыш от использование временных таблиц в MSSQL.
Например в Oracle не логируются операции-транзакции по временным таблицам и не пишется redo log.
Как это происходит с временными таблицами в MSSQL?
Удобства:
Создаем врем.таблицу. Удобно делать так: select ...into #MyTmp from .... and 1=2
В этом конекшене эта таблица будет видна в запросах, в ХП. В функциях не видна. :(
Очень удобно наполнять ВТ данными (например списки ID для фильтрации), а потом выполнять к-л сложный запрос или ХП.

Удобно применять в сложных отчетах или переливках.
Работает быстро. При необходимости можно проиндексировать.
В транзакциях участвует.

Недостатки:
* В случае кратковременного дисконнекта, ВТ сразу дропается и приложение может жоско заглючить.
* Увлечение большими ВТ хорошо кушает память.
* не видна из другого коннекшена, если приложение использует их несколько.

Итог: при грамотном применении - очень удобная и нужная штука.
5 авг 16, 09:29    [19503322]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
pgalaktionov
Подскажите пожалуйста, какой есть выигрыш от использование временных таблиц в MSSQL.
Например в Oracle не логируются операции-транзакции по временным таблицам и не пишется redo log.
Как это происходит с временными таблицами в MSSQL?


Не выигрыш, а архитектурная возможность. Нигде нет выигрыша. Не верю, что rollback в Оракле не работает с временными таблицами.
5 авг 16, 11:36    [19504345]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
baracs
Member

Откуда: Москва
Сообщений: 7219
pgalaktionov
Подскажите пожалуйста, какой есть выигрыш от использование временных таблиц в MSSQL.
Сервер сам дропает их при выходе за пределы области определения. Или разрыве соединения(й).
Живут в системной tempdb.
LSV
Удобно делать так: select ...into #MyTmp from .... and 1=2
А с обычными таблицами так нельзя?
LSV
Работает быстро. <...> Увлечение большими ВТ хорошо кушает память.
Поясните.
LSV
не видна из другого коннекшена, если приложение использует их несколько.
А глобальные ВТ?
5 авг 16, 12:10    [19504592]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
pgalaktionov
Member

Откуда: Санкт-Петербург
Сообщений: 54
Владислав Колосов,

автор
Не выигрыш, а архитектурная возможность. Нигде нет выигрыша. Не верю, что rollback в Оракле не работает с временными таблицами.


Откатиться конечно можно. Я имел ввиду, что не логируются изменения во временных таблицах, не пишется redo логи, в МSSQL это транзакт лог, если я правильно понимаю.
Вот пример работы временных таблиц в Oracle.

В приложении используются промежуточные таблицы для обработки данных, потом на их основе получается результирующая таблица. Промежуточные удаляются. Промежуточные таблицы я сделал временными GTT в Oracle. И получил серьезный выигрыш в производительности.

Выполнялись один и те же запросы,

Картинка с другого сайта.
5 авг 16, 14:19    [19505627]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
pgalaktionov
Member

Откуда: Санкт-Петербург
Сообщений: 54
pgalaktionov,

И я хотел понять, может ли быть подобный результат от использования временных таблиц в MSSQL
5 авг 16, 14:21    [19505643]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
pgalaktionov,

В MSSQL журнал транзакций содержит и redo и undo.
Для tempdb, где физически располагаются временные таблицы и таблицы-переменные, redo не пишется в ЖТ, т.к. для этой БД не требуется выполнять recovery.
5 авг 16, 14:37    [19505782]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Гавриленко Сергей Алексеевич
Member

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

И я хотел понять, может ли быть подобный результат от использования временных таблиц в MSSQL
Временные таблицы живут в отдельной базе, поэтому в транзакшн-лог вашей базы они не попадут.
5 авг 16, 15:00    [19505974]     Ответить | Цитировать Сообщить модератору
 Re: Преимущества временных таблиц в MSSQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Существуют СУБД вообще без транзакций.
Вы можете использовать минимальное протоколирование для более быстрой вставки.
https://msdn.microsoft.com/ru-ru/library/dd425070(en-us).aspx
5 авг 16, 15:16    [19506072]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить