|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Всем привет Пытаюсь поймать, какая транзакция в приложении не коммитится. Настроил и запустил трейс, конфигурация такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вижу в БД не коммитится транзакция: 6389531 В логе, по ней видно только это: Код: plaintext 1. 2. 3. 4.
Код: plsql 1. 2. 3.
Хочется понять, что же выполнялось в транзакции, чтобы как-то ее идентифицировать? Может еще есть какие-то настройки трейса, которые могут показать, кто и какой индекс/таблицу вычитывал? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 13:13 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Нашел: log_statement_start = true сделал и все увидел. Ступил, что стейтмент может стартовать но не финишировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 13:23 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
AtanasПытаюсь поймать, какая транзакция в приложении не коммитится. а зачем тут трейс? Всё что не-коммиттед есть в mon$transactions. и там (в mon) видно и что за запросы выполняются в ней, и в каком они состоянии, и из какого приложения. Так что, можно было и без трейса. И record_stats тут нафиг не нужен. mon$transactions join mon$statements join mon$attachments. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 15:10 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv AtanasПытаюсь поймать, какая транзакция в приложении не коммитится. а зачем тут трейс? Всё что не-коммиттед есть в mon$transactions. и там (в mon) видно и что за запросы выполняются в ней, и в каком они состоянии, и из какого приложения. Так что, можно было и без трейса. И record_stats тут нафиг не нужен. mon$transactions join mon$statements join mon$attachments. Да ничего в mon$transactions как раз и не видно, поэтому и взялся за трейс. Через mon$record_stats я убеждался что транзакция не просто стартанула и висит, а что-то в ней выполнилось. Приложение из mon$attachments получить не проблема, но я его и так знаю. По поводу все видно не согласен, в mon$statements есть открытые запросы, незакоммиченные, но вот только mon$transaction_id у всех NULL. Как без трейса определить какой из них в рамках нужной транзакции открыт? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:00 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
AtanasДа ничего в mon$transactions как раз и не видно вы ищете активную транзакцию. активные - в mon$transactions. Если ищете транзакцию, которая "долго жила, но уже кончилась" - тогда да, только трейс поможет. Но в трейсе придется долго колупаться, если такая транзакция уже кончилась и в mon$ ее нет. Atanas только mon$transaction_id у всех NULL. да потому что это prepared-запросы, которые не выполняются в данный момент. AtanasКак без трейса определить какой из них в рамках нужной транзакции открыт? transaction_id будет не null (и не 0). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:11 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv, ИХМО, в mon$statements можно было бы ввести ещё одно поле, номер транзакции в которой был препарирован запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:20 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денис, а зачем? он препарируется вроде как не в транзакции (тут я не в курсе деталей). Где ему prepare сделан - вообще пофиг, он к аттачменту привязан, и это хорошо. А выполнить его можно в любой транзакции, и тогда он уже будет "привязан" к конкретной транзакции. Да, и если запрос уже выполнялся в какой-то транзакции, но уже закрыт, но еще prepared - тоже до лампочки. mon$ это текущий снимок, и в момент снимка состояние вот такое, и никакое другое. А что там было раньше-позже и уже кончилось, mon$ не показывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:22 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денис ИХМО, в mon$statements можно было бы ввести ещё одно поле, номер транзакции в которой был препарирован запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:27 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv, prepare в транзакции выполняется судя по API. Как минимум транзакция туда передаётся. Может ли помочь информация в какой транзакции препарирован запрос хз. Если препарирование и выполнение в одной транзакции происходит, то наверное да. В остальных случаях информация скорее всего несёт мало смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 15:42 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денисprepare в транзакции выполняется судя по API. по идее, запросы обычно препарируются и выполняются в одной транзакции. И как я понимаю, поэтому isc_dsql_prepare имеет параметром isc_tr_handle*, без аттачмента (из транзакции аттачмент как раз понятен). Но дальше выполнять prepared statement в этой же транзакции никто не запрещает. Однако, почему ид. транзакции после prepare равен null - честно говоря, х.з. С другой стороны, именно так в mon$ можно отличить выполняемые запросы от просто препарированных. В другом варианте можно было бы у mon$statememts.mon$state добавить в MON$STATE состояние prepared. Почему сделано вот так, а не через mon$state - понятия не имею. Так внутри движка? Кроме того, вот это вот idle и active меня вводят в ступор Код: plaintext 1. 2.
А вот idle - это в состоянии fetch? Зачем тогда написано idle? Унификация с attachments и transactions? Непонятнооо... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:00 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdvиз транзакции аттачмент как раз понятен Как раз таки нет, их там может быть несколько. Препарирующей транзакцией определяется состояние метаданных, доступное данному запросу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:05 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv, нет я не за то чтобы препарирующую транзакцию записывать в transaction_id. Пусть там будет как раз идентификатор транзакции в который выполняется запрос ибо выполняться он может восе не обязательно в той же транзакции в которой препарировался. Я за то, чтобы ввести ещё один столбец prepared_transaction_id ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:10 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денис, а я за то, чтобы фиксировать transaction_id при prepare, а не делать его null. а в mon$statements.mon$state добавить состояние prepared. imho так более логично, чем добавлять какой-то непонятный столбец в тот же mon$statements. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:15 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv Однако, почему ид. транзакции после prepare равен null - честно говоря, х.з. kdv С другой стороны, именно так в mon$ можно отличить выполняемые запросы от просто препарированных. kdv В другом варианте можно было бы у mon$statememts.mon$state добавить в MON$STATE состояние prepared. kdv А вот idle - это в состоянии fetch? Т.е. выполнение запроса приостановлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:30 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov kdvиз транзакции аттачмент как раз понятен Как раз таки нет, их там может быть несколько.Не может. 2PC тр-ции тут не в кассу, если ты об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:31 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Попытка ответа самому себе считается ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:31 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денис Я за то, чтобы ввести ещё один столбец prepared_transaction_id ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:34 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
hvlad Уже много раз объясняли, idle это состояние между фетчами, или между open и fetch. Т.е. выполнение запроса приостановлено. это stalled ;-) А idle - это запрос препарирован, но не выполняется. Либо еще, либо уже (выполнился, курсор закрыт, но запрос не освобожден). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:36 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
kdv AtanasДа ничего в mon$transactions как раз и не видно вы ищете активную транзакцию. активные - в mon$transactions. Если ищете транзакцию, которая "долго жила, но уже кончилась" - тогда да, только трейс поможет. Но в трейсе придется долго колупаться, если такая транзакция уже кончилась и в mon$ ее нет. Atanas только mon$transaction_id у всех NULL. да потому что это prepared-запросы, которые не выполняются в данный момент. AtanasКак без трейса определить какой из них в рамках нужной транзакции открыт? transaction_id будет не null (и не 0). Я про это пишу, транзакция активная. Запрос в ней открыт, но в mon$statements у него mon$transaction_id = null, что не позволяет мне определить, какой запрос выполнился/выполнялся в текущей активной транзакции. Пример из IBExpert: В первом окне SQL-редактора открываю запрос: Код: plaintext 1.
Открываю новое окно и запускаю такой запрос: Код: plaintext 1.
Т.е. видно, что для активной транзакции с помощью mon-таблиц нет возможности найти выполнившийся в рамках нее запрос/запросы, хоть запросы еще не закрыты. Заполненый mon$transaction_id имеют только запросы выполняющиеся (фетчащиеся) в текущий момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:36 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Симонов Денис ввести ещё один столбец prepared_transaction_id мониторинг - это слепок текущего состояния. Он не может ссылаться на потенциально несуществующую (уже завершенную, например) транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:38 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Atanas с помощью mon-таблиц нет возможности найти выполнившийся в рамках нее запрос/запросы ибо это история, к таблицам мониторинга она не имеет отношения. Также там нет возможности увидеть закоммиченные в прошлом транзакции и отключенных недавно юзеров :-) Инструмент выбран неверно, для истории есть трассировка/аудит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:41 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
dimitr Atanas с помощью mon-таблиц нет возможности найти выполнившийся в рамках нее запрос/запросы ибо это история, к таблицам мониторинга она не имеет отношения. Также там нет возможности увидеть закоммиченные в прощлом транзакции и отключенных юзеров :-) Инструмент выбран неверно, для истории есть трассировка/аудит. Я отвечал на вопрос kdv, почему связался с трейсом ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:44 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
hvlad Симонов Денис Я за то, чтобы ввести ещё один столбец prepared_transaction_id А почему нельзя пока выборка/крурсор не закрыт оставлять заполненным mon$transaction_id? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 16:50 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
Atanas А почему нельзя пока выборка/крурсор не закрыт оставлять заполненным mon$transaction_id? в принципе, можно. Сейчас просто в движке снимается флаг активности запроса сразу после чтения последней записи и это отражается в мониторинге. Даже если клиент еще не закрыл курсор. Наверное можно выводить ID транзакции всегда, пока курсор к ней привязан (т.е. по сути пока не закрыт), ибо тр-цию с активными курсорами все равно нельзя завершить и ссылка будет легальна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 17:01 |
|
Информация по транзакции
|
|||
---|---|---|---|
#18+
dimitr это stalled ;-) По крайней мере тут 22375038 два состояния :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 17:02 |
|
|
start [/forum/topic.php?fid=40&fpage=4&tid=1559931]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 383ms |
0 / 0 |