{"id":78742,"date":"2020-04-21T19:42:46","date_gmt":"2020-04-21T17:42:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov"},"modified":"2020-04-21T19:42:46","modified_gmt":"2020-04-21T17:42:46","slug":"promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","title":{"rendered":"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken. Nikolai Samokhvalov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Ich lade Sie ein, den Vortrag von Nikolay Samokhvalov \"Industrieller Ansatz zur Tuning von PostgreSQL: Experimente mit Datenbanken\" zu lesen.<\/strong><\/p>\n<p><\/p>\n<p>Sind 25% f\u00fcr shared_buffers viel oder wenig? Oder genau richtig? Wie k\u00f6nnen Sie feststellen, ob diese \u2013 recht veraltete \u2013 Empfehlung f\u00fcr Ihren speziellen Fall geeignet ist?<\/p>\n<p><\/p>\n<p>Es ist an der Zeit, die Parameter von postgresql.conf \"professionell\" auszuw\u00e4hlen. Nicht mit blinden \"Autotunern\" oder veralteten Ratschl\u00e4gen aus Artikeln und Blogs, sondern basierend auf:<\/p>\n<p><\/p>\n<ol>\n<li>streng kontrollierten Experimenten mit Datenbanken, die automatisiert, in gro\u00dfen Mengen und unter Bedingungen durchgef\u00fchrt werden, die den \"Einsatzbedingungen\" so nahe wie m\u00f6glich kommen.<\/li>\n<li>einem tiefen Verst\u00e4ndnis der Funktionsweise von Datenbankmanagementsystemen und Betriebssystemen.<\/li>\n<\/ol>\n<p><\/p>\n<p>Mit Nancy CLI (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres.ai\/nancy\">https:\/\/gitlab.com\/postgres.ai\/nancy<\/a><\/noindex>), werden wir ein konkretes Beispiel betrachten \u2013 die ber\u00fchmten shared_buffers \u2013 in verschiedenen Situationen, in unterschiedlichen Projekten und versuchen herauszufinden, wie wir die optimale Einstellung f\u00fcr unsere Infrastruktur, Datenbank und Last finden k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a15b93734b6563abaec4a713c975732a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Es wird um Experimente mit Datenbanken gehen. Dies ist eine Geschichte, die nun schon etwas mehr als ein halbes Jahr andauert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/e77255c4abaa2a01ae37fe888fe67db7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein bisschen zu mir: Ich habe \u00fcber 14 Jahre Erfahrung mit Postgres. Ich habe mehrere Unternehmen im Bereich soziale Netzwerke gegr\u00fcndet. \u00dcberall kam Postgres zum Einsatz und wird nach wie vor verwendet.<\/p>\n<p><\/p>\n<p>Die RuPostgres-Gruppe hat auf Meetup den 2. Platz weltweit belegt. Wir n\u00e4hern uns allm\u00e4hlich 2.000 Mitgliedern. RuPostgres.org.<\/p>\n<p><\/p>\n<p>Ich bin bei verschiedenen Konferenzen, einschlie\u00dflich Highload, f\u00fcr Datenbanken verantwortlich, insbesondere f\u00fcr Postgres seit der Gr\u00fcndung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/fa009b50f1c0293eee80fc03fd2c05f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In den letzten Jahren habe ich meine Praxis im Postgres-Consulting in 11 Zeitzonen von hier aus wieder aufgenommen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/550c3ddcd516adca14d2b3de9c34b7ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Als ich das vor einigen Jahren gemacht habe, hatte ich eine l\u00e4ngere Pause von der aktiven praktischen Arbeit mit Postgres, wahrscheinlich seit 2010. Ich war \u00fcberrascht, wie wenig sich der Arbeitsalltag eines DBA ver\u00e4ndert hat und wie viel man immer noch manuelle Arbeit aufbringen muss. Sofort dachte ich, dass hier etwas nicht stimmt, und dass man alles viel mehr automatisieren sollte.<\/p>\n<p><\/p>\n<p>Da das alles remote war, waren die meisten Kunden in der Cloud. Vieles war daher offensichtlich bereits automatisiert. Dazu sp\u00e4ter mehr. Das f\u00fchrte zu der Idee, dass es eine Reihe von Tools, also eine Art Plattform, geben sollte, die fast alle DBA-Aktivit\u00e4ten automatisiert, um viele Datenbanken zu verwalten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b02097f0bb23fa9d7c30e38ab9f3de7b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In diesem Bericht wird es nicht gehen:<\/p>\n<p><\/p>\n<ul>\n<li>\u201eSilberne Kugeln\u201c und Aussagen wie \u2013 stellen Sie 8 GB oder 25 % shared_buffers ein, und alles wird gut. \u00dcber shared_buffers wird es nicht so viel geben. <\/li>\n<li>Hochleistungs-Infrastruktur. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ccea359ec78a967c150ddcedc3e50a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was passiert?<\/p>\n<p><\/p>\n<ul>\n<li>Es werden Optimierungsprinzipien vorgestellt, die wir anwenden und weiterentwickeln. Zudem entstehen verschiedene Ideen auf unserem Weg sowie diverse Werkzeuge, die gr\u00f6\u00dftenteils in Open Source entwickelt werden. Das Fundament ist also Open Source. Dar\u00fcber hinaus ist die gesamte Kommunikation und Ticketvergabe fast ausschlie\u00dflich Open Source. Sie k\u00f6nnen verfolgen, was wir aktuell tun, was im n\u00e4chsten Release kommt usw. <\/li>\n<li>Au\u00dferdem wird es einige Erfahrungen mit der Anwendung dieser Prinzipien und Werkzeuge in Unternehmen geben, von kleinen Startups bis hin zu gro\u00dfen Firmen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86e6f379726dec814aca616a30d36a2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie entwickelt sich das alles?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c1422d9f2945e717c6ebb31f5fef6329.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Hauptaufgabe eines DBAs besteht, neben der Erstellung von Instanzen und dem Deployment von Backups, auch darin, Engp\u00e4sse zu identifizieren und die Leistung zu optimieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8e682ca8666e94d6688348ebe4540327.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aktuell ist es so organisiert: Wir betrachten die \u00dcberwachung, erkennen, dass uns einige Details fehlen. Dann beginnen wir, tiefer zu graben, oft manuell, und verstehen, was wir damit tun m\u00fcssen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/04599422ea6b6d57c79a4e48ba2db8b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dabei gibt es zwei Ans\u00e4tze. Pg_stat_statements \u2013 die Standardl\u00f6sung zur Identifizierung langsamer Anfragen. Und die Log-Analyse von Postgres mithilfe von pgBadger.<\/p>\n<p><\/p>\n<p>Jeder Ansatz hat erhebliche Nachteile. Der erste Ansatz ignoriert alle Parameter. Und wenn wir die Gruppen SELECT * FROM table WHERE die Spalte gleich dem Zeichen \u201e?\u201c oder \u201e$\u201c betrachten, beginnend mit Version Postgres 10, wissen wir nicht, ob es sich um einen Index-Scan oder einen Seq-Scan handelt. Es h\u00e4ngt stark von dem Parameter ab. Wenn man einen seltenen Wert einsetzt, wird es ein Index-Scan sein. Setzt man einen Wert ein, der 90 % der Tabelle ausmacht, wird es offensichtlich ein Seq-Scan, da Postgres die Statistiken kennt. Und das ist ein gro\u00dfes Manko von pg_stat_statements, obwohl daran gearbeitet wird.<\/p>\n<p><\/p>\n<p>Die gr\u00f6\u00dfte Schw\u00e4che der Log-Analyse ist, dass Sie normalerweise nicht \u201elog_min_duration_statement = 0\u201c einstellen k\u00f6nnen. Dar\u00fcber werden wir ebenfalls sprechen. Folglich sehen Sie nicht das gesamte Bild. Eine Abfrage, die sehr schnell ist, kann enorme Ressourcen verbrauchen, aber Sie werden sie nicht sehen, da sie unter Ihrem Schwellenwert liegt.<\/p>\n<p><\/p>\n<p><strong>Wie gehen DBAs mit den gefundenen Problemen um?<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/5e57fefdec6256f82045aaac037b516c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zum Beispiel haben wir ein Problem festgestellt. Was wird normalerweise gemacht? Wenn Sie ein Entwickler sind, arbeiten Sie an einem bestimmten Instance, die nicht wirklich gro\u00df ist. Wenn Sie ein DBA sind, haben Sie eine Staging-Umgebung. Und die kann nur eine sein. Sie ist aber schon ein halbes Jahr alt. Und jetzt denken Sie daran, in die Produktion zu gehen. Selbst erfahrene DBAs \u00fcberpr\u00fcfen schlie\u00dflich auch in der Produktion, auf einer Replik. Oft wird ein tempor\u00e4rer Index erstellt, um sicherzustellen, dass dieser hilft. Dann wird er wieder entfernt und den Entwicklern \u00fcbergeben, damit sie ihn in die Migrationsdateien einf\u00fcgen k\u00f6nnen. Solche Dinge passieren derzeit, und das ist bedauerlich.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/402e80c7e5fbca6a054c0c9ec61e5fe3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Konfigurationen optimieren.<\/li>\n<li>Das Set von Indizes optimieren. <\/li>\n<li>Die SQL-Abfrage selbst \u00e4ndern (das ist der komplizierteste Weg).<\/li>\n<li>Ressourcen hinzuf\u00fcgen (der einfachste Weg in den meisten F\u00e4llen).<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8a6b3cd56e0df5c7908714926ba1eb05.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt sehr viele Aspekte. Es gibt viele Funktionen in Postgres. Man muss viel wissen. Viele Indizes in Postgres, auch dank der Organisatoren dieser Konferenz. All das muss man wissen, und genau das l\u00e4sst Nicht-DBAs glauben, dass DBAs mit schwarzer Magie arbeiten. Das bedeutet, man muss mindestens 10 Jahre lernen, um das alles richtig zu verstehen.<\/p>\n<p><\/p>\n<p>Ich bin ein K\u00e4mpfer gegen diese schwarze Magie. Ich m\u00f6chte alles so gestalten, dass Technologie im Vordergrund steht und nicht Intuition.<\/p>\n<p><\/p>\n<p><strong>Beispiele aus dem Leben<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/70b11c3df9c41c66570635d5f309ed24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das habe ich mindestens in zwei Projekten beobachtet, darunter mein eigenes. Ein weiterer Blogbeitrag berichtet uns, dass der Wert von 1.000 f\u00fcr default_statistict_target gut ist. Gut, lassen Sie uns das in der Produktion ausprobieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0b4c2bd6f73df06967c94d5d78b07279.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und hier sind wir, zwei Jahre sp\u00e4ter mit unserem Tool, indem wir Experimente an den Datenbanken durchf\u00fchren, \u00fcber die wir heute sprechen. Wir k\u00f6nnen vergleichen, was war und was geworden ist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/3564eade6532003d2279c2736ab6d733.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und daf\u00fcr m\u00fcssen wir ein Experiment erstellen. Es besteht aus vier Teilen. <\/p>\n<p><\/p>\n<ul>\n<li>Der erste Teil ist die Umgebung. Wir brauchen die Hardware. Und wenn ich zu einem Unternehmen komme und einen Vertrag abschlie\u00dfe, sage ich, dass ich die gleiche Hardware wie in der Produktion m\u00f6chte. F\u00fcr jeden Ihrer Master ben\u00f6tige ich mindestens eine solche Hardware. Entweder ist es eine VM-Instanz bei Amazon oder Google, oder ich ben\u00f6tige genau diese Hardware. Das hei\u00dft, ich m\u00f6chte die Umgebung nachbauen. Und unter Umgebung verstehen wir die Hauptversion von Postgres. <\/li>\n<li>Der zweite Teil ist das Objekt unserer Untersuchungen. Das ist die Datenbank. Sie kann auf verschiedene Arten erstellt werden. Ich zeige Ihnen, wie. <\/li>\n<li>Der dritte Teil ist die Last. Das ist der komplexeste Punkt. <\/li>\n<li>Und der vierte Teil ist das, was wir \u00fcberpr\u00fcfen, das hei\u00dft, womit wir vergleichen werden. Angenommen, wir k\u00f6nnen in der Konfiguration einen oder mehrere Parameter \u00e4ndern oder einen Index erstellen usw. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8ccd09ac4cdd336618413375617c10a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir starten das Experiment. Hier ist pg_stat_statements. Links sehen wir, wie es war. Rechts sehen wir, wie es geworden ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/6f82d7e25a77b700f2ddb01f42a861a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Links default_statistics_target = 100, rechts = 1 000. Wir sehen, dass uns das geholfen hat. Insgesamt hat es um 8 % verbessert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/52dda8fb5fbcb9beecaa1eda8443a374.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn wir nach unten scrollen, finden wir Gruppen von Abfragen aus pgBadger oder pg_stat_statements. Es gibt zwei M\u00f6glichkeiten. Wir sehen, dass eine bestimmte Abfrage um 88 % gesunken ist. Hier ist bereits der ingenieurtechnische Ansatz. Wir k\u00f6nnen tiefer graben, weil es interessant ist, warum sie gesunken ist. Wir m\u00fcssen verstehen, was mit den Statistiken war. Warum mehr Buckets in den Statistiken schlechtere Ergebnisse bringen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4e6dfc04af4b3fc2b626dd46c08bdf66.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alternativ k\u00f6nnen wir auch nicht weiter graben, sondern \"ALTER TABLE \u2026 ALTER COLUMN\" verwenden, um ihm wieder 100 Buckets in den Statistiken dieser Spalte zu geben. Mit einem weiteren Experiment k\u00f6nnen wir uns davon \u00fcberzeugen, dass dieser Fix geholfen hat. Das ist der ingenieurtechnische Ansatz, der uns hilft, das Gesamtbild zu sehen und Entscheidungen auf der Grundlage von Daten und nicht von Intuition zu treffen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c87df172b994a4523478beebaf4a0275.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/9e766aa4348bd1a77b697e3179d84bbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Einige Beispiele aus anderen Bereichen. In den Tests gibt es bereits seit vielen Jahren CI-Tests. Und kein vern\u00fcnftiges Projekt wird heutzutage ohne automatisierte Tests auskommen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b6c21981dc8b2b285973ae42199e2b4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In anderen Branchen, wie der Luftfahrt oder dem Automobilbau, haben wir auch die M\u00f6glichkeit, Experimente durchzuf\u00fchren, wenn wir die Aerodynamik testen. Wir werden nichts direkt vom Entwurf in den Weltraum schicken oder ein Fahrzeug sofort auf die Stra\u00dfe bringen. Zum Beispiel gibt es einen Windkanal. <\/p>\n<p><\/p>\n<p>Aus den Beobachtungen anderer Branchen k\u00f6nnen wir R\u00fcckschl\u00fcsse ziehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cef02ea9280e5795d1e593c600f0541b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zun\u00e4chst einmal haben wir eine spezielle Umgebung. Sie \u00e4hnelt der Produktionsumgebung, ist aber nicht identisch. Ihr Hauptmerkmal ist, dass sie kosteng\u00fcnstig, wiederholbar und maximal automatisiert sein sollte. Au\u00dferdem m\u00fcssen spezielle Werkzeuge f\u00fcr eine detaillierte Analyse zur Verf\u00fcgung stehen.<\/p>\n<p><\/p>\n<p>Wahrscheinlich haben wir, wenn wir das Flugzeug starten und fliegen, weniger M\u00f6glichkeiten, jede Millimeterfl\u00e4che des Fl\u00fcgels zu untersuchen, als wir das in einem Windkanal tun k\u00f6nnten. Wir haben mehr Mittel f\u00fcr die Diagnose. Wir k\u00f6nnen uns erlauben, mehr schweres Equipment anzubringen, das wir uns w\u00e4hrend des Flugs nicht leisten k\u00f6nnen. Genauso ist es mit Postgres. In einigen F\u00e4llen k\u00f6nnen wir vollst\u00e4ndiges Logging der Anfragen w\u00e4hrend der Experimente aktivieren. Und das m\u00f6chten wir in der Produktion nicht tun. Vielleicht werden wir das sogar \u00fcber auto_explain aktivieren.<\/p>\n<p><\/p>\n<p>Und wie ich bereits sagte, bedeutet ein hoher Automatisierungsgrad, dass wir einen Knopf gedr\u00fcckt und alles wiederholt haben. So sollte es sein, um viele Experimente durchzuf\u00fchren und um das Ganze im Fluss zu halten.<\/p>\n<p><\/p>\n<p>Nancy CLI \u2013 das Fundament des \"Datenbanklabors\"<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/f8303df21f309fb209929acec260b757.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und hier haben wir so etwas geschaffen. Das hei\u00dft, ich habe im Juni, vor fast einem Jahr, \u00fcber diese Ideen gesprochen. Und wir haben bereits die sogenannte Nancy CLI als Open Source. Das ist das Fundament, um ein Datenbanklabor aufzubauen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0ed3c72461123745be4fa9e58455baa0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\">Nancy<\/a><\/noindex> \u2014 Das ist Open Source, auf GitLab. Sie k\u00f6nnen es sich ansehen und ausprobieren. Ich habe den Link in den Folien eingef\u00fcgt. Darauf k\u00f6nnen Sie klicken und dann wird es verf\u00fcgbar sein. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/nancy\/-\/blob\/master\/help\/nancy_run.md\">help<\/a><\/noindex> in allen Parametern.<\/p>\n<p><\/p>\n<p>Nat\u00fcrlich gibt es vieles, was sich noch in der Entwicklung befindet. Es gibt eine Vielzahl von Ideen. Aber das hier ist bereits etwas, das wir praktisch jeden Tag anwenden. Und wenn uns die Idee kommt \u2013 was w\u00e4re, wenn wir 40.000.000 Zeilen l\u00f6schen, und wir sto\u00dfen auf IO-Probleme, dann k\u00f6nnen wir Experimente durchf\u00fchren und genauer ansehen, was passiert, um zu verstehen, wie wir das direkt in der laufenden Umgebung beheben k\u00f6nnen. Das hei\u00dft, wir f\u00fchren Experimente durch. Zum Beispiel justieren wir etwas und schauen, was am Ende dabei herauskommt. Und wir machen das nicht in der Produktionsumgebung. Das ist der Kern der Idee.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c22d332de4b45d604dfb9c5a95404fd6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wo kann das funktionieren? Das kann lokal funktionieren, das hei\u00dft, man kann es \u00fcberall machen, sogar auf einem MacBook starten. Man ben\u00f6tigt Docker, und los geht\u2019s. Man kann das in einem beliebigen Server-Instance oder einer virtuellen Maschine, wo auch immer, starten.<\/p>\n<p><\/p>\n<p>Sie haben auch die M\u00f6glichkeit, remote auf Amazon EC2-Instanzen in Spot-Pools zu arbeiten. Das ist eine gro\u00dfartige Gelegenheit. Zum Beispiel haben wir gestern mehr als 500 Experimente auf einer i3-Instanz durchgef\u00fchrt, von der kleinsten bis hin zur i3-16-xlarge. Uns hat das Ganze 64 Dollar gekostet. Jedes Experiment dauerte 15 Minuten. Dank der Nutzung von Spot-Instanzen ist das sehr kosteng\u00fcnstig \u2013 mit einem Rabatt von 70 % und der sekundengenauen Abrechnung von Amazon. Sie k\u00f6nnen dabei sehr viel erreichen. Sie k\u00f6nnen echte Forschungen durchf\u00fchren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/64c61cc9dd7181296b2ef5b815a17493.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Drei Hauptversionen von Postgres werden unterst\u00fctzt. Es ist nicht allzu schwierig, alte Versionen und auch die neue 12. Version zu integrieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/ee147c91014ab698cbd3c60e193bef23.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir k\u00f6nnen das Objekt auf drei verschiedene Arten definieren. Das sind:<\/p>\n<p><\/p>\n<ul>\n<li>Dump\/sql-Datei. <\/li>\n<li>Die Hauptmethode ist das Klonen des PGDATA-Verzeichnisses. In der Regel wird es von einem Backup-Server genommen. Wenn Sie qualifizierte bin\u00e4re Backups haben, k\u00f6nnen Sie Klone von dort erstellen. Wenn Sie Cloud-Dienste nutzen, wird dies automatisch von einem Cloud-Anbieter wie Amazon oder Google erledigt. Dies ist der wichtigste Weg, um Klone in einer realen Produktionsumgebung zu erstellen. So gehen wir dabei vor. <\/li>\n<li>Die letzte Methode eignet sich f\u00fcr Untersuchungen, wenn das Ziel besteht, zu verstehen, wie etwas in Postgres funktioniert. Das ist pgbench. Sie k\u00f6nnen es mit pgbench generieren. Es gibt einfach die Option \u201edb-pgbench\u201c. Sie geben den gew\u00fcnschten Scale an. Und alles wird in der Cloud generiert, wie beschrieben.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/2bc3e30cb31a19f66c6b55480447126f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und die Last:<\/p>\n<p><\/p>\n<ul>\n<li>Die Last k\u00f6nnen wir in einem einzelnen SQL-Thread ausf\u00fchren. Das ist die einfachste Methode. <\/li>\n<li>Alternativ k\u00f6nnen wir die Last emulieren. Und zuerst k\u00f6nnen wir sie folgenderma\u00dfen emulieren. Wir m\u00fcssen alle Logs sammeln. Und das ist schmerzhaft. Ich werde Ihnen zeigen, warum. Und mit Hilfe von pgreplay, das in Nancy integriert ist, spielen wir diese Logs ab. <\/li>\n<li>Oder eine andere Option. Die sogenannte handgefertigte Last, die wir mit einem gewissen Aufwand erstellen. Dabei analysieren wir unsere aktuelle Last auf dem Produktionssystem und extrahieren die meistgenutzten Anfragen. Und mit pgbench k\u00f6nnen wir diese Last im Labor emulieren. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/4adba12881faf9ad9d4f9e9f42c0f5c1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Alternativ m\u00fcssen wir eine SQL-Anweisung ausf\u00fchren, d.h. wir \u00fcberpr\u00fcfen eine Migration, erstellen einen Index, f\u00fchren ANALYZE aus. Und wir schauen, was vor und nach dem Vacuum war. Im Grunde genommen, jede SQL-Anweisung.<\/li>\n<li>Wir \u00e4ndern in der Konfiguration einen oder mehrere Parameter. Wir k\u00f6nnen zum Beispiel anfordern, dass 100 Werte in Amazon f\u00fcr unsere Terabyte-Datenbank \u00fcberpr\u00fcft werden. Nach ein paar Stunden erhalten Sie das Ergebnis. In der Regel dauert das Bereitstellen einer Terabyte-Datenbank einige Stunden. In der Entwicklung gibt es jedoch einen Patch, mit dem eine Serie m\u00f6glich ist, d.h. Sie k\u00f6nnen dieselben pgdata auf demselben Server nacheinander verwenden und \u00fcberpr\u00fcfen. Postgres wird neu gestartet, die Caches werden zur\u00fcckgesetzt. Und Sie k\u00f6nnen die Last testen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/02985b47bf0ab62e8f1c4cc3ea003f26.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Es kommt ein Verzeichnis an, in dem viele verschiedene Dateien enthalten sind, angefangen bei Snapshots pg.<em>stat<\/em>***. Besonders interessant sind pg_stat_statements und pg_stat_kcache. Das sind zwei Erweiterungen, die die Anfragen analysieren. pg_stat_bgwriter enth\u00e4lt nicht nur Statistiken \u00fcber pgwriter, sondern auch \u00fcber Checkpoints und wie die Backends schmutzige Buffer verdr\u00e4ngen. Es ist sehr interessant, sich das anzusehen. Beispielsweise ist es spannend zu beobachten, wie viel dort verdr\u00e4ngt wurde, wenn wir shared_buffers konfigurieren.<\/li>\n<li>Auch die Logs von Postgres kommen an. Zwei Logs \u2013 das Vorbereitungsprotokoll und das Protokoll zur Ausf\u00fchrung der Last. <\/li>\n<li>Eine relativ neue Funktion sind die FlameGraphs.<\/li>\n<li>Wenn Sie pgreplay oder pgbench zur Lastwiedergabe verwendet haben, wird dessen Ausgabe wie gewohnt angezeigt. Sie werden Latenz und TPS sehen k\u00f6nnen. So k\u00f6nnen Sie verstehen, wie sie dies wahrgenommen haben. <\/li>\n<li>Systeminformationen. <\/li>\n<li>Grundlegende \u00dcberpr\u00fcfungen von CPU und IO. Dies ist besonders f\u00fcr Amazon EC2-Instanzen relevant, wo Sie einen Stream von 100 identischen Instanzen starten m\u00f6chten und dabei 100 verschiedene L\u00e4ufe durchf\u00fchren. So haben Sie insgesamt 10.000 Experimente. Sie m\u00fcssen sicherstellen, dass Ihnen kein fehlerhafter Instance begegnet, der m\u00f6glicherweise bereits von jemand anderem stark genutzt wird. Auf diesem Server k\u00f6nnten andere aktiv sein, was Ihre verf\u00fcgbaren Ressourcen verringert. Solche Ergebnisse sollten Sie besser ablehnen. Mit sysbench von Alexey Kopytov f\u00fchren wir mehrere kurze Tests durch, die Ihnen dabei helfen, CPU- und IO-Verhalten zu vergleichen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c4ddf5283c3c79e3d4c2c061e7dd9e7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Welche technischen Herausforderungen gibt es bei verschiedenen Unternehmen?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/959690b464a01a4a3cb67ec497becff1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Angenommen, wir m\u00f6chten eine reale Last mithilfe von Logs wiederholen. Das ist eine hervorragende Idee, wenn dies mit dem Open Source pgreplay gemacht wird. Wir verwenden dieses Tool. Damit es jedoch gut funktioniert, m\u00fcssen Sie das vollst\u00e4ndige Logging von Anfragen mit Parametern und Timing aktivieren.<\/p>\n<p><\/p>\n<p>Es gibt einige Schwierigkeiten bez\u00fcglich der Dauer und des Zeitstempels. Lassen Sie uns diese Details beiseitelegen. Die Hauptfrage ist: K\u00f6nnen Sie sich das leisten oder nicht? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/5d08fadbaf67b8a137212302b6adf48a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/NikolayS\/08d9b7b4845371d03e195a8d8df43408\">https:\/\/gist.github.com\/NikolayS\/08d9b7b4845371d03e195a8d8df43408<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Das Problem ist, dass es m\u00f6glicherweise nicht verf\u00fcgbar ist. Sie m\u00fcssen zun\u00e4chst verstehen, welcher Datenstrom in das Protokoll geschrieben wird. Wenn Sie pg_stat_statements haben, k\u00f6nnen Sie mit dieser Abfrage (der Link wird in den Folien verf\u00fcgbar sein) herausfinden, wie viele Bytes ungef\u00e4hr pro Sekunde geschrieben werden.<\/p>\n<p><\/p>\n<p>Wir betrachten die L\u00e4nge der Abfrage. Wir ignorieren die Tatsache, dass es keine Parameter gibt, aber wir wissen die L\u00e4nge der Abfrage und wie oft sie pro Sekunde ausgef\u00fchrt wurde. So k\u00f6nnen wir sch\u00e4tzen, wie viele Bytes pro Sekunde ungef\u00e4hr anfallen. Wir k\u00f6nnten uns um das Doppelte irren, aber die Gr\u00f6\u00dfenordnung werden wir auf diese Weise definitiv verstehen.<\/p>\n<p><\/p>\n<p>Wir k\u00f6nnen sehen, dass diese Abfrage 802 Mal pro Sekunde ausgef\u00fchrt wird. Und wir sehen, dass bytes_per_sec \u2013 etwa 300 kB\/s geschrieben werden. Und in der Regel k\u00f6nnen wir uns einen solchen Datenstrom leisten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/218f905073a8519115adf5c65825b74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber! Es gibt verschiedene Protokollierungssysteme. Standardm\u00e4\u00dfig verwenden viele Menschen in der Regel \"syslog\".<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/66054682083ba2ada174afb5e7ee3973.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wenn Sie syslog haben, k\u00f6nnte es so aussehen. Wir werden pgbench verwenden, das Abfragen protokollieren und sehen, was dabei herauskommt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a05723dcf10a7733f054ba108bb0f107.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ohne Protokollierung \u2013 das ist die linke Spalte. Wir hatten 161.000 TPS. Mit Syslog \u2013 in Ubuntu 16.04 auf Amazon erhalten wir 37.000 TPS. Wenn wir jedoch zu zwei anderen Protokollierungsarten wechseln, verbessert sich die Situation erheblich. Das hei\u00dft, wir erwarteten, dass es schlechter wird, aber nicht so stark.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a7d90af9d29761d3b80eb09bf050760f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und auf CentOS 7, wo journald noch mitwirkt und die Protokolle in ein bin\u00e4res Format f\u00fcr eine einfachere Suche umwandelt usw., ist es wirklich katastrophal, wir fallen um das 44-fache in den TPS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/86d2af18a0e6364f297a62378b6ede56.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und das ist etwas, womit die Leute leben m\u00fcssen. Oft ist es in Unternehmen, insbesondere in gro\u00dfen, sehr schwierig, das zu \u00e4ndern. Wenn Sie von Syslog wegkommen k\u00f6nnen, dann ziehen Sie bitte in Erw\u00e4gung, es zu tun.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/a167a6fac7f28c7541515f7eff30bdb4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Bewerten Sie IOPS und Schreibfluss. <\/li>\n<li>\u00dcberpr\u00fcfen Sie Ihr Protokollierungssystem. <\/li>\n<li>Wenn die prognostizierte Last \u00fcberm\u00e4\u00dfig hoch ist, ziehen Sie in Betracht, ein Sampling zu verwenden. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/127fa1296578ba0ba6eac2b44c5c5398.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben pg_stat_statements. Wie ich bereits sagte, es muss unbedingt vorhanden sein. Wir k\u00f6nnen jede Gruppe von Abfragen auf spezielle Weise in eine Datei beschreiben. Und dann k\u00f6nnen wir eine sehr n\u00fctzliche Funktion in pgbench nutzen \u2013 die M\u00f6glichkeit, mehrere Dateien mit der Option \u201e-f\u201c zu \u00fcbergeben.<\/p>\n<p><\/p>\n<p>Er versteht viel von \u201e-f\u201c. Und man kann mit \u201e@\u201c am Ende angeben, wie viel jedes File beitragen soll. Das hei\u00dft, wir k\u00f6nnen sagen, dass dieses in 10 % der F\u00e4lle ausgef\u00fchrt wird, und jenes in 20 %. Das bringt uns n\u00e4her an das, was wir in der Produktion sehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/b91d18a9861abdc36bfda54cd72a142f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie erfahren wir, was in der Produktion l\u00e4uft? Welche Teile geh\u00f6ren dazu? Dazu m\u00fcssen wir kurz abschweifen. Wir haben ein weiteres Produkt. <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/postgres-ai\/postgres-checkup\">postgres-checkup<\/a><\/noindex>. Es ist ebenfalls eine Open-Source-Datenbank, die wir nun aktiv weiterentwickeln.<\/p>\n<p><\/p>\n<p>Es entstand aus einem anderen Grund: Das Monitoring reicht oft nicht aus. Das hei\u00dft, Sie kommen, schauen sich die Datenbank an, sehen die bestehenden Probleme und machen in der Regel einen Health-Check. Wenn Sie ein erfahrener DBA sind, f\u00fchren Sie den Health-Check durch. Sie \u00fcberpr\u00fcfen die Nutzung der Indizes usw. Wenn Sie OKmeter haben, dann ist das ausgezeichnet. Es ist ein gro\u00dfartiges Monitoring-Tool f\u00fcr Postgres. OKmeter.io \u2013 bitte installieren Sie es, es ist wirklich hervorragend. Es ist kostenpflichtig.<\/p>\n<p><\/p>\n<p>Wenn Sie es nicht haben, dann gibt es in der Regel nicht viel. Im Monitoring gibt es normalerweise nur CPU, IO und das mit Vorbehalten, und das war's. Aber wir brauchen mehr. Wir m\u00fcssen sehen, wie der Autovacuum funktioniert, wie der Checkpoint arbeitet, im IO m\u00fcssen wir Checkpoint, bgwriter und die Backends voneinander unterscheiden usw.<\/p>\n<p><\/p>\n<p>Das Problem ist, dass gro\u00dfe Unternehmen nicht in der Lage sind, schnell etwas umzusetzen. Sie k\u00f6nnen OKmeter nicht einfach schnell kaufen. Vielleicht kaufen sie es in sechs Monaten. Sie k\u00f6nnen auch keine Pakete schnell installieren. <\/p>\n<p><\/p>\n<p>Und so entstand die Idee, ein spezielles Werkzeug zu entwickeln, das keine Installation ben\u00f6tigt. Das hei\u00dft, Sie m\u00fcssen \u00fcberhaupt nichts auf die Produktionsumgebung installieren. Sie installieren es auf Ihrem Laptop oder auf einem \u00dcberwachungsserver, von dem aus Sie es starten. Es wird vieles analysieren: das Betriebssystem, das Dateisystem und PostgreSQL selbst, indem es einige leichte Abfragen durchf\u00fchrt, die Sie direkt auf der Produktion ausf\u00fchren k\u00f6nnen, ohne dass etwas ausf\u00e4llt.<\/p>\n<p><\/p>\n<p>Wir haben es Postgres-checkup genannt. Medizinisch gesehen ist es eine regelm\u00e4\u00dfige Gesundheitspr\u00fcfung. Im Automobilbereich w\u00e4re es wie eine Inspektion. Man bringt sein Auto alle sechs Monate oder einmal im Jahr zur Inspektion, je nach Marke. Aber machen Sie eine Inspektion f\u00fcr Ihre Datenbank? Machen Sie regelm\u00e4\u00dfig eine tiefgreifende Analyse? Das sollten Sie tun. Wenn Sie Backups machen, sollten Sie auch einen Checkup durchf\u00fchren; das ist nicht weniger wichtig.<\/p>\n<p><\/p>\n<p>Wir haben ein solches Werkzeug. Es hat vor etwa drei Monaten aktiv begonnen, sich zu entwickeln. Es ist noch jung, aber es bietet bereits viele Funktionen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/514d00b5cb710a7997af0a5dde55b5a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir erstellen die einflussreichsten Abfragesets \u2013 Bericht K003 im Postgres-Checkup<\/p>\n<p><\/p>\n<p>Es gibt eine Gruppe von Berichten K. Derzeit sind es drei Berichte. Und es gibt den Bericht K003. Dort befindet sich die Spitze von pg_stat_statements, sortiert nach total_time.<\/p>\n<p><\/p>\n<p>Wenn wir die Abfragesets nach total_time sortieren, sehen wir an der Spitze eine Gruppe, die unser System am st\u00e4rksten belastet, d. h. sie verbraucht die meisten Ressourcen. Warum nenne ich es Abfragesets? Weil wir die Parameter ausgeschlossen haben. Es sind keine Einzelfragen mehr, sondern Abfragesets, d. h. sie sind abstrahiert.<\/p>\n<p><\/p>\n<p>Wenn wir von oben nach unten optimieren, entlasten wir unsere Ressourcen und verschieben den Zeitpunkt, an dem ein Upgrade erforderlich wird. Das ist ein sehr guter Weg, um Geld zu sparen.<\/p>\n<p><\/p>\n<p>Vielleicht ist das nicht der beste Ansatz in Bezug auf die Benutzerfreundlichkeit, da wir m\u00f6glicherweise seltene, aber frustrierende F\u00e4lle \u00fcbersehen, in denen jemand 15 Sekunden gewartet hat. Diese sind insgesamt so selten, dass wir sie nicht wahrnehmen, aber wir k\u00fcmmern uns um die Ressourcen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d16abc423573e4d923b0c03683c2efee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist in dieser Tabelle passiert? Wir haben zwei Snapshots erstellt. Postgres_checkup wird Ihnen die Delta f\u00fcr jede Metrik liefern: f\u00fcr total-time, calls, rows, shared_blks_read usw. Alles, Delta wurde berechnet. Bei pg_stat_statements gibt es ein gro\u00dfes Problem: Es erinnert sich nicht, wann es zur\u00fcckgesetzt wurde. W\u00e4hrend pg_stat_database sich daran erinnert, hat pg_stat_statements keine Erinnerung. Sie sehen dort die Zahl 1.000.000, aber woher wir sie gez\u00e4hlt haben, wissen wir nicht.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c370bf1237675e03c0a3d362c025ac24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier wissen wir es, hier haben wir zwei Snapshots. Wir wissen, dass das Delta in diesem Fall 56 Sekunden betrug. Ein sehr kurzer Zeitraum. Nach total_time sortiert. Und dann k\u00f6nnen wir differenzieren, d.h. wir teilen alle Metriken durch die Dauer. Wenn wir jede Metrik durch die Dauer teilen, erhalten wir die Anzahl der Aufrufe pro Sekunde.<\/p>\n<p><\/p>\n<p>Die n\u00e4chste Metrik, die mir am besten gef\u00e4llt, ist total_time per second. Sie wird in Sekunden gemessen, d.h. wie viele Sekunden unser System f\u00fcr die Ausf\u00fchrung dieser Gruppe von Anfragen pro Sekunde ben\u00f6tigt hat. Wenn Sie dort mehr als eine Sekunde pro Sekunde sehen, bedeutet das, dass Sie mehr als einen Kern ben\u00f6tigen. Das ist eine sehr gute Metrik. Sie k\u00f6nnen verstehen, dass dieser Kollege beispielsweise mindestens drei Kerne ben\u00f6tigt.<\/p>\n<p><\/p>\n<p>Das ist unser Know-how, so etwas habe ich nirgendwo gesehen. Beachten Sie - es ist eine sehr einfache Sache - Sekunde f\u00fcr Sekunde. Manchmal, wenn Ihre CPU 100 % erreicht, kann es auch eine halbe Stunde pro Sekunde sein, d.h. Sie haben eine halbe Stunde nur mit dieser Anfrage verbracht. <\/p>\n<p><\/p>\n<p>Als n\u00e4chstes sehen wir die Rows pro Sekunde. Wir wissen, wie viele Zeilen pro Sekunde zur\u00fcckgegeben wurden.<\/p>\n<p><\/p>\n<p>Und dann gibt es auch eine interessante Sache. Wie viele Shared Buffers pro Sekunde wir aus den Shared Buffers gelesen haben. Die Hits waren bereits dort, und die Zeilen haben wir entweder aus dem Betriebssystem-Cache oder von der Festplatte genommen. Die erste Variante ist schnell, die zweite kann schnell sein, muss es aber nicht, das h\u00e4ngt von der Situation ab. <\/p>\n<p><\/p>\n<p>Und die zweite M\u00f6glichkeit der Differenzierung besteht darin, die Anzahl der Anfragen in dieser Gruppe zu teilen. In der zweiten Spalte haben Sie immer eine Anfrage geteilt durch Anfragen. Und dann wird es interessant - wie viele Millisekunden waren in dieser Anfrage. Wir wissen, wie sich diese Anfrage im Durchschnitt verh\u00e4lt. F\u00fcr jede Anfrage ben\u00f6tigten wir 101 Millisekunden. Das ist eine traditionelle Metrik, die wir zur Verst\u00e4ndigung ben\u00f6tigen.<\/p>\n<p><\/p>\n<p>Wie viele Zeilen jede Abfrage im Durchschnitt zur\u00fcckgegeben hat. Wir sehen, dass diese Gruppe im Durchschnitt 8 zur\u00fcckgibt. Wie viel durchschnittlich aus dem Cache genommen und gelesen wurde. Wir sehen, dass alles hervorragend zwischengespeichert ist. Komplett Treffer f\u00fcr die erste Gruppe. <\/p>\n<p><\/p>\n<p>Die vierte Zeile in jeder Zeile gibt an, wie viel Prozent vom Gesamtergebnis stammen. Wir haben Aufrufe, sagen wir, in 1.000.000. Und wir k\u00f6nnen verstehen, welchen Beitrag diese Gruppe leistet. In diesem Fall sehen wir, dass die erste Gruppe einen Beitrag von weniger als 0,01 % leistet. Das hei\u00dft, sie ist so langsam, dass wir sie im Gesamtbild nicht sehen. Die zweite Gruppe macht hingegen 5 % der Aufrufe aus. Das hei\u00dft, 5 % aller Aufrufe entfallen auf die zweite Gruppe. <\/p>\n<p><\/p>\n<p>Auch bei total_time ist es interessant. F\u00fcr die erste Gruppe von Anfragen haben wir 14 % der gesamten Arbeitszeit aufgewendet. F\u00fcr die zweite Gruppe waren es 11 % usw. <\/p>\n<p><\/p>\n<p>Ich werde nicht ins Detail gehen, aber es gibt Feinheiten. Wir geben einen Fehler oben aus, weil wir beim Vergleich feststellen k\u00f6nnen, dass Snapshots sich verschieben k\u00f6nnen, d. h. einige Anfragen k\u00f6nnen wegfallen und in der zweiten bereits nicht mehr vorhanden sein, w\u00e4hrend andere neu auftauchen k\u00f6nnen. Und wir berechnen dort den Fehler. Wenn Sie 0 sehen, ist das gut. Das bedeutet, dass es keine Fehler gibt. Wenn die Fehlerrate bis zu 20 % betr\u00e4gt, ist das in Ordnung. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/327bbf167bc21d37a3e1597b52528e6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt kehren wir zu unserem Thema zur\u00fcck. Wir m\u00fcssen die Workloads gestalten. Wir gehen von oben nach unten, bis wir 80 % oder 90 % erreichen. \u00dcblicherweise sind das 10-20 Gruppen. Dann erstellen wir Dateien f\u00fcr pgbench und verwenden dabei Zufallswerte. Manchmal klappt das leider nicht. In Postgres 12 werden wir bessere M\u00f6glichkeiten haben, diesen Ansatz zu nutzen. <\/p>\n<p><\/p>\n<p>Auf diese Weise erreichen wir 80-90 % der Gesamtzeit. Was kommt nach dem \u201e@\u201c? Wir schauen uns die Aufrufe an, sehen uns die Prozents\u00e4tze an und erkennen, dass wir hier einen bestimmten Prozentsatz erreichen m\u00fcssen. Aus diesen Prozents\u00e4tzen k\u00f6nnen wir ableiten, wie wir jede der Dateien ausbalancieren. Danach verwenden wir pgbench und legen los. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/53edf787f49dcabb5e4731510839332d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben au\u00dferdem K001 und K002. <\/p>\n<p><\/p>\n<p>K001 ist eine gro\u00dfe Zeile mit vier Unterzeilen. Das ist das Merkmal unserer gesamten Last. Schauen Sie sich die zweite Spalte und die zweite Unterzeile an. Wir sehen, dass es ungef\u00e4hr 1,5 Sekunden pro Sekunde dauert, d.h. wenn wir zwei Kerne haben, wird es gut sein. Wir werden etwa 75 % Auslastung haben, und das wird funktionieren. Wenn wir 10 Kerne haben, k\u00f6nnen wir uns ganz entspannt zur\u00fccklehnen. So k\u00f6nnen wir die Ressourcen bewerten.<\/p>\n<p><\/p>\n<p>K002 \u2013 das nenne ich Anfrageklassen, also SELECT, INSERT, UPDATE, DELETE, sowie SELECT FOR UPDATE, da dieser sperrt. <\/p>\n<p><\/p>\n<p>Hier k\u00f6nnen wir festhalten, dass SELECT-Abfragen 82 % aller Aufrufe ausmachen, aber nur 74 % der gesamten Zeit beanspruchen. Das bedeutet, sie werden h\u00e4ufig aufgerufen, verbrauchen aber weniger Ressourcen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/0e0234e696ffe1c80f8b5acccc602dbd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kommen wir zur\u00fcck zur Frage: \u201eWie w\u00e4hlen wir die richtigen shared_buffers aus?\u201c. Ich beobachte, dass die meisten Benchmarks darauf basieren, zu ermitteln, welche Durchsatzrate erreicht wird, also wie hoch die Durchsatzkapazit\u00e4t ist. Diese wird normalerweise in TPS oder QPS gemessen.<\/p>\n<p><\/p>\n<p>Wir versuchen, mit den Tuning-Parametern m\u00f6glichst viele Transaktionen pro Sekunde aus der Maschine herauszuholen. Hier sind es genau 311 pro Sekunde f\u00fcr SELECT.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/d5e73f2672d94bb92eed921ef3dfe0b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber niemand f\u00e4hrt mit dem Auto mit voller Geschwindigkeit zur Arbeit und wieder nach Hause. Das w\u00e4re dumm. Gleiches gilt f\u00fcr Datenbanken. Wir sollten nicht mit voller Geschwindigkeit fahren, und tats\u00e4chlich tut das niemand. Niemand lebt in einer Produktionsumgebung mit 100 % CPU-Last. Auch wenn vielleicht jemand das tut, ist das nicht optimal. <\/p>\n<p><\/p>\n<p>Die Idee ist, dass wir normalerweise etwa 20 % der M\u00f6glichkeiten ausnutzen und idealerweise nicht \u00fcber 50 %. Dabei versuchen wir, die Reaktionszeit f\u00fcr unsere Benutzer zu optimieren. Das hei\u00dft, wir m\u00fcssen unsere Einstellungen so anpassen, dass die Latenz bei 20 % Geschwindigkeit minimal bleibt, um es vereinfacht auszudr\u00fccken. Das ist ein Ansatz, den wir auch in unseren Experimenten nutzen m\u00f6chten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/c32c2cfb76dce0ce6b50e929bbf914ac.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und abschlie\u00dfend ein paar Empfehlungen: <\/p>\n<p><\/p>\n<ul>\n<li>Stellen Sie unbedingt einen Database Lab ein.<\/li>\n<li>Machen Sie es nach M\u00f6glichkeit on demand, sodass es f\u00fcr eine gewisse Zeit bereitgestellt wird \u2013 spielen Sie herum und werfen Sie es anschlie\u00dfend weg. Wenn Sie Cloud-Dienste haben, ist das selbstverst\u00e4ndlich, d. h. haben Sie viel Kapazit\u00e4t. <\/li>\n<li>Seien Sie neugierig. Und wenn etwas nicht stimmt, \u00fcberpr\u00fcfen Sie es mit Experimenten, um zu sehen, wie es sich verh\u00e4lt. Nancy kann genutzt werden, um sich selbst zu schulen und zu pr\u00fcfen, wie die Datenbank funktioniert.<\/li>\n<li>Zielen Sie auf eine minimale Reaktionszeit. <\/li>\n<li>Scheuen Sie sich nicht, mit den Postgres-Quellcodes zu arbeiten. Wenn Sie mit den Quellcodes arbeiten, sollten Sie Englisch verstehen. Dort gibt es viele Kommentare, die alles erkl\u00e4ren. <\/li>\n<li>\u00dcberpr\u00fcfen Sie regelm\u00e4\u00dfig die Gesundheit der Datenbank, mindestens alle drei Monate manuell oder mit Postgres-checkup. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/8d2ac05f44bd245b879799862ce9e233.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fragen<\/p>\n<p><\/p>\n<p><em>Vielen Dank! Sehr interessantes Thema.<\/em> <\/p>\n<p><\/p>\n<p>Zwei Dinge.<\/p>\n<p><\/p>\n<p><em>Ja, zwei St\u00fcck. Aber ich habe nicht ganz verstanden. Wenn wir mit Nancy arbeiten, k\u00f6nnen wir nur einen Parameter \u00e4ndern oder eine ganze Gruppe?<\/em><\/p>\n<p><\/p>\n<p>Wir haben einen Delta-Konfigurator. Sie k\u00f6nnen dort beliebig viele Parameter gleichzeitig \u00e4ndern. Aber man muss verstehen, dass es schwierig ist, korrekte Schl\u00fcsse zu ziehen, wenn man zu viele \u00c4nderungen vornimmt. <\/p>\n<p><\/p>\n<p><em>Ja. Warum habe ich das gefragt? Weil es schwierig ist, Experimente durchzuf\u00fchren, wenn man nur einen Parameter hat. Man \u00e4ndert ihn, schaut, wie es funktioniert, setzt ihn fest und beginnt dann mit dem n\u00e4chsten.<\/em><\/p>\n<p><\/p>\n<p>Es ist m\u00f6glich, mehrere Parameter gleichzeitig zu \u00e4ndern, aber das h\u00e4ngt von der Situation ab. Es ist jedoch besser, eine Idee zu testen. Gestern hatten wir eine \u00e4hnliche Situation. Wir hatten zwei Konfigurationen und konnten nicht verstehen, warum es einen gro\u00dfen Unterschied gab. Die Idee war, die Dichotomie zu verwenden, um schrittweise zu verstehen, was der Unterschied ist. Man kann die H\u00e4lfte der Parameter zuerst gleich machen, dann ein Viertel usw. Alles ist flexibel.<\/p>\n<p><\/p>\n<p><em>Und ich habe noch eine Frage. Das Projekt ist jung und entwickelt sich. Ist die Dokumentation bereits fertig und gibt es eine detaillierte Beschreibung?<\/em><\/p>\n<p><\/p>\n<p>Ich habe dort einen speziellen Link zur Beschreibung der Parameter gesetzt. Das ist vorhanden. Aber vieles fehlt noch. Ich suche Gleichgesinnte und finde sie, wenn ich auftritt. Das ist richtig spannend. Einige arbeiten bereits mit mir zusammen, andere haben geholfen und etwas gemacht. Wenn Sie an diesem Thema interessiert sind, geben Sie bitte Feedback \u2013 was fehlt noch? <\/p>\n<p><\/p>\n<p><em>Sobald wir das Labor eingerichtet haben, k\u00f6nnte es R\u00fcckmeldungen geben. Mal sehen. Danke!<\/em><\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr den Vortrag! Ich habe gesehen, dass es Unterst\u00fctzung f\u00fcr Amazon gibt. Ist eine Unterst\u00fctzung f\u00fcr GSP geplant?<\/em><\/p>\n<p><\/p>\n<p>Das ist eine gute Frage. Wir haben damit begonnen und derzeit pausiert, da wir Kosten sparen m\u00f6chten. Das bedeutet, dass wir Unterst\u00fctzung durch das Ausf\u00fchren auf localhost haben. Sie k\u00f6nnen selbst eine Instanz erstellen und lokal arbeiten. \u00dcbrigens, so machen wir es. Ich mache es im Getlab auch, dort auf GSP. Aber wir sehen momentan keinen Sinn darin, eine solche Orchestrierung durchzuf\u00fchren, da Google keine g\u00fcnstigen Spot-Instanzen hat. Es gibt ??? Instanzen, aber mit Einschr\u00e4nkungen. Erstens erhalten Sie immer nur einen Rabatt von 70 %, und die Preisgestaltung ist nicht flexibel. Bei Spot-Instanzen erh\u00f6hen wir den Preis um 5\u201310 %, um die Wahrscheinlichkeit zu verringern, dass sie uns abziehen. Das hei\u00dft, bei Spot-Instanzen sparen Sie, aber sie k\u00f6nnen jederzeit weggenommen werden. Wenn Sie die Preise etwas h\u00f6her als die anderen ansetzen, werden Sie sp\u00e4ter unweigerlich ausgeschlossen. Bei Google ist die Spezifikationen ganz anders. Zudem gibt es ein sehr ung\u00fcnstiges Limit \u2013 die Instanzen leben nur 24 Stunden. Manchmal m\u00f6chten wir jedoch 5 Tage lang ein Experiment durchf\u00fchren. Bei Spot-Instanzen ist das m\u00f6glich, diese k\u00f6nnen manchmal monatelang bestehen bleiben. <\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr Ihren Vortrag! Sie haben das Thema Checkup angesprochen. Wie berechnen Sie die Fehler in den stat_statements?<\/em><\/p>\n<p><\/p>\n<p>Das ist eine sehr gute Frage. Ich kann das sehr ausf\u00fchrlich zeigen und erl\u00e4utern. Kurz gesagt, wir beobachten, wie sich die Gruppens\u00e4tze entwickelt haben: wie viele weggefallen sind und wie viele neue entstanden sind. Anschlie\u00dfend betrachten wir zwei Metriken: total_time und calls, weshalb es dort zwei Fehler gibt. Au\u00dferdem analysieren wir den Beitrag der betroffenen Gruppen. Es gibt zwei Untergruppen: die, die weggegangen sind, und die, die neu hinzugekommen sind. Wir schauen uns an, welchen Einfluss sie auf das Gesamtbild haben. <\/p>\n<p><\/p>\n<p><em>Haben Sie keine Bedenken, dass dies zwischen den Snapshots zwei- oder dreimal abgebrochen wird?<\/em><\/p>\n<p><\/p>\n<p>Das hei\u00dft, sie haben sich neu registriert oder wie?<\/p>\n<p><\/p>\n<p><em>Zum Beispiel wurde diese Anfrage einmal verdr\u00e4ngt, dann kam sie zur\u00fcck und wurde erneut verdr\u00e4ngt, dann kam sie wieder und wurde wieder verdr\u00e4ngt. Und Sie haben da etwas berechnet, aber wo ist das alles?<\/em><\/p>\n<p><\/p>\n<p>Gute Frage, das sollten wir uns anschauen. <\/p>\n<p><\/p>\n<p><em>Ich habe etwas \u00c4hnliches gemacht. Einfacher, nat\u00fcrlich, ich habe es alleine gemacht. Aber ich musste zur\u00fccksetzen, stat_statements zur\u00fccksetzen und mich auf den Snapshot konzentrieren, bei dem es weniger als einen bestimmten Anteil war, sodass ich trotzdem nicht das Maximum erreicht habe, was stat_statements ansammeln kann. Und ich gehe davon aus, dass wahrscheinlich nichts verdr\u00e4ngt wurde.<\/em> <\/p>\n<p><\/p>\n<p>Ja, ja. <\/p>\n<p><\/p>\n<p><em>Aber ich verstehe nicht, wie ich das anders zuverl\u00e4ssig machen kann.<\/em><\/p>\n<p><\/p>\n<p>Leider erinnere ich mich nicht genau, ob wir dort den Anfrage-Text oder den queryid mit pg_stat_statements verwenden und uns darauf beziehen. Wenn wir uns auf queryid beziehen, vergleichen wir theoretisch vergleichbare Dinge. <\/p>\n<p><\/p>\n<p><em>Nein, er kann zwischen den Snapshots mehrmals verdr\u00e4ngt werden und wieder zur\u00fcckkommen.<\/em><\/p>\n<p><\/p>\n<p>Mit dieser ID?<\/p>\n<p><\/p>\n<p><em>Ja.<\/em> <\/p>\n<p><\/p>\n<p>Wir werden das untersuchen. Gute Frage. Es muss gepr\u00fcft werden. Aber zun\u00e4chst sehen wir entweder 0\u2026<\/p>\n<p><\/p>\n<p><em>Nat\u00fcrlich ist das ein seltener Fall, aber ich war \u00fcberrascht zu erfahren, dass stat_statements dort verdr\u00e4ngt werden kann.<\/em> <\/p>\n<p><\/p>\n<p>In Pg_stat_statements kann es viele Dinge geben. Wir haben festgestellt, dass, wenn track_utility = on ist, auch Ihre Sets verfolgt werden. <\/p>\n<p><\/p>\n<p><em>Ja, nat\u00fcrlich.<\/em><\/p>\n<p><\/p>\n<p>Und wenn Sie Java Hibernate verwenden, das zuf\u00e4llig ist, beginnt es, die Hashtabelle zu sperren. Und sobald Sie eine sehr belastete Anwendung deaktivieren, haben Sie 50-100 Gruppen. Und dort ist alles mehr oder weniger stabil. Eine der Methoden, um damit umzugehen, besteht darin, pg_stat_statements.max zu erh\u00f6hen. <\/p>\n<p><\/p>\n<p><em>Ja, aber man muss wissen, wie viel. Man sollte es irgendwie im Auge behalten. Genau das mache ich. Das hei\u00dft, ich habe pg_stat_statements.max. Und ich schaue, dass ich im Moment des Snapshots etwa 70 % nicht erreicht habe. In Ordnung, das bedeutet, wir haben nichts verloren. Also machen wir einen Reset. Und sammeln erneut. Wenn im n\u00e4chsten Snapshot weniger als 70 % sind, dann haben wir wahrscheinlich wieder nichts verloren.<\/em><\/p>\n<p><\/p>\n<p>Ja. Standardm\u00e4\u00dfig sind es jetzt 5.000. Und das reicht vielen aus. <\/p>\n<p><\/p>\n<p><em>Normalerweise \u2013 ja.<\/em> <\/p>\n<p><\/p>\n<p>Video:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"yvO1jjG-tDI\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/yvO1jjG-tDI\/hqdefault.jpg\" alt=\"Video abspielen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>P.S. Ich m\u00f6chte hinzuf\u00fcgen, dass, wenn in Postgres vertrauliche Daten vorhanden sind, die nicht in die Testumgebung gelangen d\u00fcrfen, man nutzen kann <noindex><a rel=\"nofollow\" href=\"https:\/\/labs.dalibo.com\/postgresql_anonymizer\">PostgreSQL Anonymizer<\/a><\/noindex>. Das Schema sieht ungef\u00e4hr folgenderma\u00dfen aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken&quot;. Nikolai Samokhvalov\" src=\"\/wp-content\/uploads\/2020\/04\/cf9a2052364e09a20e68d2347dd0c25b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/498060\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78743,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-21T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Industrieller Ansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken. Nikolai Samokhvalov | ProHoster","description":"Ich empfehle, sich die Zusammenfassung des Vortrags von Nikolai Samokhvalov \"Industrieansatz zur Optimierung von PostgreSQL: Experimente mit Datenbanken\" anzusehen. Shared_buffers = 25 % \u2013 ist das viel oder wenig? Oder genau richtig? Wie kann man herausfinden, ob diese \u2013 ziemlich veraltete \u2013 Empfehlung f\u00fcr Ihren speziellen Fall geeignet ist? Es ist an der Zeit, die Auswahl der Parameter in postgresql.conf \"ernsthaft\" zu betrachten. Nicht blind.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u041d\u0438\u043a\u043e\u043b\u0430\u044f \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432\u0430 &quot;\u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0442\u044e\u043d\u0438\u043d\u0433\u0443 PostgreSQL: \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445&quot; Shared_buffers = 25% \u2013 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043c\u0430\u043b\u043e? \u0418\u043b\u0438 \u0432 \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437? \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u044d\u0442\u0430 \u2013 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u2013 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 postgresql.conf &quot;\u043f\u043e-\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u043c\u0443&quot;. \u041d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u043f\u044b\u0445","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/promyshlennyj-podhod-k-tyuningu-postgresql-eksperimenty-nad-bazami-dannyh-nikolaj-samohvalov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-21T17:42:46+00:00","article:modified_time":"2020-04-21T17:42:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78742","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:51:38","updated":"2022-09-28 02:51:26"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/78742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=78742"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/78742\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/78743"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=78742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=78742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=78742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}