Erstellt vor 4 Jahren

Geschlossen vor 4 Jahren

#1565 closed Fehler (fixed)

deadlocks beim anmelden auch nach commit: 5609a646164465de4a4217a2757c27d4c0b6bcee

Erstellt von: information@… Verantwortlicher: m.bunkus@…
Priorität: normal Meilenstein:
Komponente: kivitendo ERP Version: 2.6.2 beta
Schweregrad: Verbesserung Stichworte: Oberfläche
Beobachter: s.schoeling@…, grichardson@…

Beschreibung

INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES (?, ?, ?) (cbafc2c971d749fa85f717ed687da6d3, login, --- markus
)
ERROR: deadlock detected
DETAIL: Process 25129 waits for ShareLock? on transaction 965; blocked by process 25128.
Process 25128 waits for ShareLock? on transaction 966; blocked by process 25129.
HINT: See server log for query details.
CONTEXT: SQL statement "SELECT 1 FROM ONLY "auth"."session" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"

Nach Aktualisieren bzw. nach Aufruf einer neuen Seite verschwindet der Fehler ...

Betrifft auch wieder postgres 8.4 nach Anlegen eines neuen Mandanten.


Anbei der entsprechende Log von postgres

2011-01-19 15:42:42 CET ERROR: relation "schema_info" does not exist at character 17
2011-01-19 15:42:42 CET STATEMENT: SELECT tag FROM schema_info LIMIT 1
2011-01-19 15:42:43 CET ERROR: multiple primary keys for table "project" are not allowed
2011-01-19 15:42:43 CET STATEMENT: ALTER TABLE project ADD PRIMARY KEY (id);
2011-01-19 15:42:44 CET ERROR: schema "tax" does not exist
2011-01-19 15:42:44 CET STATEMENT: DROP SCHEMA tax CASCADE;
2011-01-19 15:43:11 CET ERROR: deadlock detected
2011-01-19 15:43:11 CET DETAIL: Process 25129 waits for ShareLock? on transaction 965; blocked by process 25128.

Process 25128 waits for ShareLock? on transaction 966; blocked by process 25129.
Process 25129: INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES ($1, $2, $3)
Process 25128: DELETE FROM auth.session_content WHERE session_id = $1

2011-01-19 15:43:11 CET HINT: See server log for query details.
2011-01-19 15:43:11 CET CONTEXT: SQL statement "SELECT 1 FROM ONLY "auth"."session" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"
2011-01-19 15:43:11 CET STATEMENT: INSERT INTO auth.session_content (session_id, sess_key, sess_value) VALUES ($1, $2, $3)
2011-01-19 15:45:56 CET ERROR: deadlock detected
2011-01-19 15:45:56 CET DETAIL: Process 25304 waits for ShareLock? on transaction 976; blocked by process 25303.

Anhänge (1)

deadlock.png (100.0 KB) - hinzugefügt von information@… vor 4 Jahren.
Deadlock wirklich

Alle Anhänge herunterladen als: .zip

Änderungshistorie (14)

comment:1 Geändert vor 4 Jahren durch m.bunkus@…

  • Status von new nach assigned geändert

Mehr Infos, please. FCGI? Was heißt "nach Anlegen eines neuen Mandanten"? Welche Schritte hast du genau ausgeführt?

comment:2 Geändert vor 4 Jahren durch information@…

1.) kein fcgi

2.) admin.pl -> neue DB erstellen (SKR04) -> Benutzer DB zuordnen -> Benutzer in Gruppe Vollzugriff -> anmelden mit Benutzer -> DB-Upgradeskripte -> FEHLER

comment:3 Geändert vor 4 Jahren durch m.bunkus@…

Kann ich in der aktuellen unstable mit PostgreSQL 8.4 nicht reproduzieren. Hier meine Schritte (nicht FCGI):

  1. Admin-Bereich angemeldet
  2. DB-Admin gedrückt
  3. Login-Daten eingegeben, "Datenbank anlegen"
  4. DB-Namen vergeben
  5. "Anlegen"
  6. Er legt an.
  7. Benutzer umkonfiguriert.
  8. login.pl aufgerufen
  9. Mit Benutzer angemeldet. Es erscheint die Warnung, dass gleich aktualisiert wird. Weiter.
  10. Es erscheint die Meldung vom Upgrade "Update SKR04: neues Steuerkonto 3804 (19%) für innergemeinschaftlichen Erwerb", dass nichts zu tun ist. Weiter.
  11. Jetzt dauert es eine Weile. Danach werden alle Updates als eingespielt angezeigt. Weiter.
  12. Menü erscheint.

Kein Deadlock.

Bist du sicher, dass du nicht gleichzeitig irgend etwas Anderes laufen hast, das eine Verbindung zur Auth-DB hat? Z.B. ein psql, die Lx-Office-Console oder eine noch laufende FCGI-Instanz.

Noch was. Hast du die Auth-DB in derselben DB, wie die, die du gerade für SKR04 angelegt hast?

comment:4 Geändert vor 4 Jahren durch grichardson@…

  • Beobachter grichardson@… hinzugefügt

(In reply to comment #3)

Kann ich in der aktuellen unstable mit PostgreSQL 8.4 nicht reproduzieren. Hier
meine Schritte (nicht FCGI):

  1. Admin-Bereich angemeldet
  2. DB-Admin gedrückt
  3. Login-Daten eingegeben, "Datenbank anlegen"
  4. DB-Namen vergeben
  5. "Anlegen"
  6. Er legt an.
  7. Benutzer umkonfiguriert.
  8. login.pl aufgerufen
  9. Mit Benutzer angemeldet. Es erscheint die Warnung, dass gleich aktualisiert

wird. Weiter.

  1. Es erscheint die Meldung vom Upgrade "Update SKR04: neues Steuerkonto 3804

(19%) für innergemeinschaftlichen Erwerb", dass nichts zu tun ist. Weiter.

  1. Jetzt dauert es eine Weile. Danach werden alle Updates als eingespielt

angezeigt. Weiter.

  1. Menü erscheint.

Kein Deadlock.

Bist du sicher, dass du nicht gleichzeitig irgend etwas Anderes laufen hast,
das eine Verbindung zur Auth-DB hat? Z.B. ein psql, die Lx-Office-Console oder
eine noch laufende FCGI-Instanz.

Noch was. Hast du die Auth-DB in derselben DB, wie die, die du gerade für SKR04
angelegt hast?

Ich habe das Problem auch ab und zu, wenn ich mich einmal ab- und wieder anmelde geht es aber normal weiter. Ich konnte noch keine Systematik dahinter feststellen, es ist bei mir aber nicht beim Neuanlegen eines Mandanten. Was ich häufiger mache ist den Testmandanten mit den Daten aus dem Echtmandanten zu syncen, da könnte das schon eher sein. Direkt, nachdem der Fehler aufgetaucht ist, habe ich mal ausgeführt:

select * from pg_stat_activity where datname='deutschlandtest';

datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port


18186656 | deutschlandtest | 13878 | 10 | postgres | select * from pg_stat_activity where datname='deutschlandtest'; | f | 2011-01-20 11:48:53.343528+01 | 2011-01-20 11:48:53.343528+01 | 2011-01-20 11:48:11.568002+01 | ::1 | 35285

(1 row)

Sonst ist da nichts.

comment:5 Geändert vor 4 Jahren durch information@…

Hi,
da wir gerade viele neue Server bauen ;-) anbei nochmal die Bestätigung von gestern:

Ein select * from pg_stat_activity, gibt auch nur einen Prozess:

11564 | postgres | 18085 | 10 | postgres | |

Noch was. Hast du die Auth-DB in derselben DB, wie die, die du gerade für SKR04 angelegt hast?

Hmm. Keine Ahnung, hilft diese Ausgabe:

template1=# select datname from pg_database;

datname


template1
template0
postgres
lxerp_auth
TEST

comment:6 Geändert vor 4 Jahren durch grichardson@…

Ich kriege den Fehler regelmässig beim Einloggen wenn ich Benutzer wechsel, die auf unterschiedliche Datenbanken zugreifen. Unter fcgi, allerdings noch dem alten fcgi, ist es sogar so, daß bei Wechsel eines Benutzers die Datenbank nicht mit gewechselt wird, und der neue Benutzer auf einmal die Daten des alten Benutzers sieht.

comment:7 Geändert vor 4 Jahren durch s.schoeling@…

  • Beobachter s.schoeling@… hinzugefügt

ich teste

comment:8 Geändert vor 4 Jahren durch s.schoeling@…

nope. immernoch nicht nachstellbar.

sowohl mit 8.3/8.4, mit/ohne fcgi, mit remote db/lokal, mit content db in der auth db und ohne. nichts.

Ich fürchte Ihr müsst uns das Freitag mal live zeigen.

Geändert vor 4 Jahren durch information@…

Deadlock wirklich

comment:9 Geändert vor 4 Jahren durch information@…

Wie gesagt, wir haben das derzeit in 2 Kundenprojekte und würden auch locker eine Stunde dafür zahlen (so sehr nervt uns das).

comment:10 Geändert vor 4 Jahren durch m.bunkus@…

Das ist schön, dass ihr alle Geld dafür zahlen würdet, aber ich kann das Problem immer noch nicht reproduzieren.

comment:11 Geändert vor 4 Jahren durch information@…

Wie gesagt, ssh-Zugang auf einem Testsystem geben wir dir auch gerne ... Ansonsten warten wir einfach ab.

comment:12 Geändert vor 4 Jahren durch m.bunkus@…

Ich kann es nun reproduzieren, und mit etwas Einsatz von 'curl' kann ich es sogar ziemlich schnell forcieren. Es tritt bei FCGI nahezu sofort auf, wenn ich gleichzeitig drei curl-Prozesse auf Schleife laufen habe. Es tritt mit CGI ebenfalls auf, dort aber viel seltener -- klar, wenn Prozesse unterschiedlich lange zum Startup brauchen, dann ist das Zeitfenster für den Deadlock kleiner.

Ich habe noch keine Idee, wie ich es beheben kann.

comment:13 Geändert vor 4 Jahren durch m.bunkus@…

  • Lösung auf fixed gesetzt
  • Status von assigned nach closed geändert

Sollte in Revision 0c32dd23 behoben sein.

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.