|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastor, ну, связь можно увидеть, например, при FW=OFF. Вставляется запись, меняется генератор делается коммит тут происходит ресет. С учетом FW=OFF вполне может быть запись успела записаться, Коммит успел записаться, а страница генераторов - нет. (хотя у автора fw=on). Скорее всего, где-то в коде есть обращения к генератору вне триггеров, причем, с вызовами типа gen_id(GEN_DB_LOG_ID, 0). Иначе у автора ресеты там постоянно происходят. Видимо, авторы софта не расчитывали на то, что у пользователя их системы за 12-13 лет интенсивность работы с данными вырастет до 5млн транзакций в сутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:37 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov pastorне вижу связи. Попробуй включить логику: при коммите грязные страницы из кэша сбрасываются на диск, включая страницу генераторов. Генераторы работают исключительно на увеличение. Чтобы возникла описанная ситуация, вставленные данные должны записаться на диск, а генератор - нет. В каком случае это возможно? При коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Порядок записи страниц зависит не только от сервера. Еще и от ос/контроллера. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:45 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Вариант 1: при коммите любой транзакции. Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение генератора для вставки записи в таблицу. Опять включаем логику: есть ли разница между этими вариантами?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:52 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov pastorПри коммите какой именно транзакции из 100500 сбрасывается страница генераторов? Вариант 1: при коммите любой транзакции. Вариант 2: при коммите транзакции, которая её "потрогала", то есть получила новое значение генератора для вставки записи в таблицу. Опять включаем логику: есть ли разница между этими вариантами?.. все 10500 в любом порядке. а кеш ос/контроллера посчитал, что этот блок пипец какой востребованный, раз к нему столько обращаются и на носитель скидывать пока не стал. а там и хендлы кончились. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 13:59 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Попробую добавить информации, чтобы не было хождения по кругу с одними и теми же вопросами. Чаще всего слетает генератор у таблицы, которая отвечает за журналирование изменений в БД. Запись в таблицу только из одной хранимой процедуры, которая вызывается из тригеров на вставку/обновление/удаление для 50 разных таблиц. Из программного кода эта таблица только читается - никаких изменений в эту таблицу не проводится. Несколько раз такое возникло и в других таблицах (генераторы тоже "отставали"), где запись происходит из клиентского интерфейса. Отношение возникновения ситуаций в дургих таблицах к протоколу, где-то 1к50. Но это по причине того, что в протоколе фиксируется значительно больше строк. Везде генераторы работают по "классике" - в BEFORE INSERT. Т.е. теоретически значение генератора должно инкрементироваться еще до того, как этот идентификатор "ляжет" в таблицу. Вопрос Гуру - может ли произойти запись в таблицу без записи изменений в таблице генераторов, если генератор инкрементится в тригере? БД в одном фале - может ли как-то влиять структура файловой системы? У нас виртуальный сервер? Может есть какие-то настройки кеша (буфера), которые можно "подергать"? UPD: еще вопрос. Может ли влиять как-то SWEEP=0 ? У меня "свип" по расписанию каждые 3 часа вызывается, а в самой БД интервал сброшен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:01 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubПопробую добавить информации Попробуй ещё раз, в этом раунде у тебя не получилось. Ты рассказываешь как твоя система работает по твоему мнению. Это не поможет решить проблему, поскольку система явно работает несколько иначе. delphi_nubВезде генераторы работают по "классике" - в BEFORE INSERT. Т.е. теоретически значение генератора должно инкрементироваться еще до того, как этот идентификатор "ляжет" в таблицу. Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". delphi_nubБД в одном фале Расширение у этого файла какое? delphi_nubУ нас виртуальный сервер? С этим - в битву экстрсенсов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, про виртуальный сервер я ошибочно знак вопроса поставил. Расширение FDB Проверку на пустой ID я убрал, конечно. Но проверка гипотезы займет какое-то время... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:14 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Коллеги, извините, что пишу возможно глупости. Но это от незнания темы и остроты проблемы. Крайним назначили меня и никого не волнуют проблемы индейцев Решил посмотреть в лог-файл сервера. Очень много записей с ошибкой формата: Clump N at offset NNNNNN А потом вот такая: Fatal exception during clumplet dump: Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long Быстрый гуглинг не привел к результату - не может ли это быть следом из одной и той же проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:19 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:20 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ Dimitry Sibiryakov Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Если значение извлекается из генератора на клиентской стороне "перед insert()" - возможно, все встанет колом. :) Только в тригере. Не должно все встать колом, т.к. просто айди записи изменится на более "свежий" Связок с этой таблицей по внешнему ключу нет, т.е. логика данных не нарушится ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:24 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Ну, ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:28 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
DS> Чтобы оно на самом деле так работало, из триггера надо убрать "IF (ID IS NULL)". Ты хорош глупости-то советовать, не зная подробностей. Все связи между таблицами могут накрыться, а он потом восстановить нифига не сможет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:39 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей. Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:44 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Гаджимурадов РустамТы хорош глупости-то советовать, не зная подробностей. Когда ТС проигнорировал все вменяемые советы - не остаётся ничего другого. Какие вменяемые советы были проигнорированы? Поставить "ELSE", чтобы "поймать", что кто-то пишет свой айди? Нет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Все делается в тригерах БД. Еще раз повторю - это протокол изменений БД Т.е. там фиксируется информация, в какой таблице БД, в какое время, какая запись была добавлена/изменена/удалена Запись в эту таблицу с клиента не предусмотрена кодом. Файл БД не расшарен (у нас с этим все очень строго). Расширение файла (не знаю, на что оно влияет) я вам написал. В ходе спора про проверку на нул, могли не заметить мой вопрос про протокол сервера. Посмотрите на него пожалуйста - я через гугл пока не нашел внятного объяснения появления этой ошибки кроме вот этого: http://www.firebirdfaq.org/faq320/ Но там лишь рекоменадция все на UTF8 перевести, а у меня все работает в 1251 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:54 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Версия 2.0 автор ODS version 11.1 Разве так бывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 14:58 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Это ты так думаешь. ъъъъъРазве так бывает? Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:02 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov delphi_nubНет, т.к. данная таблица не пользовательская и пользовательский код в нее не пишет нигде. Это ты так думаешь. ъъъъъРазве так бывает? Не бывает. И вышеприведённые ошибки версия 2.0 тоже выдавать не может. Все равно весело. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:03 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, мог ошибиться в версии FB - где посмотреть реальный № версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:04 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub могли не заметить мой вопрос про протокол сервера. Если ты про ошибки из лога, то, как я уже сказал, версия 2.0 их выдавать не может, они появились только в 3.0 и вызываются тем, что из приложения серверу (клиенту) скармливают мусор в DPB/TPB/итд. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:06 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
delphi_nub Dimitry Sibiryakov, мог ошибиться в версии FB - где посмотреть реальный № версии? Например, посмотри свойства серверного процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:10 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
ъъъъъ Например, посмотри свойства серверного процесса. 2.1.1.17910 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:14 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
IBExpert А почему не рассматривается версия, что кто-то/что-то откатывает значение генератора? Как это возможно и где это можно искать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:15 |
|
GEN_ID дает повторяющееся значение
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2020, 15:15 |
|
|
start [/forum/topic.php?fid=40&msg=39957480&tid=1560352]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 291ms |
0 / 0 |