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

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

А пишет не так? Ещё раз Continuing
1 окт 19, 21:38    [21984362]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Сергей08
Member

Откуда:
Сообщений: 224
Спасибо
Не будем использовать go nnn :)
попроовал использовать
while @@id <10000
begin
end
Работает как и должно работать
1 окт 19, 21:55    [21984372]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Сергей08
Member

Откуда:
Сообщений: 224
Спасибо
Похоже не стоит использовать go nnn
C while работает нормпльно
1 окт 19, 21:57    [21984373]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
DbDude
Member

Откуда:
Сообщений: 20
Сергей08,
Посмотрите вот эту статью от Erland Sommarskog:
http://www.sommarskog.se/error_handling/Part2.html
1 окт 19, 22:41    [21984399]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
TaPaK
alexeyvg,

А пишет не так? Ещё раз Continuing
В каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).
1 окт 19, 23:17    [21984410]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6695
alexeyvg
TaPaK
alexeyvg,

А пишет не так? Ещё раз Continuing
В каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).

и что не то? сколоко транзакций не сложились, соклько то остались не commit где там загадка прям
2 окт 19, 08:42    [21984502]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
TaPaK
alexeyvg
пропущено...
В каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).

и что не то? сколоко транзакций не сложились, соклько то остались не commit где там загадка прям
Загадка в том, что 90 тыщ запросов insert были выполнены с сообщением " An error was encountered during execution of batch. Continuing.", однако никаких "An error" не было.

И это сообщение - именно сообщение конструкции go nnn
Если делать цикл, или просто писать insert-ы, то такого сообщения нет.

Я просто не знал о специальных сообщениях студии для конструкции go nnn, поэтому удивлялся, пока не сделал репро и не разобрался.

Вы же, наверное, тоже не знали, иначе зачем это: "Прекращайте Смотреть в том же сеансе", или "та то вы что-то придумываете, или весь скрипт показывайте или расскажите как у вас 1 выводит"?

Ещё вы вот это писали:
TaPaK
Сергей08,

а, там всё проще
GO валит всё в
** An error was encountered during execution of batch. Continuing.
и ошибку лога.

и всё, потом заходит в COMMIT и комитит то что смогло

Наверное, это правильное объяснение, но очень лаконичное, я не понял, что имеется в виду, что :
"заходит в COMMIT и комитит то что смогло"
- это значит:
"делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента",
а сообщение "An error was ..." относится к последней ошибке, и практического смысла в её выводе на каждый инсёрт нет.
2 окт 19, 09:09    [21984518]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6695
alexeyvg,
автор
"делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента",

ТУТ нет никакго автоматического коммита после кажой транзакции. После всего имеем столько открытых транзакций сколько возможно закомитить
2 окт 19, 09:37    [21984547]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6695
как-то так

К сообщению приложен файл. Размер - 19Kb
2 окт 19, 09:59    [21984561]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
TaPaK
как-то так
Во втором варианте скрипта у автора перед инсертом стоит go, поэтому go 100000 у него повторяет только строку с инсертом, но не begin transaction. Поэтому явно запущенная транзакция откатилась при переполнении лога, и дальше строки вставлялись неявными транзакциями при выполнении в insert. Поэтому и @@trancount после всего этого процесса равен 0.
2 окт 19, 10:02    [21984563]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
TaPaK
alexeyvg,
автор
"делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента",

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

Это была моя интерпретация ваших слов.
Я просто пытаюсь понять, что означала ваша фраза "и всё, потом заходит в COMMIT и комитит то что смогло"
Что это за COMMIT? Что в результате этот COMMIT зафиксировал, какую транзакцию? Сколько в этой транзакции было вставлено строк?
2 окт 19, 10:04    [21984564]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6695
Minamoto
TaPaK
как-то так
Во втором варианте скрипта у автора перед инсертом стоит go, поэтому go 100000 у него повторяет только строку с инсертом, но не begin transaction. Поэтому явно запущенная транзакция откатилась при переполнении лога, и дальше строки вставлялись неявными транзакциями при выполнении в insert. Поэтому и @@trancount после всего этого процесса равен 0.

да, при разделении так, откатывает первую, потом вставляет всё что может, т.е. пропускает первые N которые были вызваны перполнением, потом неявной транзакцией сразу с комитом
2 окт 19, 10:13    [21984570]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Yasha123
Member

Откуда:
Сообщений: 1651
alexeyvg
Я имею в виду, что после отката с сообщеним об ошибке, большой транзакции нет, и каждый инсёрт выполняется в своей транзакции, которая потом коммитится.

да ничего там не коммитится вообще.
и в таблице в результате ничего нет.
не знаю, что там у вас такое странное делается,
или вы не дожидаетесь завершения,
но вот мой эксперимент.
все те же исходные данные, 8Мб данных, 8Мб лога,
таблица слегка другая:
create table dbo.test(id int identity, col char(8))

(ну вдруг бы что-то в таблицу попало, хоть посмотреть, что именно...
если верить всем тут отписавшимся, какие-то коммиты тут у вас...)

запрос:
set nocount on;
begin tran

insert into test(col) values('aaaaaaaa')
go 100000


показываю, что ушло в лог.
надо сказать, 2016-ый после чекпойнта и бэкапа лога написал мне 12 записей в лог, из них
2 LOP_BEGIN_XACT и 2 LOP_COMMIT_XACT, их исключаю на картинке.

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

К сообщению приложен файл. Размер - 101Kb
2 окт 19, 11:20    [21984649]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
Yasha123, таблица слегка другая, запрос не совпадает, но результаты почему то другие - действительно, почему это :)
2 окт 19, 11:33    [21984665]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Yasha123
Member

Откуда:
Сообщений: 1651
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
2 окт 19, 11:37    [21984671]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6695
Yasha123
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.

та всё у вас так. при таком запросе остаются все остаются незакомиченные.
2 окт 19, 11:40    [21984681]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
Yasha123
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.
2 окт 19, 11:46    [21984688]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
Yasha123
alexeyvg
Я имею в виду, что после отката с сообщеним об ошибке, большой транзакции нет, и каждый инсёрт выполняется в своей транзакции, которая потом коммитится.

да ничего там не коммитится вообще.
и в таблице в результате ничего нет.
Вот, полный тест; сделал, что бы в таблице оставалось 5 строк
+
use master 
go
drop DATABASE [test_mydb1]
go
CREATE DATABASE [test_mydb1]
 ON  PRIMARY 
( NAME = N'test_mydb1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\test_mydb1.mdf' , SIZE = 8192KB , FILEGROWTH = 0)
 LOG ON 
( NAME = N'test_mydb1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\test_mydb1_log.ldf' , SIZE = 1024KB , FILEGROWTH = 0)
GO
USE [test_mydb1]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [test] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
create table test (id int identity, val char(8000))
go
truncate table test
go
select count(*) as count_of_rows from test
go
select @@trancount as trancount1
go
begin tran
go
select @@trancount as trancount2
go

insert into test(val) values('aaaaaa')
go 70

select @@trancount as trancount3
go
select count(*) count_of_rows1 from test 
go
rollback tran
go
select @@trancount as trancount4
go
select count(*) count_of_rows2 from test 
select * from test 
go

2 окт 19, 12:09    [21984713]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
Minamoto
Yasha123
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.
Ну понятно, нужно поставить go перед insert, а то что получается, 10 000 раз begin tran?
2 окт 19, 12:11    [21984715]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Yasha123
Member

Откуда:
Сообщений: 1651
да уж...

без identity делает так:
сперва все те же

LOP_ABORT_XACT NULL 1
LOP_BEGIN_XACT NULL 1
LOP_DELETE_ROWS dbo.test 19721
LOP_INSERT_ROWS dbo.test 19721


затем начинает постранично писать с коммитом:
LOP_BEGIN_XACT
LOP_COMMIT_XACT
LOP_FORMAT_PAGE
LOP_HOBT_DELTA
LOP_MODIFY_ROW

а потом с какого-то момента посточно
и тоже с коммитом:
LOP_BEGIN_XACT NULL 1
LOP_COMMIT_XACT NULL 1
LOP_INSERT_ROWS dbo.test 1

и теперь в таблице у меня 4885 строк
2 окт 19, 12:13    [21984721]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Yasha123
Member

Откуда:
Сообщений: 1651
Minamoto
Yasha123
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.

хоть и нет у меня go перед инсертом,
но выполняю я, выделив 2 строки:
insert into test values('aaaaaaaa')
go 100000

так что никаких многократных открытий транзакций в явном виде у меня нет
2 окт 19, 12:16    [21984724]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29609
Yasha123
так что никаких многократных открытий транзакций в явном виде у меня нет
Значит, что то ещё не совпадает.

Надёжнее делать полный репро, возьмите мой, что бы посмотреть.

Ещё, может, у вас какие то установки студии другие...
2 окт 19, 12:36    [21984744]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Yasha123
Member

Откуда:
Сообщений: 1651
alexeyvg
Yasha123
так что никаких многократных открытий транзакций в явном виде у меня нет
Значит, что то ещё не совпадает.

Надёжнее делать полный репро, возьмите мой, что бы посмотреть.

Ещё, может, у вас какие то установки студии другие...

для полного совпадения нужно еще совпадение версий серверов.
в лог же разное пишется
2 окт 19, 12:38    [21984749]     Ответить | Цитировать Сообщить модератору
 Re: Возможно неполное завершение транзакции?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6960
Никогда не использовал GO NN. Однако, можно прикрутить к этому какую-то devops автоматизацию или отладку.
2 окт 19, 12:59    [21984779]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить