Ich habe gerade Discourse installiert, aber die Seiten laden sehr langsam wegen einer langsamen externen Datenbank

Homepage benötigt 2-4 Sekunden zum Antworten

Started GET "/" for 219.144.218.209 at 2025-03-17 18:22:55 +0000

Processing by ListController#latest as HTML

Rendered layout layouts/application.html.erb (Duration: 1932.6ms | GC: 10.6ms)

Completed 200 OK in 2521ms (Views: 1933.4ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 14.9ms)

Mein Server hat 2 CPU-Kerne und 8 GB RAM.

Das Protokoll zeigt, dass layouts/application.html.erb so langsam gerendert wurde.

Ich habe einige Inhalte in layouts/application.html.erb entfernt und es dauert 300-500 ms zum Antworten.


<discourse-assets>
    <discourse-assets-stylesheets>
      <%= render partial: "common/discourse_stylesheet" %>
    </discourse-assets-stylesheets>
    <discourse-assets-json>
      <div class="hidden" id="data-preloaded" data-preloaded="<%= preloaded_json %>"></div>
    </discourse-assets-json>
    <discourse-assets-icons></discourse-assets-icons>
  </discourse-assets>

Jede Benutzeranfrage verbraucht viel CPU.
Bitte helfen Sie mir.

Haben Sie eine Standardinstallation durchgeführt?

2 „Gefällt mir“

Ja, das habe ich.

Und ich habe gestern ein Problem gefunden.

Ich habe eine Remote-Datenbank verwendet, die Layoutkomponente von Discourse ruft über 60 SQL-Abfragen ab, jede SQL-Abfrage benötigt ±30 ms zur Übertragung, sodass das erste Rendern 2-4 Sekunden dauert.

Das Problem verschwand, als ich zu einer lokalen Datenbank wechselte.

1 „Gefällt mir“

Ja, das tut er:

Ich habe ein ähnliches Problem.
Ich glaube, Docker macht eine Art magische Indizierung nur für interne Datenbanken, was nicht gut ist, da dies unsere Skalierungsmöglichkeiten stark einschränkt.

Hmmm … das klingt für mich nicht richtig. Die gleichen Migrationen sollten angewendet werden, unabhängig davon, wo sich die Datenbank befindet … und dazu gehört auch das Hinzufügen von Indizes.

Es wäre gut, den Unterschied zu demonstrieren, wenn Sie einen Abfrageplan für beide Instanzen für dieselbe Abfrage erhalten können, die auf der externen Instanz viel länger dauert.

(Ich weiß, dass das für Sie mühsam sein könnte, das zusammenzustellen)

Wenn der Abfrageplan identisch ist, dann muss es doch die Latenz oder die Leistung der externen Datenbank sein, die schuld ist?

Ich habe diesen Plan, den ich vor einiger Zeit für eine langlaufende Abfrage erstellt habe:

Dieser Plan WAR eine lokal gehostete Datenbank, das Problem war die Festplatten-I/O, weshalb ich zu einer externen Datenbank gewechselt bin.

Ich versuche einen Neuaufbau mit einer internen Datenbank.

1 „Gefällt mir“

Das ist vergleichsweise eine riesige Menge Zeit. Mit Ihrem SQL-Setup stimmt etwas ganz und gar nicht.

Wie weit ist die Datenbank entfernt?

Der 99. Perzentil der gesamten SQL-Zeit für eingeloggte Anfragen auf Meta (gehostet in AWS) beträgt ~54ms und auf unserem eigenen Hosting für eine ähnliche Seite ~25ms.

Für anonyme Nutzer sind es etwa 40ms und 10ms.

Das sieht so aus, als ob Sie im Entwicklungsmodus laufen, nicht bei einer Standardinstallation.

1 „Gefällt mir“