powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird + fbExpress lock conflict
25 сообщений из 204, страница 3 из 9
Firebird + fbExpress lock conflict
    #40113085
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJНа вопрос "Как выявить запрос, приводящий к блокировке (или незавершенную транзакцию), мне рекомендуют:
1. Писать программы хорошо, тогда таких проблем не будет.
2. Переписать систему "правильно"
А упорот, конечно же, "поциент"
Кстати, на другом форуме могли бы посоветовать еще и СУБД заменить на "нормальную" :)

неа. Тебе прежде всего посоветовали воспользоваться инструментом трассировки или аудита. Чтобы он точно показал место проблемы. И вот когда это место будет локализовано, переписать программу так чтобы она работала правильно. Но ту продолжай упорствовать и придумывать всякую фигню с таблицами мониторинга

З.Ы. UPDATE конфликт возможен практически в любой СУБД.

И кстати какая у вас верcия FB?
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113087
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJТак как насчет mon$statements.mon$state? Могу ли я по значению этого поля определить те записи, которые заведомо не могут блокировать таблицу?
што???
Код: plaintext
1.
2.
MON$STATE (statement state)
          0: idle
          1: active

вообще через mon$ никакие записи "определить" нельзя.
- update выдает конфликт с номером транзакции
- по номеру транзакции ищем ее sql в mon$statements и ее коннект в mon$attachments. Смотрим на update/delete, разумеется, ну или вызов процедур, раз у вас там в селективных процедурах тоже update/delete есть.
Всё.

А "записи" (конкуренция) определяются только по параметрам конфликтных update/delete из трейса.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113088
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Симонов Денис
ебе прежде всего посоветовали воспользоваться инструментом трассировки или аудита. Чтобы он точно показал место проблемы.

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

Симонов Денис
З.Ы. UPDATE конфликт возможен практически в любой СУБД.

Что не мешает фанатам одной СУБД по любому поводу советовать пользователям другой СУБД выбросить это дерьмо и поставить себе нормальную СУБД.
Впрочем, так обстоит дело с любым софтом, а не только с СУБД :)

Симонов Денис
И кстати какая у вас верcия FB?

2.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113090
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ,

поправка - для трассировки никакие настройки серверов не меняются.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113091
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
kdv
GJТак как насчет mon$statements.mon$state? Могу ли я по значению этого поля определить те записи, которые заведомо не могут блокировать таблицу?

што???
Код: plaintext
1.
2.
MON$STATE (statement state)
          0: idle
          1: active

вообще через mon$ никакие записи "определить" нельзя.
- update выдает конфликт с номером транзакции
- по номеру транзакции ищем ее sql в mon$statements и ее коннект в mon$attachments. Смотрим на update/delete, разумеется, ну или вызов процедур, раз у вас там в селективных процедурах тоже update/delete есть.
Всё.

А "записи" (конкуренция) определяются только по параметрам конфликтных update/delete из трейса.
Забыли еще про состояние 2 - stalled :)

Терминологическая путаница: замените в моем вопросе слово "записи" на "строки, возвращаемые запросом"
Итак:
Можно ли я по значению поля mon$state определить, что запрос, указанный в этой строке, не мог блокировать таблицу?

[+]
kdv
GJ,

поправка - для трассировки никакие настройки серверов не меняются.

Хм...
авторА он может и не позволить изменять настройку серверов или запускать лишнее программное обеспечение на клиентских компьютерах
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113092
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ,

нет, не можно. state тут это состояние запроса - выполняется, идет выборка записей, или еще что.
и строки или записи таблицы - это одно и то же. Как "поле" и "столбец".
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113093
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
kdv
GJ,

строки или записи таблицы - это одно и то же. Как "поле" и "столбец".

Но вы почему-то не поняли, когда я строки, возвращаемые запросом к таблице mon$statements, назвал записями ;)
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113102
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJА вот про локализацию что-то особо не заметил. Или вы про трассировку? Тогда я
уже объяснил, почему это неприменимо. Не знаете другого способа как определить
запрос или несколько потенциальных запросов, которые могут вызвать блокировку?

Да что ж ты такой тормоз-то?..

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

Вопрос на засыпку: сколько у тебя в приложении запросов UPDATE вообще и сколько
из них изменяют именно эту таблицу? Так трудно найти их все обычным грепом
исходников твоего приложения?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113110
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

Вопрос на засыпку: сколько у тебя в приложении запросов UPDATE вообще и сколько
из них изменяют именно эту таблицу? Так трудно найти их все обычным грепом
исходников твоего приложения?..

Запросов UPDATE в приложении очень мало. В основном запросы SELECT FROM STORED_PROC. Кроме того, запросы могут быть не в самом EXE-шнике, а, например, в DLL.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113112
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это был риторический вопрос на засыпку. Неважно где этот UPDATE, просто найди и
проанализируй их все.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113116
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJНо вы почему-то не поняли, когда я строки, возвращаемые запросом к таблице mon$statements, назвал записями
да понял я. я не понял, что вы хотели извлечь из "состояния запроса", когда надо смотреть на текст запроса.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113118
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GJ
В основном запросы SELECT FROM STORED_PROC.


Проверьте ваши процедуры на наличие update-ов.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113119
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJПро трассировку я и не возражал. Только тут такой нюанс, что клиентские
компьютеры и сервера принадлежать не мне, а заказчику. А он может и не позволить
изменять настройку серверов или запускать лишнее программное обеспечение на
клиентских компьютерах.

Да заказчик-то тут вообще при чём? Трассировку и проблемную операцию запускаешь
на ЛОКАЛЬНОЙ тестовой базе. И сразу видишь сколько транзакций стартует и какие
запросы в них. После чего рихтуешь приложение пока не останется ровно одна
транзакция.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113123
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ

Но, опять же скажу, 95% за то, что есть косячок в клиентском приложении, и его надо бы найти А для этого хотя бы определить запрос, который заблокировал запись. Или несколько запросов, которые могли это сделать. И от этого уже плясать.
Надо было задавать вопрос на форуме программистов на Delphi :)

Ты погоди на Delphi, там в основном все те же рыла.))
Вот здесь 12399136 раскопано, что параметры [стартующих в приложении транзакций] wait/nowait можно указать в параметрах соединения (Sic!).
Найди, где это у тебя там, и поменяй, хотя бы временно, wait, который там скорее всего по-умолчанию, на nowait.
Должно привести к тому, что на момент получения ошибки во вторичной транзакции, первичная будет еще "жива" и, возможно, с нужным стейтментом будет присутствовать в таблицах мониторнинга.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113125
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FДолжно привести к тому, что на момент получения ошибки во вторичной транзакции,
первичная будет еще "жива" и, возможно, с нужным стейтментом будет
присутствовать в таблицах мониторнинга.

Наоборот. Вторичная транзакция зависнет, дожидаясь завершения первичной и к
моменту получения ошибки та будет гарантированно завершена. Что, впрочем, тоже
хорошо, поскольку такое зависание придаст ускорения разработчику.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113126
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

При nowait? уверен?
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113128
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПри nowait? уверен?

Сообщение об ошибке прочти по буквам: "Update conflict on nowait transaction".

PS: А, да, был неправ. Прочитал твоё сообщение как "заменить nowait на wait".
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113130
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Возможно. Просто это плохо соотносится с изначальными заявлениями заявителя, что ничего похожего на ту "первичную" транзакцию на тот момент уже нет в таблицах мониторинга.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113136
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПросто это плохо соотносится с изначальными заявлениями заявителя, что ничего
похожего на ту "первичную" транзакцию на тот момент уже нет в таблицах мониторинга.

Разве? Он, помнится, ссылался на 22397414 чтобы показать, что проблемную
транзакцию таки нашёл и она оказалась в его же приложении...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113142
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А где там написано, что тот его проверочный запрос что-то находит?
Впрочем, пусть еще раз выскажется сам.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113185
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

Это был риторический вопрос на засыпку. Неважно где этот UPDATE, просто найди и
проанализируй их все.

В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк. Dependncies может не помочь, так как текст некоторых запросов собирается в run-time. Кроме того, есть еще различные dll, где тоже могут выполняться запросы. При этом каждую из найденных ХП нужно проверять, а не могла ли она выполняться в приложении в тот момент, когда возникла блокировка.
А если я ничего так и не найду, а выяснится, что у заказчика еще и дополнительные скрипты запускаются, про которые я ни сном, ни духом...
И это предлагают мне в противовес решению, сбросить в лог тексты запросов из mon$statements, которые выполнялись в блокирующей транзакции. Даже если их там окажется несколько десятков, все равно масштабы несравнимы.

Dimitry Sibiryakov

Да заказчик-то тут вообще при чём? Трассировку и проблемную операцию запускаешь
на ЛОКАЛЬНОЙ тестовой базе.

А на локальной базе ошибка не возникает. И у других заказчиков тоже не возникает. Только у одного. Спереть у него базу со всеми настройками я не могу.

Vlad F
Dimitry Sibiryakov,
А где там написано, что тот его проверочный запрос что-то находит?
Впрочем, пусть еще раз выскажется сам.

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

Сейчас поправил код приложения. Перед выполнением проблемного UPDATE-а (но после старта транзакции) сбрасываю в лог все транзакции моего соединения. А если транзакций больше, чем одна, то еще и все стейтменты моего соединения. А только потом выполняю запрос UPDATE. Если блокирующая транзакция не асинхронная, то должен все поймать.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113194
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJВ БД несколько тысяч ХП.

И все они вызываются из твоего приложения?..

GJА на локальной базе ошибка не возникает.
И не надо. Тебе не ошибку надо воспроизводить, а разобраться в потоке выполнения
и работе с транзакциями твоего приложения. Ошибка - следствие. Кривая работа с
транзакциями - причина. И именно причину-то тебе надо найти и устранить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113205
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GJ
В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк. Dependncies может не помочь, так как текст некоторых запросов собирается в run-time. Кроме того, есть еще различные dll, где тоже могут выполняться запросы. При этом каждую из найденных ХП нужно проверять, а не могла ли она выполняться в приложении в тот момент, когда возникла блокировка.

Ну и забей, пусть дальше глючит. Схема базы большая, а ты маленький. Да и не пацан уже, за копейки корячиться.
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113210
GJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GJ
Гость
Dimitry Sibiryakov

GJВ БД несколько тысяч ХП.

И все они вызываются из твоего приложения?..

Нет, не все. Но есть ХП, которые вызываются из ХП, которые вызываются из моего приложения.
А есть ХП, которые вызываются из ХП, которые вызываются из ХП, которые вызываются из моего приложения.
А есть... :)

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

Dimitry Sibiryakov

GJА на локальной базе ошибка не возникает.

И не надо. Тебе не ошибку надо воспроизводить, а разобраться в потоке выполнения
и работе с транзакциями твоего приложения. Ошибка - следствие. Кривая работа с
транзакциями - причина. И именно причину-то тебе надо найти и устранить.

И что я тогда буду искать? Одновременную работу нескольких транзакций что ли?

ъъъъъ
GJ
В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк.
Ну и забей, пусть дальше глючит. Схема базы большая, а ты маленький. Да и не пацан уже, за копейки корячиться.

В теме были советы о том, что надо писать хорошие программы и не надо писать плохие программы.
Были советы переделать БД как надо.
Но вот совет ар жизни о том, чем и за сколько можно заниматься, пока первый :D
...
Рейтинг: 0 / 0
Firebird + fbExpress lock conflict
    #40113214
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GJ,

А ведь он не в бровь, но в глаз, - действительно за копейки и действительно не мальчик.
И чего тебя на старости лет из бизнес-анализа в системные разработчики потянуло, - совсем что-ли в лавке никого не осталось?
...
Рейтинг: 0 / 0
25 сообщений из 204, страница 3 из 9
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird + fbExpress lock conflict
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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