Hej. Powiedzmy, że istnieje taka prosta sytuacja:
CREATE TABLE mytab
(
class int NOT NULL,
value int NOT NULL
);
INSERT INTO mytab VALUES
(1, 10), (1, 20), (2, 100), (2, 200);
Zaczyna się transakcja A:
BEGIN;
SELECT SUM(value) FROM mytab WHERE class = 1;
INSERT INTO mytab VALUES (2, 30);
w międzyczasie wchodzi mała szybka transakcja B:
BEGIN;
SELECT SUM(value) FROM mytab WHERE class = 2;
INSERT INTO mytab VALUES (1, 300);
COMMIT;
^-- ta transakcja przechodzi
kończymy transakcje A:
COMMIT;
kończy się spodziewanym błędem could not serialize access due to read/write among transactions .... itd
jakie monitory zapuszczacie na takie sytuacje (aby ustalić dlaczego A się zblokowała) ?
Wykorzystujecie logi postgresa? - (logujecie sobie zapytania od razu z id transakcji <- aby pogrupować per transakcja ? )
Własne skrypty korzystające z widoków pg_stat_*, pg_locks itd... ?
macie lepsze narzędzia ?