Oh Robert,
Wir migrieren zu einem neuen VPS mit 4 Kernen (Ryzen 9 5950x),
Die CPU-Auslastung liegt immer noch bei fast 100 %. Ich weiß wirklich nicht, was falsch ist.
Ich dachte, Sie würden zu einem 8-Kern-Scaleway-Server wechseln?
Welche Bandbreite hat dieser Server? Ich frage mich, ob eine geringe Bandbreite langsame Verbindungen/Trennungen zu einem Engpass verursachen könnte?
Scaleway hat VPS mit Bandbreiten von Hunderten von Megabit pro Sekunde, nicht 30.
30 scheint mir extrem niedrig zu sein.
Dies ist die Spezifikation.
4096 MB DDR3 ECC RAM
4 CPU vCores (3,4+ GHz E3-1231 v3/1241 v3/1240 v5)
200 GB Raid 10 HDD Speicher
5 TB Bandbreite @ 1 Gbit/s (Geschwindigkeit auf 5 Mbit/s begrenzt, nachdem die Zuteilung aufgebraucht ist)
1 IPv4, /64 IPv6
20 Gbit/s TCP DDoS-Schutz, 200 Gbit/s Upgrade verfügbar
Seattle, Washington, USA
Virtualizor Control Panel
Unmanaged
Aufgrund der Zeitverzögerung haben wir uns schließlich für diesen Cloud-Dienstanbieter entschieden. Sie haben die Optimierung des Netzwerks für Besucher aus unserem Land vorgenommen.
Übrigens, die Ausgabe von htop ist
100% CPU-Auslastung ist abnormal.
Alles ist in Ordnung, außer der Auslastung und der CPU-Auslastung.
Gibt es Ungewöhnliches in den Zugriffsprotokollen?
Jetzt scheint es sich zu beruhigen.
Wir vermuten, dass die Wiederherstellung aus einem Backup zu einer Spitzenlast der CPU-Auslastung führt.
Auf jeden Fall vielen Dank, Robert!
Ja, das würde es tun!
Hm, du solltest auf SSDs setzen
Guter Fang, Benjamin!
Scaleway und andere haben NVMe-SSDs. Viel besser!
Die CPU könnte auf die Festplatte warten.
oh sorry I just pasted a wrong spec.
The spec is
4096MB DDR4 ECC RAM
4 CPU vCores (3.4GHz AMD Ryzen 5950X)
100GB Raid NVMe SSD Storage
5TB bandwidth @ 10Gb/s (speed limited to 5Mb/s after allocation used)
1 IPv4, /64 IPv6
20Gb/s TCP DDoS Protection, 200Gb/s upgrade available
Seattle, Washington, US
Virtualizor Control Panel
Unmanaged
It is NVMe. ![]()
Ich glaube, es ist möglich, dass die installierten Plugins die Last erhöht haben.
Das Plugin hat eine solche Änderung am Benutzermodell vorgenommen, dass wir bei der Entdeckungsroute die Punkte des Benutzermodells für das Themenmodell mehrmals berechnen.
add_to_class(:user, :total_earned_points) do
self.user_points.sum(:reward_points)
end
add_to_class(:user, :available_points) do
self.total_earned_points - self.user_rewards.sum(:points)
end
add_to_class(:user, :rewards) do
DiscourseRewards::Reward.where(created_by_id: self.id)
end
add_to_serializer(:basic_user, :total_earned_points) do
user&.total_earned_points
end
add_to_serializer(:basic_user, :available_points) do
user&.available_points
end
add_to_serializer(:current_user, :total_earned_points) do
scope.user.total_earned_points
end
add_to_serializer(:current_user, :available_points) do
scope.user.available_points
end
add_to_serializer(:current_user, :user_rewards) do
scope.user.user_rewards
end
add_to_serializer(:current_user, :rewards) do
scope.user.rewards
end
Ich dachte, du hättest gesagt, du hättest alle Plugins entfernt und es verhielt sich genauso?
Hat das einen Index?
Wie viele Zeilen hat die user_rewards-Tabelle? Interessant, dass sie nicht nach Benutzer unterscheidet … (aber ich nehme an, es muss irgendwie auf dieser Ebene geschehen).
Ich fürchte, es wird kein Index festgelegt.
Das Modell ist unten dargestellt.
module DiscourseRewards
class Reward < ActiveRecord::Base
self.table_name = 'discourse_rewards_rewards'
has_many :user_rewards
belongs_to :created_by, class_name: 'User'
default_scope { where(deleted_at: nil) }
end
end
module DiscourseRewards
class UserPoint < ActiveRecord::Base
self.table_name = 'discourse_rewards_user_points'
belongs_to :user
belongs_to :user_badge
belongs_to :user_points_category
def self.user_total_points(user)
UserPoint.where(user_id: user.id).sum(:reward_points)
end
end
end
module DiscourseRewards
class UserReward < ActiveRecord::Base
self.table_name = 'discourse_rewards_user_rewards'
belongs_to :user
belongs_to :reward
enum status: [:applied, :granted]
end
end
Ich habe alle Plugins im abgesicherten Modus deaktiviert. Aber, wie Sie wissen, hat sich die Datenbank nicht geändert. ![]()
Etwas, das ich mit dem Autor besprechen muss, vermute ich.
Scheint, als ob es für Ihre hohe Benutzerzahl nicht skaliert?
Sie müssen möglicherweise ohne das Plugin neu erstellen. Es wäre ein guter Vergleich und würde vielleicht bestätigen, ob die Probleme durch das Plugin verursacht werden oder nicht.
Die Anwesenheit von Tabellen spielt keine Rolle, wenn die Abfragen nicht ausgeführt werden.
discourse_rewards_user_points | 233525 | 27 MB | 5152 kB | 32 MB
discourse_rewards_user_rewards | 61 | 16 kB | 16 kB | 32 kB
discourse_rewards_user_points_categories | 9 | 16 kB | 16 kB | 32 kB
discourse_rewards_rewards | 4 | 16 kB | 16 kB | 32 kB
Die Tabelle discourse_rewards_user_points ist riesig.
Entfernen Sie es vollständig (aus dem Build, keine Notwendigkeit, die Tabellen zu zerstören), mal sehen, was passiert.
Danke, ich werde es sofort versuchen.
Oh Robert, ich baue ohne das Plugin neu, die Antwortzeit für Seiten der Entdeckungsroute wird von zuvor 2-3 Sekunden auf weniger als 200 ms reduziert. ![]()
Da haben Sie es. Ich würde die Optimierung mit dem Autor besprechen, oder wenn Sie die Fähigkeiten haben, PR?
Ich bitte unseren Freund, der sich mit Datenbanken auskennt, um Hilfe.
Aber er arbeitet an JAVA. Ich denke, das wird einige Zeit dauern.




