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

Откуда: Латвия, Рига
Сообщений: 287
Добрый день,

Столкнулся с такой проблемой.

Есть скрипт вставки данных в таблицу. (Таких примерно 10) . Каждый скрипт окружен транзакцией. Пример
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION


INSERT ....

COMMIT TRANSACTION


Если все эти скрипты выполнять по очереди, то время выполнения несколько секунд.

А вот если сделать вокруг них еще одну транцакию то время выполнения увеличевается до 2 минут.
Пример


SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION

:r Script1.sql
:r Script2.sql
.....
COMMIT TRANSACTION
23 мар 12, 13:03    [12301308]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
Да забыл вопрос задать то: Почему так происходит?
23 мар 12, 13:04    [12301318]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Anti_Hacker
Да забыл вопрос задать то: Почему так происходит?


А заодно забыли пояснить, во втором скрипте, :r Script1.sql - WTF?
23 мар 12, 14:03    [12301906]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Anti_Hacker
А вот если сделать вокруг них еще одну транцакию то время выполнения увеличевается до 2 минут.
Лог большой получается, наверно.
А если выполнять раздельно, каждый COMMIT очищает лог
23 мар 12, 14:06    [12301939]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
SamMan,
sqlcmd Utility
:r < filename>
Parses additional Transact-SQL statements and sqlcmd commands from the file specified by <filename> into the statement cache.


Anti_Hacker, select @@version что вернет?
23 мар 12, 14:12    [12302008]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
SamMan
Member

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

Да это-то (что ТС с sqlcmd "химичит") я понял... ВНУТРИ Script1.sql у него что? И почему бы просто "студийный" скрипт не привести, ну или хотя бы "каркас" такого скрипта?
23 мар 12, 14:19    [12302066]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
SamMan,
SamMan
"каркас" такого скрипта

Anti_Hacker
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION


INSERT ....

COMMIT TRANSACTION

транзакция шире->лог больше
23 мар 12, 14:22    [12302096]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
:r Script1.sql - WTF? - eto http://msdn.microsoft.com/en-us/library/ms174187.aspx
23 мар 12, 14:24    [12302116]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
Пример скрипта Script1.sql

SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION


INSERT ....

COMMIT TRANSACTION
23 мар 12, 14:25    [12302132]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
invm
Member

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

В контексте вопроса, не особо важно, что в скриптах содержится.
23 мар 12, 14:25    [12302135]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
SELECT @@VERSION

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
23 мар 12, 14:25    [12302137]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
denis2710
SamMan,
SamMan
"каркас" такого скрипта

Anti_Hacker
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION


INSERT ....

COMMIT TRANSACTION

транзакция шире->лог больше


Проверил, WRITELOG задержок нету. Есть может способы как помочь SQL серверу?
23 мар 12, 14:27    [12302149]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Glory
Member

Откуда:
Сообщений: 104751
Anti_Hacker
Проверил, WRITELOG задержок нету. Есть может способы как помочь SQL серверу?

Надеюсь, что замеры времени выполнения скриптов вы делали в Profiler ?
23 мар 12, 14:30    [12302172]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Anti_Hacker,блокировок как я понимаю тоже не наблюдаете?
23 мар 12, 14:35    [12302227]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Anti_Hacker
Да забыл вопрос задать то: Почему так происходит?


"А вот если сделать вокруг них еще одну транцакию то время выполнения увеличевается до 2 минут."


а зачем вы делаете еще одну транзацию вокруг существующей?

Выполянйте все в одной, ведь роллбек если случится он откатит до самой верхней, если не ошибаюсь...
23 мар 12, 14:46    [12302327]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А последний из десяти скриптов сваливается с ошибкой и откатывает все, что сделали девять предыдущих? Запкскайте профайлер, и меряйте, какая команда тупит.

Сообщение было отредактировано: 23 мар 12, 14:49
23 мар 12, 14:48    [12302350]     Ответить | Цитировать Сообщить модератору
 Re: Транзакция в транзакции  [new]
Anti_Hacker
Member

Откуда: Латвия, Рига
Сообщений: 287
Спасибо за совет. Блокировок не наблюдаю. Буду запускать профайлер.
23 мар 12, 16:28    [12303268]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить