Hast Du den Rat von PostgreSQL befolgt und checkpoint_segments erhöht?
Hallo,
in einer DB die seit einigen Jahren stabil läuft tritt plötzlich folgendes Problem auf:
in einer Tabelle werden mehrere hundert Millionen Datensätze erzeugt. Damit geht natürlich die ganze Performace in den Allerwertesten.
in die Tabelle wird nur per Trigger geschrieben, niemals direkt durch die Anwendung.
Ich bin nun dabei, die Ursache zu suchen, aber bsilang noch wenig erfolgreich, was sicher auch daran liegt, dass relativ wenig logging in der Produktivdatenbank eingestellt ist.
Das erste auffällige was ich finden konnte ist folgende Log-Meldung (die sich ewig wiederholt):
2011-12-05 18:56:35 CET LOG: Checkpoints passieren zu oft (alle 23 Sekunden)
2011-12-05 18:56:35 CET TIPP: Erh?hen Sie eventuell den Konfigurationsparameter >>checkpoint_segments<<.
2011-12-05 18:56:58 CET LOG: Checkpoints passieren zu oft (alle 23 Sekunden)
2011-12-05 18:56:58 CET TIPP: Erh?hen Sie eventuell den Konfigurationsparameter >>checkpoint_segments<<.
2011-12-05 18:57:22 CET LOG: Checkpoints passieren zu oft (alle 24 Sekunden)
.......
Meine Fagen nun: Hatte jemand von euch ein ähnliches Phänomen?
Hat jemand Tipps, wie ich das Problem lokalisieren kann ?
Rolf
Hast Du den Rat von PostgreSQL befolgt und checkpoint_segments erhöht?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Wenn die Tabelle nur per Trigger befüllt wird:
- Was löst die Trigger aus?
- Sicher das die Einträge wirklich aus einem Trigger kommen und nicht doch irgendetwas direkt schreibt?
- Gibt es ev. Rekursionen in der/den Triggerfunktionen?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas,
Nein, und wie bereits erwähnt, das ganze läuft seit 5 Jahren ohne Probleme.
Mein Problem ist, ich habe keinerlei Idee, was da passiert! Meine Frage ist, wie kann ich durch geeignetes Logging, dem ganzen auf die Spur kommen?
Problem dabei: ich kann die Datensätze, die da angelegt wurde nicht sehen, schlicht weil kein select mehr möglich ist, da das ganze System in dem Zustand zum einen durch Locks blockiert ist zum anderen die Datenbank soo gross wird, dass allein ein Truncate auf die tabelle eine viertelstunde läuft und ich eh schon alle Hände voll zu tun hab , das wieder online zu bekommen.
Gruß Rolf
Nein, das habe ich nicht gefragt. Ich gehe davon aus, dass der Trigger korrekt abreitet, weil er das seit Jahren tut.
Ich habe gefragt, ob schon mal jemand so ein Phänomen hatte, dass Millionen von Records erzeugt wurden und wie man der Ursache am besten auf die schliche kommen kann.
Rolf
Ich würde schlicht mal auf Rekursion in der Triggerfunktion tippen.
Fahr die Datenbank herunter, wirf alle User raus, sperr den Zugang für alle und dann schau dir das in Ruhe an.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen