powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Undo log
44 сообщений из 44, показаны все 2 страниц
Undo log
    #38478322
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера Влад читал лекцию с красивыми картинками как сабж запроса сливается с сабжем
транзакции. Хорошенько проспавшись, сформулировались у меня два вопроса.

Вопрос первый: если какая-то запись уже изменялась в этой транзакции, информация о ней в
логе объединится или удвоится?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38478410
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovесли какая-то запись уже изменялась в этой транзакции, информация о ней в
логе объединится или удвоится?я бы сделал два "забега", с трейсом: в первом забеге поменял бы "длинную" запись (varchar(NNNN)) 1000 раз, затем - 10 тыс. Засёк бы время по трейсу.
Во втором бы повторил это всё, срубая аттач примерно перед окончанием DML. И смотрел бы при этом на время в execute_statement_finish.
...
Рейтинг: 0 / 0
Undo log
    #38478413
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непоказательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38478616
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНепоказательно.Why ? если время по двум вариантам устойчиво (не-) различается, то... что "не показательного" ?
...
Рейтинг: 0 / 0
Undo log
    #38478640
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВопрос первый: если какая-то запись уже изменялась в этой транзакции, информация о ней в логе объединится или удвоится?
смотря что называть "информацией о записи в логе". Она состоит из двух частей - собственно undo item (два десятка служебных байт, всегда в памяти) и undo data (собственно данные записи, могут уходить в temp). При первом апдейте в логе будет только undo item, т.к. для отката нам достаточно сделать backout. Второй апдейт приведет к update-in-place, так что в логе будет и undo item и undo data, отдельно от первого undo item-а (на другом сейвпойнте). При слиянии второго сейвпойнта с сейвпойнтом тр-ции (по окончании второго апдейта) инфа о записи объединится. Иными словами, дублирование в логе будет только на время выполнения второго апдейта и только в размере undo item, а не всей записи.
...
Рейтинг: 0 / 0
Undo log
    #38478714
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrПри слиянии второго сейвпойнта с сейвпойнтом тр-ции (по окончании второго
апдейта) инфа о записи объединится.
И после этого слияния в логе транзакции будет только undo item, без undo data, правильно?

Тогда вопрос номер два: какое место в этой картине занимают explicit savepoint и особенно
в случае, если лог транзакции не существует?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38478718
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИ после этого слияния в логе транзакции будет только undo item, без undo data, правильно?
насколько я помню, да

Dimitry SibiryakovТогда вопрос номер два: какое место в этой картине занимают explicit savepoint и особенно в случае, если лог транзакции не существует?
они ничем не отличаются от системных, кроме метода порождения
...
Рейтинг: 0 / 0
Undo log
    #38478757
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrони ничем не отличаются от системных, кроме метода порождения

Чисто уточнить, что я правильно понимаю:
1) В отличии от сабжа транзакции, их сабж никогда не уничтожается (и, соответственно,
порождается даже при tpb_no_auto_undo).
2) Если не было release savepoint, то их лог никогда не вливается в транзакционный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38479007
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЧисто уточнить, что я правильно понимаю:
1) В отличии от сабжа транзакции, их сабж никогда не уничтожается (и, соответственно,
порождается даже при tpb_no_auto_undo).
2) Если не было release savepoint, то их лог никогда не вливается в транзакционный.

1) уничтожается при RELEASE/ROLLBACK + tpb_no_auto_undo, ну и при завершении транзакции, естественно
2) верно
...
Рейтинг: 0 / 0
Undo log
    #38479020
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr1) уничтожается при RELEASE/ROLLBACK + tpb_no_auto_undo, ну и при завершении
транзакции, естественно
Я неправильно выразился. Имелось в виду, что он не уничтожается при достижении размера
50000 записей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38479027
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, конечно, упаси боже. И системные и юзерские сейвпойнты всегда должны иметь возможность откатить свои изменения, это краеугольный камень. А для сейвпойнта транзакции это всего-лишь бонус, влияющий на производительность, никакой функциональной нагрузки он не несет.
...
Рейтинг: 0 / 0
Undo log
    #38479089
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВчера Влад читал лекцию
Линк будет? :)
...
Рейтинг: 0 / 0
Undo log
    #38479100
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люблю такие топики. Димы, спасибо.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38496038
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrОна состоит из двух частей - собственно undo item (два десятка служебных
байт, всегда в памяти) и undo data (собственно данные записи, могут уходить в temp).
Ещё вопрос: каков формат undo data? Дельта, message или DSC?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38496049
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЛинк будет? :)
нет, не будет. Лекция была за деньги.
...
Рейтинг: 0 / 0
Undo log
    #38496052
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИмелось в виду, что он не уничтожается при достижении размера 50000 записей.
к слову, было сказано, что пресловутые "50-60к записей" весьма условная цифра, т.к. подсчет ведется достаточно сложным образом.
...
Рейтинг: 0 / 0
Undo log
    #38496064
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕщё вопрос: каков формат undo data? Дельта, message или DSC?

распакованная запись (record->rec_data)
...
Рейтинг: 0 / 0
Undo log
    #38496171
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvNickDeeЛинк будет? :)
нет, не будет. Лекция была за деньги.
Можно было бы сделать бесплатный доступ к видео для участников, и платный для неучастников. Просто мысли.
...
Рейтинг: 0 / 0
Undo log
    #38496176
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeМожно было бы сделать бесплатный доступ к видео для участников, и платный для неучастников. Просто мысли.
можно было бы, если бы. А так - видео снимать запрещено, и сами не снимаем, потому что продавать его не планировали. Ибо такие вещи "продаются" практически никак, и до первого, кто их начнет распространять бесплатно.

Такой семинар, платный, планировался в Москве, но пока с датой неясно. Например, у меня до конца декабря курсы, в январе командировка, а в феврале, по идее, семинар по транзакциям пройдет в Варшаве и Будапеште (второе пока под вопросом).
Получается, что Москва не раньше марта.
...
Рейтинг: 0 / 0
Undo log
    #38496251
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

будем ждать
...
Рейтинг: 0 / 0
Undo log
    #38557932
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От нечего делать копался в птичьих потрохах. Обнаружил, что сабж - битовая маска. Пожалуйста, скажите, что я как обычно ошибаюсь...
...
Рейтинг: 0 / 0
Undo log
    #38557938
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, ты ошибаешься. А каким образом
undo log может представлять собой битмап?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38557940
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА каким образом undo log может представлять собой битмап?

Там установлены биты для каждой модифицированной записи в таблице.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38557943
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОт нечего делать копался в птичьих потрохах. Обнаружил, что сабж - битовая маска. Пожалуйста, скажите, что я как обычно ошибаюсь...В простейшем случае - не ошибаешься.
Если запись не модифицировалась несколько раз (в одной и той же тр-ции), то в undo log попадает только её (записи) номер, который, есс-но, живёт в разреженном битмапе.
...
Рейтинг: 0 / 0
Undo log
    #38558078
SEYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvNickDeeЛинк будет? :)
нет, не будет. Лекция была за деньги.

расскажите хотя бы, что за undo log, а то вдруг нужная вещь, тогда можно будет и на платную лекцию в следующий раз сходить.
...
Рейтинг: 0 / 0
Undo log
    #38558199
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SEYD,

IBDeveloper Magazine, номер 1. например, есть в google books.
еще - http://www.ibase.ru/devinfo/savepoints.htm
...
Рейтинг: 0 / 0
Undo log
    #38598321
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrDimitry SibiryakovИ после этого слияния в логе транзакции будет только undo item, без undo data, правильно?
насколько я помню, да
Или я слеп как крот, или одно из двух...

В VIO_verb_cleanup() я вижу вызовы verb_post() без проверки если вливание идёт в лог транзакции. В verb_post() я тоже таких проверок не вижу. Отсюда делаю вывод, что undo data таки сливаются в транзакционый Savepoint. Где я ошибаюсь?
...
Рейтинг: 0 / 0
Undo log
    #38598365
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Прочитай комментарии в VIO_verb_cleanup
...
Рейтинг: 0 / 0
Undo log
    #38598376
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПрочитай комментарии в VIO_verb_cleanup
В "сливающей" ветке там аккурат так два комментария:
vio.cpp // This savepoint needs to be posted to the previous savepoint.
и
vio.cpp // Setup more of rpb because verb_post is probably going to
// garbage-collect. Note that the data doesn't need to be set up
// because old_data will be used. (this guarantees that the
// rpb points to the first fragment of the record)
из них я в упор не вижу где undo data будет уничтожено без использования.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598394
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В начале
Код: plaintext
1.
2.
3.
4.
// If the current to-be-cleaned-up savepoint is very big, and the next
// level savepoint is the transaction level savepoint, then get rid of
// the transaction level savepoint now (instead of after making the
// transaction level savepoint very very big).


и в конце
Код: plaintext
1.
2.
3.
// If the only remaining savepoint is the 'transaction-level' savepoint
// that was started by TRA_start, then check if it hasn't grown out of
// bounds yet.  If it has, then give up on this transaction-level savepoint.
...
Рейтинг: 0 / 0
Undo log
    #38598398
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, и на эту строчку тоже посмотри
Код: plaintext
1.
	if (sav_point->sav_verb_count || transaction->tra_save_point)
...
Рейтинг: 0 / 0
Undo log
    #38598399
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оба этих комментария относятся к отправлению в мусорку целого транзакционного сейфпоинта
из-за его размеров. Я же спрашиваю о случае когда он сохраняется, поскольку достаточно мал
и в него вливаются такие же маленькие сейфпоинты, но с undo data внутри.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598410
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladна эту строчку тоже посмотри
Она всего лишь начинает блок "отката или объединения". Следующий if конкретно делит поток
выполнения на "откат" и "влив". Так вот ветка "отката" на данный момент меня не волнует. ;)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598474
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

я тебя потерял - в чём вопрос-то ?
...
Рейтинг: 0 / 0
Undo log
    #38598477
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladя тебя потерял - в чём вопрос-то ?
Где процедура/ветка, которая сливает в транзакционный сейфпоинт битмап записей, но
без undo data.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598479
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГде процедура/ветка, которая сливает в транзакционный сейфпоинт битмап записей, но
без undo data.

Код: sql
1.
2.
3.
4.
5.
if (!action->vct_undo ||
	!action->vct_undo->locate(Firebird::locEqual, rpb.rpb_number.getValue()))
{
	verb_post(tdbb, transaction, &rpb, 0, false, false);
}



см. четвертый параметр у verb_post()
...
Рейтинг: 0 / 0
Undo log
    #38598497
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr
Код: sql
1.
2.
3.
4.
5.
if (!action->vct_undo ||
	!action->vct_undo->locate(Firebird::locEqual, rpb.rpb_number.getValue()))
{
	verb_post(tdbb, transaction, &rpb, 0, false, false);
}


Поправьте меня, если я ошибаюсь, но action берётся из текущего вливаемого
Savepoint. Тот, в который вливают это transaction->tra_save_point. Соответственно,
процитированный код звучит как "если у данного Savepoint для данной таблицы списка undo
data нет вообще или в этом списке нет undo data для данной записи, то влить данную запись
без undo data". Что логично - нету же его.
Дальше по коду идут случаи когда а) undo data есть и запись не удалена - undo data
вливается, и б) когда запись была изменена и потом удалена - вливается тоже без undo data.

А я говорю о случае, когда у текущего Savepoint для данной записи undo data есть, запись
не удалена, но undo data не вливается в следующий Savepoint, поскольку тот
принадлежит транзакции (имеет флаг SAV_trans_level). Вот этого случая я не могу найти в коде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598502
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГде процедура/ветка, которая сливает в транзакционный сейфпоинт битмап записей, но без undo data.Я тебя стал понимать ещё меньше.

Dimitry SibiryakovА я говорю о случае, когда у текущего Savepoint для данной записи undo data есть, запись
не удалена, но undo data не вливается в следующий Savepoint, поскольку тот
принадлежит транзакции (имеет флаг SAV_trans_level). Вот этого случая я не могу найти в коде.Потому что такого нет и быть не может (если я хоть что-то понял в процитированном)
...
Рейтинг: 0 / 0
Undo log
    #38598512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПотому что такого нет и быть не может (если я хоть что-то понял в
процитированном)
Точно. До меня дошло: не существует запроса, способного изменить одну запись дважды.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598523
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ты не вот это часом ищешь?

Код: plaintext
1.
2.
3.
4.
// We are posting an update-in-place, but the current savepoint has
// already undo data for this record.  The old_data will not be used,
// so make sure we garbage collect before we lose track of the
// in-place-updated record.
...
Рейтинг: 0 / 0
Undo log
    #38598529
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovhvladПотому что такого нет и быть не может (если я хоть что-то понял в
процитированном)
Точно. До меня дошло: не существует запроса, способного изменить одну запись дважды.Я очень рад, что до тебя что-то дошло, хотя я по-прежнему ничего не могу понять.

PS Наш MERGE может изменить одну запись дважды, кривой триггер на UPDATE может повторно изменить ту же запись...
...
Рейтинг: 0 / 0
Undo log
    #38598534
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrты не вот это часом ищешь?
Да, именно это. Я просто не грокнул всех последствий этой ветки. Всё-таки туповат я для
проектов такого уровня.

hvladНаш MERGE может изменить одну запись дважды, кривой триггер на UPDATE может
повторно изменить ту же запись...
Нет, триггер (а точнее - запрос в нём) выполняется в собственном сейфпоинте, так что не
может дойти к ситуации, когда родительский сейфпоинт запись не трогал, а дочерний сразу
приходит с undo data.

А вот за MERGE я не уверен... В каких случаях он может изменить запись дважды и как при
этом будет с сейфпоинтами?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Undo log
    #38598589
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovhvladНаш MERGE может изменить одну запись дважды, кривой триггер на UPDATE может
повторно изменить ту же запись...
Нет, триггер (а точнее - запрос в нём) выполняется в собственном сейфпоинте, так что не
может дойти к ситуации, когда родительский сейфпоинт запись не трогал, а дочерний сразу
приходит с undo data.А ты в курсе, что после выполнения стеймента, данные его сейвпойнта сливаются с предыдущим ? При помощи того же verb_post

Dimitry SibiryakovА вот за MERGE я не уверен... В каких случаях он может изменить запись дважды и как при
этом будет с сейфпоинтами?MERGE - это OUTER JOIN. Надеюсь, ты можешь придумать случай, когда записи одного потока соответствует более одной записи из другого ? :)
С сейвпойнтами ничего необычного не будет.
...
Рейтинг: 0 / 0
Undo log
    #38598614
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА ты в курсе, что после выполнения стеймента, данные его сейвпойнта сливаются
с предыдущим? При помощи того же verb_post
Да, но это фигня. Когда дело последовательно дойдёт-таки до сейфпоинта, где запись была
впервые потрогана, undo data благополучно дропнется.

hvladMERGE - это OUTER JOIN. Надеюсь, ты можешь придумать случай, когда записи
одного потока соответствует более одной записи из другого ? :)
С сейвпойнтами ничего необычного не будет.
Дай угадаю: у каждого вложенного update свой сейфпоинт, а у merge - свой, общий на них всех?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Undo log
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]