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

Откуда: Екб
Сообщений: 1236
Здравствуйте!
Вопрос вот какой, я правильно мыслю, что конструкция типа

insert into #temp
exec dbo.proca1

вызовет создание транзакции. Можно ли это предотвратить, кроме как писать данные в таблицу внутри самой хранимки?
16 авг 11, 08:45    [11124059]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Зачем?
16 авг 11, 08:49    [11124063]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1236
tpg,

Может я не прав, но хранимка вызывается часто, никаких изменений не делает - только читает, думаю транзакция - это дополнительные тормоза?
16 авг 11, 08:53    [11124069]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DECLARE @T TABLE(...)

insert into @T
exec dbo.proca1
16 авг 11, 09:16    [11124107]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
pkarklin
DECLARE @T TABLE(...)

insert into @T
exec dbo.proca1
А какая разница?
Всё равно же любая инструкция выполняется в транзакции.
Например:
USE tempdb;
SET NOCOUNT ON;
GO
CREATE PROC P AS
PRINT @@TRANCOUNT;
SELECT 22;
GO
DECLARE @T TABLE(X INT);
INSERT @T EXEC P;
GO
DROP PROC P;
GO
Результат: @@TRANCOUNT=1

denis_viktorovich, это предотвратить нельзя.
16 авг 11, 09:37    [11124199]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap, разница - экономия на записи в лог.
16 авг 11, 09:39    [11124207]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
kDnZP
iap, разница - экономия на записи в лог.
Вопрос был про неявную транзакцию.
Ответ: не начать её нельзя (см. пример)
16 авг 11, 09:46    [11124236]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
kDnZP
iap, разница - экономия на записи в лог.
Экономия на записи в лог будет только при массированых операциях вставки.
16 авг 11, 09:50    [11124253]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap, tpg,
Да знаю я))). Просто расшифровал то, что имеет в виду pkarklin, если я его правильно понял.
16 авг 11, 10:18    [11124417]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
iap
Всё равно же любая инструкция выполняется в транзакции.

К сожалению, это не так. В режиме autocommit инструкция select выполняется вне транзакции. Это видно в dbcc log. Самое противное, что схема наложения блокировок при этом соответствует TIL read committed, вне зависимости от TIL сессии.
16 авг 11, 10:25    [11124458]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
--------------------------------
Guest
Это как
invm
...вне транзакции...

но
invm
...схема наложения блокировок при этом соответствует TIL read committed...

?
16 авг 11, 10:41    [11124595]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1236
Спасибо за ответы! Впредь буду стараться избегать таких конструкции.
16 авг 11, 12:11    [11125419]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
denis_viktorovich
Спасибо за ответы! Впредь буду стараться избегать таких конструкции.
Каких??!


Какой неожиданный финал! Прям О`Генри какой-то!
16 авг 11, 12:13    [11125441]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iap
Каких??!

Какой неожиданный финал! Прям О`Генри какой-то!
select'ов, видимо.
16 авг 11, 12:14    [11125451]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1236
Спасибо за ответы! Впредь буду стараться избегать таких конструкции.
16 авг 11, 12:36    [11125627]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1236
denis_viktorovich,

Пардон, два раза отправилось :-)
16 авг 11, 12:37    [11125636]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1236
iap
Каких??!

Какой неожиданный финал! Прям О`Генри какой-то!



Инсерта из хранимки. Я так понимаю если просто создать времянку и инсертить в нее в конце самой процы, то транзакции не должно быть?
16 авг 11, 12:40    [11125670]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
denis_viktorovich
...Я так понимаю если просто создать времянку и инсертить в нее в конце самой процы, то транзакции не должно быть?
Да с чего вдруг-то?
16 авг 11, 12:48    [11125744]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
iap
Member

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

ЛЮБАЯ инструкция T-SQL, изменяющая данные,
выполняется в своей транзакции, если только
несколько инструкций не объединяются в одну
транзакцию с помощью BEGIN TRANSACTION
16 авг 11, 13:01    [11125859]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
iap
Например:
USE tempdb;
SET NOCOUNT ON;
GO
CREATE PROC P AS
PRINT @@TRANCOUNT;
SELECT 22;
GO
DECLARE @T TABLE(X INT);
INSERT @T EXEC P;
GO
DROP PROC P;
GO
Результат: @@TRANCOUNT=1


Енто да, НО!
USE tempdb;
SET NOCOUNT ON;
GO
CREATE PROC P AS
PRINT @@TRANCOUNT;
SELECT 22;
GO
DECLARE @T TABLE(X INT);
INSERT @T VALUES (11)

BEGIN TRAN
INSERT @T EXEC P;
ROLLBACK TRAN

select * from @T
GO
DROP PROC P;
GO

Т.е. все операции с табл-переменными в лог не заносятся, так что транзакция здесь (т.е. в отсутствии прочих команд модификации данных) - чистый номинал.
16 авг 11, 14:27    [11126526]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP
Просто расшифровал то, что имеет в виду pkarklin, если я его правильно понял.


Совершенно верно поняли, ибо авторам судя по всему мучает не сам факт транзакции, а факт записи в лог.
16 авг 11, 14:34    [11126575]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SamMan
...Т.е. все операции с табл-переменными в лог не заносятся, так что транзакция здесь (т.е. в отсутствии прочих команд модификации данных) - чистый номинал.
Да ну?..
BOL
...Транзакции с использованием переменных table продолжаются только во время процесса обновления соответствующей переменной table. Поэтому переменные table реже подвергаются блокировке и требуют меньших ресурсов для ведения журналов регистрации...

...поскольку переменные table имеют ограниченную область применения и не являются частью постоянных баз данных, они не изменяются в случае откатов транзакций.
Но это не значит, что в лог ничего не пишется.
16 авг 11, 14:39    [11126618]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
tpg
Но это не значит, что в лог ничего не пишется.


1. The first difference is that transaction logs are not recorded for the table variables.

2. Если все же настаиваете - поясните ЧТО именно пишется в тран-лог при изменении табл. переменных и, главное, С КАКОЙ ЦЕЛЬЮ это делается? Ведь должна же такая запись иметь какие-то намерения и последствия, кроме поднятия счетчиков Disk I/O?
16 авг 11, 15:12    [11126898]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SamMan
так что транзакция здесь (т.е. в отсутствии прочих команд модификации данных) - чистый номинал.
Вот именно здесь это никакой не "номинал", ибо в результате в транзакции работает целая процедура.
Мало ли что она там делает!
16 авг 11, 15:19    [11126993]     Ответить | Цитировать Сообщить модератору
 Re: неявная транзакция  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SamMan
...поясните ЧТО именно пишется в тран-лог при изменении табл. переменных и, главное, С КАКОЙ ЦЕЛЬЮ это делается? Ведь должна же такая запись иметь какие-то намерения и последствия, кроме поднятия счетчиков Disk I/O?
backup log tempdb with truncate_only
dbcc log ('tempdb',2)
go

declare @temp table (i int)
insert into @temp select object_id from sys.objects
go

dbcc log ('tempdb',2)
go

backup log tempdb with truncate_only
dbcc log ('tempdb',2)
go
А вот с какой целью?...

Сообщение было отредактировано: 16 авг 11, 15:31
16 авг 11, 15:28    [11127095]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить