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"
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
autovacuum_naptime
, um die Häufigkeit der Prüfungen zu reduzieren 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.
Es kann mehrere Gründe geben, die Serverbelastung zu erhöhen.
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.)
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.
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:
Tags und Links windows database-migration postgresql centos