Manchmal wird die Datenbank aufgrund bestimmter Abfragen beendet, und uns wurde gesagt, dass wir PostgreSQL optimieren müssen. Haben Sie eine Idee, wie wir das erreichen können?
Im unten stehenden Bildschirm sehen Sie unsere Datenbankressourcen
Hallo zusammen, ich arbeite mit @Abdelrahman_MoHamed daran. Wir haben kürzlich eine Website mit rund 500.000 Themen und 3,5 Millionen Benutzern nach Discourse migriert. Wir sind selbst gehostet auf GCP. Während dieses Prozesses erwähnte unser Partner, der uns bei der Migration unterstützte, dass es sinnvoll sein könnte, Postgres zu optimieren, um die richtige Leistung aus der Datenbank zu erzielen. Unsere Annahme war, dass die Datenbank out-of-the-box für Discourse optimiert ist (vielleicht ist sie das ja?). Angesichts des Vorschlags unseres Partners wollten wir hier nachfragen.
Kurz gesagt: Sind dies gängige Methoden zur Optimierung von Postgres für eine Datenbank mit den hier genannten Zahlen?
Haben Sie detailliertere Beweise dafür, dass die DB der limitierende Faktor oder die Ursache für diese CPU-Auslastungen ist? Zum Beispiel die Ausgabe von ps oder top.
Wenn es die DB ist, stelle ich mir vor, dass es eine Möglichkeit gibt, sie zu fragen, an welchen Abfragen sie gerade arbeitet.
das scheint wirklich eine seltsame Kombination zu sein … 22 GB Arbeitsspeicher, aber nur 4 vCPUs? Überdimensioniert beim Arbeitsspeicher, aber potenziell zu wenige Kerne.
Normalerweise hätte man einen Server mit viel mehr vCPUs pro GB.
Das liegt daran, dass Web-Serving sehr parallel ist und für jedes Unicorn nur etwa 1 GB benötigt wird.
Jedes Unicorn kann meiner Meinung nach auf einem anderen Kern laufen.
Das ist vielleicht der Grund, warum Sie so leicht 100% CPU-Auslastung erreichen.
Ich empfehle Ihnen, eine 16/16- oder sogar eine 8/8-Konfiguration in Betracht zu ziehen und zu sehen, ob sich die Dinge verbessern.
Ist ein kleiner Seitwärtsschritt erlaubt? Sind Unicorns etwas Ähnliches wie PHP-Worker? Ein Dokument versuchte zu erklären, dass Unicorns eigentlich HTTP-Server mit eigenen Workern sind, die Anfragen an Ruby liefern, und dass sie deshalb völlig anders sind. Aber beide verarbeiten HTTP-Anfragen, ermöglichen mehr gleichzeitige Anfragen und daher benötigen mehr PHP-Worker und mehr Unicorns mehr RAM – und für mich sind diese beiden so ziemlich dasselbe.
Richtig oder furchtbar falsch? Ich möchte das Prinzip jetzt verstehen, denn ich weiß, warum, wann und wie man PHP-Worker anpasst, aber Unicorns sind für mich nur mystische und magische Kreaturen.
Verwandt: Wie kann ein Administrator feststellen, ob er zu wenige oder zu viele Einhörner für seinen Webverkehr hat?
Verwandt: Wie kann ein Administrator feststellen, ob er viel mehr RAM hat, als er benötigt?
Mein Verständnis ist, dass die Anzahl der Einhörner im Allgemeinen entsprechend der Anzahl der CPUs skaliert wird, aber das muss nicht sein – wenn sich beispielsweise die Host-Konfiguration seit der Einrichtung geändert hat.
Die Menge an RAM sollte entsprechend dem Bedarf skaliert werden. Ich weiß nicht, ob ein riesiger Import vieler Beiträge und Benutzer unbedingt mehr RAM erfordert – die Frage wäre, wie viel von der Datenbank für jede Webanfrage oder jede reguläre Aufgabe abgerufen wird?
Für mich würde ein 10-minütiger Ausbruch maximaler CPU-Auslastung bei sehr geringer Hintergrundauslastung kein Problem darstellen. (Es wäre ein Problem, wenn es sich um ein sehr geschäftiges und zeitkritisches Forum handelt, wie z. B. ein Sport-/Glücksspiel-Forum, das zu Zeiten des größten Interesses Verzögerungen bei der Bereitstellung von Seiten hat. Aber mein Forum ist weder zeitkritisch noch leistungskritisch.)
Ich weiß nicht, wie man die Bandbreite der letzten Antwortzeiten tabellieren könnte, aber das wären vielleicht gute Daten, die man sich ansehen könnte. Entweder von der Webserver-Seite oder von der Datenbank-Seite.