powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Забавное поведение rec_version в wait-транзакциях
24 сообщений из 74, страница 3 из 3
Забавное поведение rec_version в wait-транзакциях
    #39281569
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Если используется оптимистичный подход (а я почти уверен что так и есть), и эксклюзивная блокировка страницы происходит только непосредственно перед записью новой версии на страницу. Firebird, в отличие от того же MSSQL не удерживает страничные блокировки до окончания тр-ции (ибо страничные блокировки не являются механизмом обеспечения изоляции тр-ции).
Ему достаточно взять краткую блокировку только на время непосредственного изменения страницы (такие блокировки ещё называют латчами).

Andrey_Возможна такая ситуация, что обе транзакции вычитали одну и ту же запись (с одинаковой историей версий), обе создали у себя новую версию (дельты там, сжатие, все дела), первая успела записать новую версию на страницу, а вторая при попытке записи обнаружила, что версия записи, которая должна ссылаться на новую уже ссылается на что-то (ну или как-то иначе определила, что та версия которую она создала - бракованая). Это конечно не дедлок, но вылететь с лок конфликт в такой ситуации можно... Это уже ближе к тому, что там происходит :)

Andrey_А можно и корректно обработать создав новую версию на основании той истории версий, которая есть сейчас.Для этого нужно:
- откатить всю работу, которую сделали между первоначальным чтением и созданием новой версии
- повторить всю эту работу, основываясь на обновлённой OLD версии
- молиться, чтобы кто-то снова не втиснулся до нас со своим апдейтом

Т.е. мало того, что тут происходит потенциальная беготня по кругу, но и никто не знает сколько там
работы сделали before триггеры - может они пол-бд перечитали и заменили.

Посему решение о повторе работы лежит на программисте, а не навязывается автоматом.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39281728
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_подключиться к базе тройки с сервера 2.5.

если ты имеешь в виду поключиться к серверу тройке через fbclient.dll от 2.5 - то это наплевать.
тут могут возникнуть вопросы уровня сетевого обмена, но с самим файлом БД работает только сервер, и ему почти все равно, кто ему поставляет команды.

если ты имеешь в виджу файл БД с ODS 12 открыть сервером FB 2.5 или файл ODS 11.x открыть сервером FB 3 - то это невозможно.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39281740
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Но возможно это моя вина, я мог запутаться и подключиться к базе тройки с сервера 2.5.

Это не возможно. А вот перепутать локальный протокол с embedded можно.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39281818
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAndrey_Но возможно это моя вина, я мог запутаться и подключиться к базе тройки с сервера 2.5.

Это не возможно. А вот перепутать локальный протокол с embedded можно.К порче БД это никак привести не может
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39281823
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAndrey_Но возможно это моя вина, я мог запутаться и подключиться к базе тройки с сервера 2.5.Это не возможно. А вот перепутать локальный протокол с embedded можно.Сам перечитал, что написал. В общем ничего криминального вроде не делал. Вряд ли это описание принесет пользу, но чтобы не забыть как что было, оставлю его тут.
Что я делал:
Ставил FB 3 из дистрибутива Firebird-3.0.0.32483_2_x64, при инсталяции он правильно определил, что у меня установлен 2.5 и отказался выполнять э...начальные настройки.
Сервер запускал с ключем -a (это dev-машина и я предполагал что потребуется частое переключение между 2.5 и 3.0, а настраивать их одновременную работу не хотелось т.к. они нужны поочереди)
На клиенте использовал fbclient.dll из WOW64
Строка подключения всегда была вида 127.0.0.1:D:\и т.д. (с новыми протоколами пока не разбирался, попробовал что так работает и ладно)
Базу бекапил клиентом и сервером 2.5, ресторил клиентом и сервером 3.0
В firebird.conf менял только ServerMode, игрался с разными вариантами (восновном Super и SuperClassic, непомню запускал ли я тест на Classic или нет.)

Клиентское приложение стартовало 43 потока, каждый выполнял коннект к базе (10 инсерт-потоков, 10 апдейтящих по одной рандомной записи, 3 апдейтящих одну и ту же рандомную запись, 20 читающих эту же рандомную запись). 2 раза в секунду во все потоки приходил ивент по которому они все стартовали транзакцию, выполняли кто-что должен и коммитились. Это не моя идея такого теста, я бы проеверял, как всегда, скорость отклика на N-условно паралельных запросов.

При завершении работы приложения я старался корректно выполнять disconnect, но часто некоторые потоки зависали из-за эксепшенов (те самые лок конфликты) и я приложение срубал через Ctrl+F2 из Delphi или в диспетчере задач когда standalone.
То есть, при срубании могло оставаться 1-4 коннекта с открытыми транзакциями.

Тестовых запусков приложения было порядка 15. Восновном они были короткие т.к. происходило зависание потоков. Но были и тесты крутившиеся несколько минут.

Других коннектов к серверу (IBExpert например) небыло.

Краш был обнаружен на утро следующего дня. Не уверен что это важно, вроде в FB нет шедулеров работающих с диском по таймеру. Ну кроме управляемого MaxUnflushedWriteTime, но этот параметр я не трогал.

Ошибка выдается при запросе select * from "Table1"

статистика базыDatabase "D:\DB\RDBTEST_3.0.FDB"
Database header page information:
Flags 0
Generation 29095
System Change Number 0
Page size 16384
ODS version 12.0
Oldest transaction 28854
Oldest active 28901
Oldest snapshot 28901
Next transaction 28902
Sequence number 0
Next attachment ID 612
Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Jul 26, 2016 18:33:10
Attributes force write

Variable header data:
Sweep interval: 20000
*END*


Database file sequence:
File D:\DB\RDBTEST_3.0.FDB is the only file

Analyzing database pages ...
Expected data on page 177
Table1 (128)
Primary pointer page: 163, Index root page: 164
Pointer pages: 1, data page slots: 1632
Data pages: 1632, average fill: 78%
Primary pages: 1295, secondary pages: 337, swept pages: 621
Empty pages: 5, full pages: 1344
Fill distribution:
0 - 19% = 176
20 - 39% = 69
40 - 59% = 20
60 - 79% = 90
80 - 99% = 1276

Index PKTable1 (0)
Root page: 1006, depth: 2, leaf buckets: 13, nodes: 35444
Average node length: 5.30, total dup: 0, max dup: 0
Average key length: 3.00, compression ratio: 1.27
Average prefix length: 2.82, average data length: 1.00
Clustering factor: 2786, ratio: 0.08
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 11

Table2 (129)
Primary pointer page: 167, Index root page: 168
Pointer pages: 1, data page slots: 1608
Data pages: 1608, average fill: 80%
Primary pages: 1312, secondary pages: 296, swept pages: 632
Empty pages: 3, full pages: 1354
Fill distribution:
0 - 19% = 143
20 - 39% = 72
40 - 59% = 20
60 - 79% = 89
80 - 99% = 1284

Index FKTable2Table1 (1)
Root page: 1015, depth: 2, leaf buckets: 19, nodes: 36000
Average node length: 5.16, total dup: 7996, max dup: 27
Average key length: 2.85, compression ratio: 1.34
Average prefix length: 3.01, average data length: 0.81
Clustering factor: 20372, ratio: 0.57
Fill distribution:
0 - 19% = 0
20 - 39% = 5
40 - 59% = 8
60 - 79% = 0
80 - 99% = 6

Index PKTable2 (0)
Root page: 597, depth: 2, leaf buckets: 13, nodes: 35445
Average node length: 5.30, total dup: 0, max dup: 0
Average key length: 3.00, compression ratio: 1.27
Average prefix length: 2.82, average data length: 1.00
Clustering factor: 2927, ratio: 0.08
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 11

И да, господа, я знаю что прежде чем говорить "я тестировал" нужно разобраться в инструменте который тестируешь. Давайте сейчас это не будем обсуждать, цель - найти последовательность действий для краша базы, а не наставить меня на путь истинный по поводу использования дефолтного конфига.
И еще, не трогайте пожалуйста меня за двойные кавычки. Я сам их терпеть не могу, но опять же, корпоративный CodeStyle.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39281835
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

почти не может

исключение - когда аппликуха падает и вместе с ней падает сaм embedded с непредсказуемыми последствиями

или ещё хуже, аппликуха не падает но тихо "срёт в память" и попадает иногда в кэши встройки

за что я его и не люблю
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39282116
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
Удалось относительно стабильно воспроизвести краш базы.

Всё окружение, как я описывал раньше, те самые 43 коннекта. После нескольких итераций теста (когда на сервер одновременно уходит 43 запроса) в логе FB появляется ошибка:
USER-PC Thu Jul 28 17:11:20 2016
Database: D:\DB\RDBTEST_3.0_CORRUPTION.FDB
internal Firebird consistency check (cannot find tip page (165), file: tra.cpp line: 2307)

После этого иногда сервер падает, иногда работает, но при выключении иногда зависает, а иногда вылетает (иконка в трее не ищезает :)) Вобщем, в результате первой ошибки структуры в памяти оказываются повреждены.
Если с таким не полностью упавшим сервером продолжить работать, иногда это приводит к wrong page type.

Крашится как Super так как SuperClassic.

Сейчас жду разрешения от начальства, чтобы выслать не поломанный бекап+исходники тестов (они вообще для другого делались).

В любом случае, даже если разрешения не будет, дома заново напишу. Кстати, куда высылать?
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39282181
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_,

спасибо.

Ошибка, правда, совсем другая, но это может быть связано.

Высылай на hvlad at users sourceforge net, если есть возможность куда-то выложить - тем лучше.
Если стабильно воспроизводится, то можно exe, без исходников.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39282327
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Отправил с исходниками. Руководство дало свое высочайшее соизволение.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39282429
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_,

Спасибо. Можешь выслать exe ? Не у всех есть Delphi, тем более нужной версии :)
И, я надеюсь, путь к БД, логин и пароль не вшиты в exe, можно будет задать свои ?

PS провайдер глючит с отправкой почты, поэтому пишу тут
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39283139
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Только добрался до компьютера. Выслал бинарник с файлом параметров.

Очень жаль, что не у всех установлено делфи нужной версии :) Хотя, это делает меня, как специалиста, более ценным. И когда ко мне приходят бинарники, я боюсь их запускать, по этому подумал, что будет лучше без него.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39286732
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_,

проблему воспроизвёл, баг в fb3 подтверждаю.
Он весьма специфичный и, похоже, достаточно редкий.

Исправление будет через пару дней, надеюсь.
Ещё раз спасибо
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39290617
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39290844
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad http://tracker.firebirdsql.org/browse/CORE-5327 Спасибо, тоже проверю. Позже. А на 2.5 бекпорт не планируется?
P.S. Тестовый пример с исходниками можно распостранять т.к. если исходники вышли за пределы компании, их нельзя считать privat.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39290878
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_А на 2.5 бекпорт не планируется?Эта ошибка появилась в fb3 (с 64-битными номерами тр-ций), так что я сильно сомневаюсь, что 2.5 затронут ;)

Если наши тестеры не смогут сделать воспроизводимый пример своими силами, приаттачу exe, спасибо.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39315854
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey_hvlad http://tracker.firebirdsql.org/browse/CORE-5327 Спасибо, тоже проверю. Позже...Позже настало. И совершенно случайно я нашел 100% путь воспроизведения. Тот бекап, что я высылал ресторится с ошибками. Точнее при ресторе (с ключами -r -rep) он не говорит, что есть ошибки, но валидация (с ключами -v -n) по свежеотрестореной базе выдает вот такое в firebird.log:
USER-PC Mon Sep 26 17:30:39 2016
Database: D:\DB\RDBTEST_3.0.FDB
Validation started


USER-PC Mon Sep 26 17:30:39 2016
Database: D:\DB\RDBTEST_3.0.FDB
Error: Page 177 wrong type (expected data encountered unknown (89))


USER-PC Mon Sep 26 17:30:39 2016
Database: D:\DB\RDBTEST_3.0.FDB
Error: Data page 177 {sequence 0} is confused in table Table1 (128)


USER-PC Mon Sep 26 17:30:39 2016
Database: D:\DB\RDBTEST_3.0.FDB
Validation finished: 2 errors, 0 warnings, 0 fixed
И в дальнейшем при работе с такой базой сервер ведет себя непредсказуемо (спамит ошибки Page XXX wrong type в firebird.log + кушает памяти больше, чем дозволено). Проверил на релизном билде 3.0 (Firebird-3.0.0.32483_2_x64) и на текущем снапшоте (Firebird-3.0.1.32609-0_x64) - поведение идентично.

Могу повторно выслать бекап, если потерялся за давностью лет.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39315894
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_,

проверил на текущем снапшоте - валидация ошибок не даёт.
Ты уверен, что ресторил\проверял на новом билде ?
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39315895
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_,

проверил на 3.0.0.32483-2_x64 - проблему не вижу
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39315913
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Точнее при ресторе (с ключами -r -rep)
и чем же эти ключи отличаются от -c в плане создания шаблона БД и заливки туда метаданных и данных?
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39316169
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladAndrey_, на 3.0.0.32483-2_x64 - проблему не вижуПрошу прощения, сам запутался и ввел всех в заблуждение - ресторил одну базу, а валидировал другую. Если рестор+валидацию делать с правильной базой - валидация никаких ошибок не выдает. Я рак, мне стыдно. В будущем буду более тщательно проверять условия экспериментов.

kdvAndrey_Точнее при ресторе (с ключами -r -rep)
и чем же эти ключи отличаются от -c в плане создания шаблона БД и заливки туда метаданных и данных?Возможно ничем. Кроме того что в описании ключа rep явно написано слово -replace. А мне и нужно replace. А в описании ключа -c этого слова не написано.
offtopПожалуйста, поймите:
1. Не все кто обращается сюда с вопросами, последние 10 лет занимаются исключительно фаербердом. Для многих СУБД это 3-4-10 по приоритету задача.
2. Из-за высокой скорости современных компьютеров в последнее время стало очень популярно "программирование брутфорсом". Это когда написал-скомпилировал-ошибка-передал-скомпилировал-запустил-ошибка-переделал-скомпилировал-запустил-работает-ЗАБЫЛ про задачу и переключился на следующую.

И, к сожалению, я подхожу в обе категории. По этому я глубоко не вникал в смысл, механику работы, причины появления, побочные эффекты от сочетаний и другие особенности каждого ключа. Я сделал просто - перед рестором я прочитал что в консоль выдает gbak, подобрал подходящие по описанию опции, попробовал, заработало, написал батник и ЗАБЫЛ про задачу.

О причинах почему сейчас сложилось именно так можно написать целую книгу, но я лучше пойду поработаю - кушать хочется больше, чем словоблудить.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39316187
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Прошу прощения, сам запутался и ввел всех в заблуждение - ресторил одну базу, а валидировал другуюУ всех бывает :)
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39317390
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Возможно ничем. Кроме того что в описании ключа rep явно написано слово -replace. А мне и нужно replace. А в описании ключа -c этого слова не написано.
не надо привыкать к хреновым опциям. Как показывает практика, -replace не нужен вообще никогда и ни за чем.
http://www.ibase.ru/gbak/#restore

Что здесь отсутствует? Правильно, знакомый многим параметр -r. Параметр -r на самом деле не -r[estore], а -r[eplace], т.е. не "восстановить", а "заменить" имеющуюся базу данных. Т.е. если в предыдущем примере команды заменить -c на -r, то существующая база данных e.fdb будет молча удалена. Этого допускать нельзя, потому что по разным причинам восстановление из резервной копии может не состояться, и тогда вы останетесь без оригинальной базы данных и с невосстановимой резервной копией.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39317517
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКак показывает практика, -replace не нужен вообще никогда и ни за чем.
Мне нужен. Всегда и везде.
...
Рейтинг: 0 / 0
Забавное поведение rec_version в wait-транзакциях
    #39317670
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Miwaonline!
You wrote on 29 сентября 2016 г. 11:32:48:

Miwaonline> Мне нужен. Всегда и везде.+1
у нас рестор выполняется на отдельном резервном сервере.
7 папочек по дням недели.
в каждой соответственно восстановленная база на этот день.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Забавное поведение rec_version в wait-транзакциях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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