Postgres konstant 30% CPU-Auslastung

8

Ich habe kürzlich meine Postgres-Datenbank von Windows auf CentOS 6.7 migriert. Unter Windows verwendete die Datenbank nie viel CPU, aber unter Linux sehe ich eine konstante ~ 30% CPU (mit Top). (4 Kern auf der Maschine)

Weiß jemand, ob das normal ist oder warum es das tun würde? Die Anwendung scheint gut zu laufen und so schnell oder schneller als Windows.

Beachten Sie, es ist eine große Datenbank, 100 GB + Daten, 1000+ Datenbanken.

Ich habe versucht, mit Pgadmin den Server-Status zu überwachen, aber der Server-Status hängt, und läuft nicht, Fehler "Der Parameter log_filename muss gleich sein"

    
James 26.10.2015, 12:56
quelle

2 Antworten

3

Mit 1000 Datenbanken erwarte ich, dass Vakuumarbeiter und Statistiksammler viel Zeit darauf verwenden, zu überprüfen, was gewartet werden muss.

Ich empfehle Ihnen, zwei Dinge zu tun

  • Erhöhen Sie den Parameter autovacuum_naptime , um die Häufigkeit der Prüfungen zu reduzieren
  • setze% code_de% auf eine Ramdisk

Sie setzen wahrscheinlich auch ein hohes stats_temp_directory -Grenze, um Ihren Kunden zu erlauben, diese hohe Anzahl von Datenbanken zu verwenden, und dies ist eine weitere wahrscheinliche Quelle der CPU-Last, aufgrund der hohen Anzahl von "Slots", die jedes Mal überprüft werden müssen muss sich mit den anderen synchronisieren.

    
mnencia 04.11.2015 16:05
quelle
0

Es kann mehrere Gründe geben, die Serverbelastung zu erhöhen.

  1. Wenn Sie nach Abfragen auf Abfrageebene auf dem Server suchen, sollten Sie eine bestimmte Postgres-Backend-ID mithilfe der Systemtabelle pg_stat_activity einer Systemprozess-ID zuordnen.
  

SELECT pid, datname, benutzername, abfrage FROM pg_stat_activity;

Sobald Sie wissen, welche Abfragen ausgeführt werden, können Sie weitere Untersuchungen durchführen (EXPLAIN / EXPLAIN ANALYSE; Sperren prüfen, etc.)

  1. Sie haben möglicherweise Probleme mit Sperrenkonflikten, wahrscheinlich aufgrund sehr hoher max_connections . Ziehen Sie in Betracht, max_connections zu reduzieren und einen Verbindungs-Pooler zu verwenden, wenn dies der Fall ist. Aber das kann die Antwortzeit für Clientverbindungen verlängern.

  2. Möglicherweise blockiert Windows System Verbindungen und erlaubt keine Verwendung des Systems. Und nun erlaubt Linus seinen Verbindungen, die CPU zu benutzen und schneller zu arbeiten. : P

Auch lesenswert:

  1. So überwachen Sie PostgreSQL
  2. Überwachen der CPU- und Speicherauslastung von Postgres
Somnath Muluk 04.11.2015 10:43
quelle