ƒобро пожаловать в форум, Guest††>>†† ¬ойти†|†–егистрац舆| ѕоиск†|†ѕравила†| ¬ избранное | ѕодписатьс€
¬се форумы / PostgreSQL Ќовый топик †† ќтветить
 –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
я столкнулс€ с интересной ситуацией. ¬ моем приложении есть worker service и web service. —татус сущности Job (enum в исходном коде и integer в базе данных) измен€етс€ в worker service (в фоновом режиме). ¬ веб-службе есть endpoint, который возвращает некоторую информацию, включа€ job статус. я поставил точку останова, отладилс€ и обнаружил, что статус отличаетс€ от статуса в PgAdmin. я думал, причина в Dapper. Ќо € попробовал простой DataReader, и поведение было таким же. “аким образом, результат запроса только дл€ чтени€ в PgAdmin и среде выполнени€ (C #, .NET Core) различаютс€ в одном и том же моменте времени. я затрудн€юсь пон€ть, в чЄм может быть причина и как решить проблему. я читал о MVCC в PostgreSQL. ћожет, дело в этом механизме. Ќо € не уверен.

 лючевые моменты довольно просты:

1 - статус измен€етс€ в TransactionScope с уровнем изол€ции ReadCommited путем update SQL-запроса с использованием Dapper
2 - статус считываетс€ простым select-запросом (не в TransactionScope) с помощью Dapper / DataReader (это не столь важно)
3 - статус получаетс€ в PgAdmin с помощью простого select-запроса

»тог: статус на шаге 2 не равен статусу на шаге 3

≈сть какие-то идеи?
31 мар 21, 09:22††††[22302340]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV,

я почти уверен что у вас получаетс€ 1 и 2 внутри одной транзакции отрабатывают
а 3 вы делаете до того как 1 сделает commit
вот и разные результаты.



--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
31 мар 21, 10:49††††[22302373]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk,

возможно, € некорректно объ€снил или ¬ы мен€ не пон€ли. ” мен€ в Worker Service мен€етс€ статус (в TransactionScope). ¬ веб-сервисе в get-ендпойнте € поставил точку останова. —татус в коде и при выполнении Select-запроса в PgAdmin различаютс€. “о есть у мен€ сработала точка останова (на запросе, но сам запрос пока не выполн€л), € пошЄл и посмотрел статус в PgAdmin. «атем выполнил в коде Select-запрос и посмотрел статус в коде. —татусы не эквивалентны. ѕолучаетс€, что транзакци€ применилась, ведь результат в PgAdmin говорит об этом. ѕочему же тогда в коде результат совсем другой? ¬от, что мне непон€тно.

P.S.: select-запросы € выполн€ю вообще не в TransactionScope. «апросы в данном случае вообще живут в разных сервисах - один в web service, другой - в windows service.
31 мар 21, 20:38††††[22302736]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV
Maxim Boguk,

возможно, € некорректно объ€снил или ¬ы мен€ не пон€ли. ” мен€ в Worker Service мен€етс€ статус (в TransactionScope). ¬ веб-сервисе в get-ендпойнте € поставил точку останова. —татус в коде и при выполнении Select-запроса в PgAdmin различаютс€. “о есть у мен€ сработала точка останова (на запросе, но сам запрос пока не выполн€л), € пошЄл и посмотрел статус в PgAdmin. «атем выполнил в коде Select-запрос и посмотрел статус в коде. —татусы не эквивалентны. ѕолучаетс€, что транзакци€ применилась, ведь результат в PgAdmin говорит об этом. ѕочему же тогда в коде результат совсем другой? ¬от, что мне непон€тно.

P.S.: select-запросы € выполн€ю вообще не в TransactionScope. «апросы в данном случае вообще живут в разных сервисах - один в web service, другой - в windows service.


¬ таком случае очень просто (предполага€ что вы все таки на dev базе экспериментируете)
¬ключаете на базе полный лог запросов... и смотрите кто на ком сто€л...
“.е. кака€ сесси€ и когда и какие запросы выполн€ла.
ќбычно все становитс€ сразу пон€тно.

--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
1 апр 21, 00:00††††[22302778]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk, тут всЄ, как € и думал.

ѕоследовательный лог. Update в транзакции. ѕри этом результат в коде совсем не равен 4 (а равен 1, как видно из скриншота).

2021-04-01 20:52:49.963 MSK [9148] –°–Ю–Ю–С–©–Х–Э–Ш–Х: –≤—Л–њ–Њ–ї–љ–µ–љ–Є–µ <unnamed>:

UPDATE "Jobs"

SET "StatusCode" = $1, "EndedDate" = $2, "ChangeStatusTime" = $2

WHERE "Id" = $3
2021-04-01 20:52:49.963 MSK [9148] –Я–Ю–Ф–†–Ю–С–Э–Ю–°–Ґ–Ш: –њ–∞—А–∞–Љ–µ—В—А—Л: $1 = '4', $2 = '2021-04-01 20:52:49.960399+03', $3 = 'a6deb163-c331-4a4b-a115-fd70388eb026'
2021-04-01 20:52:49.970 MSK [9148] –°–Ю–Ю–С–©–Х–Э–Ш–Х: –Њ–њ–µ—А–∞—В–Њ—А: COMMIT

2021-04-01 20:53:17.233 MSK [17680] –°–Ю–Ю–С–©–Х–Э–Ш–Х: –≤—Л–њ–Њ–ї–љ–µ–љ–Є–µ <unnamed>: SELECT "Id"

, "ImageQueryFrameId"

, "StatusCode"

, "TypeCode"

, "OperationType"

, "EndedDate"

, "CreatedDate"

, "StartedDate"

, "LeftDirection"

, "RightDirection"

, "BottomDirection"

, "LastModifiedDate"

FROM "Jobs"

WHERE "Id" = $1
2021-04-01 20:53:17.233 MSK [17680] –Я–Ю–Ф–†–Ю–С–Э–Ю–°–Ґ–Ш: –њ–∞—А–∞–Љ–µ—В—А—Л: $1 = 'a6deb163-c331-4a4b-a115-fd70388eb026'
2021-04-01 20:53:18.199 MSK [9192] –°–Ю–Ю–С–©–Х–Э–Ш–Х: –Њ–њ–µ—А–∞—В–Њ—А: /*pga4dash*/

  сообщению приложен файл. –азмер - 40Kb
1 апр 21, 21:03††††[22303125]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk


¬ таком случае очень просто (предполага€ что вы все таки на dev базе экспериментируете)
¬ключаете на базе полный лог запросов... и смотрите кто на ком сто€л...
“.е. кака€ сесси€ и когда и какие запросы выполн€ла.
ќбычно все становитс€ сразу пон€тно.


Maxim, так что ¬ы скажете с учЄтом предоставленной мною выше информации. «аранее спасибо.
3 апр 21, 22:04††††[22303938]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV
Maxim Boguk


¬ таком случае очень просто (предполага€ что вы все таки на dev базе экспериментируете)
¬ключаете на базе полный лог запросов... и смотрите кто на ком сто€л...
“.е. кака€ сесси€ и когда и какие запросы выполн€ла.
ќбычно все становитс€ сразу пон€тно.



Maxim, так что ¬ы скажете с учЄтом предоставленной мною выше информации. «аранее спасибо.


¬ вашем логе вообще не видно выполнени€ " «атем выполнил в коде Select-запрос и посмотрел статус в коде. ".
ј только update и pgadmin

--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
4 апр 21, 02:25††††[22304000]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk,

ѕрикладываю вырезку из лога. ≈сли нужно ещЄ что-то, прошу уточнить. Ќе думаю, что ¬ам было бы интересно разбиратьс€ в полном логе.

1. Update статуса в значение 4 (в транзакции - виден коммит)
2. Select из кода (статус != 4)
3. ≈щЄ один Select из кода (статус != 4)
4. Select из PgAdmin (статус = 4)

«адержка по времени из-за отладки и сбора данных, но при быстром переключении результат будет таким же. “о есть при одновременном вз€тии статуса из кода и из PgAdmin результаты различны. ѕри том, что все select'ы выполн€ютс€ после update и коммита.

  сообщению приложен файл (PgLog_04-04-2021.txt - 2Kb) cкачать
4 апр 21, 11:24††††[22304032]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV
Maxim Boguk,

ѕрикладываю вырезку из лога. ≈сли нужно ещЄ что-то, прошу уточнить. Ќе думаю, что ¬ам было бы интересно разбиратьс€ в полном логе.

1. Update статуса в значение 4 (в транзакции - виден коммит)
2. Select из кода (статус != 4)
3. ≈щЄ один Select из кода (статус != 4)
4. Select из PgAdmin (статус = 4)

«адержка по времени из-за отладки и сбора данных, но при быстром переключении результат будет таким же. “о есть при одновременном вз€тии статуса из кода и из PgAdmin результаты различны. ѕри том, что все select'ы выполн€ютс€ после update и коммита.


»сход€ из того что вы написали € могу только одну версию предложить - читающий код открыл транзакцию с repeatable read или serializable ƒќ “ќ√ќ как был сделан коммит читающей транзакции. »менно дл€ проверки этой гипотезы € просил лог показать (а не те огрызки что вы прислали).
 стати очень полезно сделать log_line_prefix вида
%m %p %u@%d from %h [vxid:%v txid:%x] [%i]
там будет пон€тнее кто на ком сто€л.


--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
4 апр 21, 11:50††††[22304040]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk,

высылаю полный лог. «апрос в PgAdmin на этот раз не делал. ≈го в логе нет.
ЌасчЄт гипотезы не уверен. „тение происходит вообще не в транзакции (€вной из кода точно нет) и по стеку выполнени€ € сначала дожидалс€ коммита, а затем производил чтение. Ќо вс€кое бывает.

«аранее спасибо.

  сообщению приложен файл (postgresql-2021-04-04_120529.zip - 13Kb) cкачать
4 апр 21, 12:19††††[22304051]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk,
что скажете?
5 апр 21, 18:14††††[22304708]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV
Maxim Boguk,
что скажете?


—кажу что ошибка базы исключена.
«начит где то в коде проблема.
Ќо подробный анализ €вно выходит за пределы форумного ответа.


--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
5 апр 21, 19:52††††[22304764]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
EgorovSV
Member

ќткуда:
—ообщений: 76
Maxim Boguk,

¬ы это по логу пон€ли или это просто догадки?
5 апр 21, 21:33††††[22304798]     ќтветить | ÷итировать —ообщить модератору
 Re: –азный результат при отладке и в PgAdmin  [new]
Maxim Boguk
Member

ќткуда: Melbourne, јвстрали€
—ообщений: 4691
EgorovSV
Maxim Boguk,

¬ы это по логу пон€ли или это просто догадки?


ƒогадки потому что сама по себе база так вести себ€ не будет.


¬ам надо разобрать лог на кто что когда делал с комментари€ми вида:

вот начало транзакции от одного сервиса (запрос-врем€)
вот update

вот запрос от другого сервиса
вот коммит

вот запрос от pgadmin..

и так далее.


“огда и какие то более обоснованные выводы и рекомендации можно будет дать.


--
Maxim Boguk
лучша€ поддержка PostgreSQL: dataegret.ru
6 апр 21, 14:40††††[22305066]     ќтветить | ÷итировать —ообщить модератору
¬се форумы / PostgreSQL ќтветить