|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJНа вопрос "Как выявить запрос, приводящий к блокировке (или незавершенную транзакцию), мне рекомендуют: 1. Писать программы хорошо, тогда таких проблем не будет. 2. Переписать систему "правильно" А упорот, конечно же, "поциент" Кстати, на другом форуме могли бы посоветовать еще и СУБД заменить на "нормальную" :) неа. Тебе прежде всего посоветовали воспользоваться инструментом трассировки или аудита. Чтобы он точно показал место проблемы. И вот когда это место будет локализовано, переписать программу так чтобы она работала правильно. Но ту продолжай упорствовать и придумывать всякую фигню с таблицами мониторинга З.Ы. UPDATE конфликт возможен практически в любой СУБД. И кстати какая у вас верcия FB? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 12:34 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJТак как насчет mon$statements.mon$state? Могу ли я по значению этого поля определить те записи, которые заведомо не могут блокировать таблицу? што??? Код: plaintext 1. 2.
вообще через mon$ никакие записи "определить" нельзя. - update выдает конфликт с номером транзакции - по номеру транзакции ищем ее sql в mon$statements и ее коннект в mon$attachments. Смотрим на update/delete, разумеется, ну или вызов процедур, раз у вас там в селективных процедурах тоже update/delete есть. Всё. А "записи" (конкуренция) определяются только по параметрам конфликтных update/delete из трейса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 12:46 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Симонов Денис ебе прежде всего посоветовали воспользоваться инструментом трассировки или аудита. Чтобы он точно показал место проблемы. Устал я писать снова одно и то же, буду цитировать себя, любимого авторПро трассировку я и не возражал. Только тут такой нюанс, что клиентские компьютеры и сервера принадлежать не мне, а заказчику. А он может и не позволить изменять настройку серверов или запускать лишнее программное обеспечение на клиентских компьютерах. Симонов Денис З.Ы. UPDATE конфликт возможен практически в любой СУБД. Что не мешает фанатам одной СУБД по любому поводу советовать пользователям другой СУБД выбросить это дерьмо и поставить себе нормальную СУБД. Впрочем, так обстоит дело с любым софтом, а не только с СУБД :) Симонов Денис И кстати какая у вас верcия FB? 2.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 12:48 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ, поправка - для трассировки никакие настройки серверов не меняются. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 12:54 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
kdv GJТак как насчет mon$statements.mon$state? Могу ли я по значению этого поля определить те записи, которые заведомо не могут блокировать таблицу? што??? Код: plaintext 1. 2.
вообще через mon$ никакие записи "определить" нельзя. - update выдает конфликт с номером транзакции - по номеру транзакции ищем ее sql в mon$statements и ее коннект в mon$attachments. Смотрим на update/delete, разумеется, ну или вызов процедур, раз у вас там в селективных процедурах тоже update/delete есть. Всё. А "записи" (конкуренция) определяются только по параметрам конфликтных update/delete из трейса. Забыли еще про состояние 2 - stalled :) Терминологическая путаница: замените в моем вопросе слово "записи" на "строки, возвращаемые запросом" Итак: Можно ли я по значению поля mon$state определить, что запрос, указанный в этой строке, не мог блокировать таблицу? [+] kdv GJ, поправка - для трассировки никакие настройки серверов не меняются. Хм... авторА он может и не позволить изменять настройку серверов или запускать лишнее программное обеспечение на клиентских компьютерах ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 12:55 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ, нет, не можно. state тут это состояние запроса - выполняется, идет выборка записей, или еще что. и строки или записи таблицы - это одно и то же. Как "поле" и "столбец". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 13:00 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
kdv GJ, строки или записи таблицы - это одно и то же. Как "поле" и "столбец". Но вы почему-то не поняли, когда я строки, возвращаемые запросом к таблице mon$statements, назвал записями ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 13:04 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJА вот про локализацию что-то особо не заметил. Или вы про трассировку? Тогда я уже объяснил, почему это неприменимо. Не знаете другого способа как определить запрос или несколько потенциальных запросов, которые могут вызвать блокировку? Да что ж ты такой тормоз-то?.. Тебе известно что блокирующий запрос находится в твоём приложении. Тебе известен запрос, выбрасывающий ошибку. Отсюда известна таблица на которой возникает конфликт. Вопрос на засыпку: сколько у тебя в приложении запросов UPDATE вообще и сколько из них изменяют именно эту таблицу? Так трудно найти их все обычным грепом исходников твоего приложения?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 13:26 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Вопрос на засыпку: сколько у тебя в приложении запросов UPDATE вообще и сколько из них изменяют именно эту таблицу? Так трудно найти их все обычным грепом исходников твоего приложения?.. Запросов UPDATE в приложении очень мало. В основном запросы SELECT FROM STORED_PROC. Кроме того, запросы могут быть не в самом EXE-шнике, а, например, в DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 13:48 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Это был риторический вопрос на засыпку. Неважно где этот UPDATE, просто найди и проанализируй их все. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 13:53 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJНо вы почему-то не поняли, когда я строки, возвращаемые запросом к таблице mon$statements, назвал записями да понял я. я не понял, что вы хотели извлечь из "состояния запроса", когда надо смотреть на текст запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:10 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ В основном запросы SELECT FROM STORED_PROC. Проверьте ваши процедуры на наличие update-ов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:13 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJПро трассировку я и не возражал. Только тут такой нюанс, что клиентские компьютеры и сервера принадлежать не мне, а заказчику. А он может и не позволить изменять настройку серверов или запускать лишнее программное обеспечение на клиентских компьютерах. Да заказчик-то тут вообще при чём? Трассировку и проблемную операцию запускаешь на ЛОКАЛЬНОЙ тестовой базе. И сразу видишь сколько транзакций стартует и какие запросы в них. После чего рихтуешь приложение пока не останется ровно одна транзакция. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:17 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ Но, опять же скажу, 95% за то, что есть косячок в клиентском приложении, и его надо бы найти А для этого хотя бы определить запрос, который заблокировал запись. Или несколько запросов, которые могли это сделать. И от этого уже плясать. Надо было задавать вопрос на форуме программистов на Delphi :) Ты погоди на Delphi, там в основном все те же рыла.)) Вот здесь 12399136 раскопано, что параметры [стартующих в приложении транзакций] wait/nowait можно указать в параметрах соединения (Sic!). Найди, где это у тебя там, и поменяй, хотя бы временно, wait, который там скорее всего по-умолчанию, на nowait. Должно привести к тому, что на момент получения ошибки во вторичной транзакции, первичная будет еще "жива" и, возможно, с нужным стейтментом будет присутствовать в таблицах мониторнинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:26 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Vlad FДолжно привести к тому, что на момент получения ошибки во вторичной транзакции, первичная будет еще "жива" и, возможно, с нужным стейтментом будет присутствовать в таблицах мониторнинга. Наоборот. Вторичная транзакция зависнет, дожидаясь завершения первичной и к моменту получения ошибки та будет гарантированно завершена. Что, впрочем, тоже хорошо, поскольку такое зависание придаст ускорения разработчику. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:33 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, При nowait? уверен? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:34 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Vlad FПри nowait? уверен? Сообщение об ошибке прочти по буквам: "Update conflict on nowait transaction". PS: А, да, был неправ. Прочитал твоё сообщение как "заменить nowait на wait". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:36 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Возможно. Просто это плохо соотносится с изначальными заявлениями заявителя, что ничего похожего на ту "первичную" транзакцию на тот момент уже нет в таблицах мониторинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:41 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Vlad FПросто это плохо соотносится с изначальными заявлениями заявителя, что ничего похожего на ту "первичную" транзакцию на тот момент уже нет в таблицах мониторинга. Разве? Он, помнится, ссылался на 22397414 чтобы показать, что проблемную транзакцию таки нашёл и она оказалась в его же приложении... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 14:53 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, А где там написано, что тот его проверочный запрос что-то находит? Впрочем, пусть еще раз выскажется сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 15:04 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Это был риторический вопрос на засыпку. Неважно где этот UPDATE, просто найди и проанализируй их все. В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк. Dependncies может не помочь, так как текст некоторых запросов собирается в run-time. Кроме того, есть еще различные dll, где тоже могут выполняться запросы. При этом каждую из найденных ХП нужно проверять, а не могла ли она выполняться в приложении в тот момент, когда возникла блокировка. А если я ничего так и не найду, а выяснится, что у заказчика еще и дополнительные скрипты запускаются, про которые я ни сном, ни духом... И это предлагают мне в противовес решению, сбросить в лог тексты запросов из mon$statements, которые выполнялись в блокирующей транзакции. Даже если их там окажется несколько десятков, все равно масштабы несравнимы. Dimitry Sibiryakov Да заказчик-то тут вообще при чём? Трассировку и проблемную операцию запускаешь на ЛОКАЛЬНОЙ тестовой базе. А на локальной базе ошибка не возникает. И у других заказчиков тоже не возникает. Только у одного. Спереть у него базу со всеми настройками я не могу. Vlad F Dimitry Sibiryakov, А где там написано, что тот его проверочный запрос что-то находит? Впрочем, пусть еще раз выскажется сам. Транзакции и так NOWAIT. Проверочный запрос отработал корректно и сохранил в лог, что блокирующая транзакция принадлежит соединению, открытому моим же приложением. Сейчас поправил код приложения. Перед выполнением проблемного UPDATE-а (но после старта транзакции) сбрасываю в лог все транзакции моего соединения. А если транзакций больше, чем одна, то еще и все стейтменты моего соединения. А только потом выполняю запрос UPDATE. Если блокирующая транзакция не асинхронная, то должен все поймать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 17:10 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJВ БД несколько тысяч ХП. И все они вызываются из твоего приложения?.. GJА на локальной базе ошибка не возникает. И не надо. Тебе не ошибку надо воспроизводить, а разобраться в потоке выполнения и работе с транзакциями твоего приложения. Ошибка - следствие. Кривая работа с транзакциями - причина. И именно причину-то тебе надо найти и устранить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 17:31 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк. Dependncies может не помочь, так как текст некоторых запросов собирается в run-time. Кроме того, есть еще различные dll, где тоже могут выполняться запросы. При этом каждую из найденных ХП нужно проверять, а не могла ли она выполняться в приложении в тот момент, когда возникла блокировка. Ну и забей, пусть дальше глючит. Схема базы большая, а ты маленький. Да и не пацан уже, за копейки корячиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 18:21 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov GJВ БД несколько тысяч ХП. И все они вызываются из твоего приложения?.. Нет, не все. Но есть ХП, которые вызываются из ХП, которые вызываются из моего приложения. А есть ХП, которые вызываются из ХП, которые вызываются из ХП, которые вызываются из моего приложения. А есть... :) Так и не понял, почему нужно обязательно выбирать сложный способ решения задачи вместо того, чтобы просмотреть десяток ХП, выполнявшихся в блокирующей транзакции. Dimitry Sibiryakov GJА на локальной базе ошибка не возникает. И не надо. Тебе не ошибку надо воспроизводить, а разобраться в потоке выполнения и работе с транзакциями твоего приложения. Ошибка - следствие. Кривая работа с транзакциями - причина. И именно причину-то тебе надо найти и устранить. И что я тогда буду искать? Одновременную работу нескольких транзакций что ли? ъъъъъ GJ В БД несколько тысяч ХП. Средний размер одной ХП, навскидку, пара сотен строк. В теме были советы о том, что надо писать хорошие программы и не надо писать плохие программы. Были советы переделать БД как надо. Но вот совет ар жизни о том, чем и за сколько можно заниматься, пока первый :D ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 18:54 |
|
Firebird + fbExpress lock conflict
|
|||
---|---|---|---|
#18+
GJ, А ведь он не в бровь, но в глаз, - действительно за копейки и действительно не мальчик. И чего тебя на старости лет из бизнес-анализа в системные разработчики потянуло, - совсем что-ли в лавке никого не осталось? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2021, 19:09 |
|
|
start [/forum/topic.php?fid=40&msg=40113136&tid=1559880]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 289ms |
0 / 0 |