{"id":84082,"date":"2020-06-05T07:42:28","date_gmt":"2020-06-05T05:42:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij"},"modified":"2020-06-05T07:42:28","modified_gmt":"2020-06-05T05:42:28","slug":"linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Entschl\u00fcsselung des Berichts von 2015 von Ilja Kosmodemjanski \"Linux-Optimierung zur Verbesserung der PostgreSQL-Leistung\"<\/p>\n<p><\/p>\n<p>Haftungsausschluss: Ich m\u00f6chte darauf hinweisen, dass dieser Bericht auf November 2015 datiert ist \u2013 es sind \u00fcber 4 Jahre vergangen und viel Zeit ist vergangen. Die im Bericht behandelte Version 9.4 wird nicht mehr unterst\u00fctzt. In den vergangenen 4 Jahren sind 5 neue Versionen von PostgreSQL und 15 Versionen des Linux-Kernels erschienen. Wenn wir diese Stellen neu schreiben, wird am Ende ein anderer Bericht entstehen. Aber hier wird das grundlegende Tuning von Linux f\u00fcr PostgreSQL behandelt, das auch jetzt noch relevant ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8292f74a7d004a9c13ff5f1393816340.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"V0M6YwWmMYM\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/V0M6YwWmMYM\/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>Mein Name ist Ilja Kosmodemjanskij. Ich arbeite bei PostgreSQL-Consulting. Und jetzt werde ich ein wenig dar\u00fcber erz\u00e4hlen, was man mit Linux im Allgemeinen in Bezug auf Datenbanken und speziell auf PostgreSQL tun kann, da die Prinzipien ziemlich \u00e4hnlich sind.<\/p>\n<p><\/p>\n<p>Wor\u00fcber werden wir sprechen? Wenn Sie mit PostgreSQL kommunizieren, m\u00fcssen Sie bis zu einem gewissen Grad ein UNIX-Administrator sein. Was bedeutet das? Wenn wir Oracle und PostgreSQL vergleichen, m\u00fcssen Sie bei Oracle zu 80 % als DBA im Datenbankmanagement und zu 20 % als Linux-Administrator arbeiten.<\/p>\n<p><\/p>\n<p>Mit PostgreSQL ist es etwas komplizierter. Mit PostgreSQL muss man viel besser verstehen, wie Linux funktioniert. Und dabei muss man ein bisschen hinterherlaufen, denn in letzter Zeit wird alles ziemlich rasch aktualisiert. Neue Kernels erscheinen, neue Funktionen werden eingef\u00fchrt, die Leistung verbessert sich usw. <\/p>\n<p><\/p>\n<p>Warum sprechen wir \u00fcber Linux? Nicht, weil wir auf einer Linux-Konferenz in St. Petersburg sind, sondern weil Linux unter den modernen Bedingungen eines der am besten geeigneten Betriebssysteme f\u00fcr den Einsatz mit Datenbanken im Allgemeinen und mit PostgreSQL im Besonderen ist. Denn FreeBSD entwickelt sich leider in eine sehr seltsame Richtung. Und es werden sowohl Leistungsprobleme als auch viele andere Probleme auftreten. <strong>Die Leistung von PostgreSQL unter Windows ist \u00fcberhaupt ein separates, schwieriges Thema, da es unter Windows keinen gemeinsamen Speicher wie unter UNIX gibt, und PostgreSQL von diesem abh\u00e4ngt, da es sich um ein multiprozessuales System handelt.<\/strong> <\/p>\n<p><\/p>\n<p>Und Exoten wie Solaris interessieren, glaube ich, die wenigsten, also legen wir los. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein modernes Linux-Distribution hat \u00fcber 1.000 syctl-Parameter, je nachdem, wie der Kernel zusammengestellt wird. Wenn wir uns zus\u00e4tzlich verschiedene Anleitungen ansehen, gibt es viele weitere M\u00f6glichkeiten, etwas anzupassen. Es gibt Parameter f\u00fcr Dateisysteme und wie man sie mountet. Wenn es Fragen gibt, wie man es startet: was im BIOS aktiviert werden muss, wie die Hardware konfiguriert werden muss usw.<\/p>\n<p><\/p>\n<p>Das ist ein sehr umfangreiches Thema, \u00fcber das man mehrere Tage sprechen kann und nicht nur in einem kurzen Vortrag, aber ich werde mich jetzt auf wichtige Punkte konzentrieren, wie man die Fallstricke vermeiden kann, die garantiert verhindern, dass Sie die Datenbank unter Linux gut nutzen k\u00f6nnen, wenn Sie sie nicht anpassen. Ein wichtiger Punkt ist, dass viele Parameter standardm\u00e4\u00dfig nicht in den richtigen Einstellungen f\u00fcr die Datenbank enthalten sind. Das bedeutet, dass die Funktionalit\u00e4t von Anfang an schlecht oder gar nicht funktioniert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Welche traditionellen Tuning-Ziele gibt es in Linux? Ich denke, dass es, da Sie alle mit der Verwaltung von Linux zu tun haben, nicht n\u00f6tig ist zu erkl\u00e4ren, was Ziele sind. <\/p>\n<p><\/p>\n<p>Es kann optimiert werden:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Speicher.<\/li>\n<li>Speicherplatz.<\/li>\n<li>Sonstiges. Dar\u00fcber werden wir am Ende als Leckerbissen sprechen. Selbst solche Parameter wie die Energiesparpolitik k\u00f6nnen die Leistung ganz unvorhersehbar und nicht unbedingt erfreulich beeinflussen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist das Besondere an PostgreSQL und Datenbanken im Allgemeinen? Das Problem ist, dass man nicht einfach einen einzelnen Riegel optimieren und sehen kann, dass die Leistung sich erheblich verbessert hat. <\/p>\n<p><\/p>\n<p>Ja, es gibt solche Riegel, aber eine Datenbank ist ein komplexes Gebilde. Sie interagiert mit allen Ressourcen, die der Server hat, und zieht es vor, vollst\u00e4ndig zu interagieren. Wenn Sie sich die aktuellen Empfehlungen von Oracle ansehen, wie man das Host-Betriebssystem nutzen sollte, dann ist das wie der Witz \u00fcber den mongolischen Kosmonauten \u2013 die Hunde f\u00fcttern und nichts anfassen. Geben wir der Datenbank alle Ressourcen, die Datenbank regelt alles selbst. <\/p>\n<p><\/p>\n<p>Prinzipiell ist die Situation bei PostgreSQL genau dieselbe. Der Unterschied besteht darin, dass die Datenbank nicht alle Ressourcen selbst abrufen kann, d. h. dass man manchmal auf Linux-Ebene selbst Hand anlegen muss. <\/p>\n<p><\/p>\n<p>Die Hauptidee ist nicht, ein einzelnes Ziel auszuw\u00e4hlen und damit zu beginnen, es zu optimieren, zum Beispiel Speicher, CPU oder \u00c4hnliches, sondern das Arbeitspensum zu analysieren und zu versuchen, die Durchsatzrate maximal zu verbessern, damit die Last, die die freundlichen Programmierer f\u00fcr uns geschaffen haben, einschlie\u00dflich unserer Benutzer, m\u00f6glichst effizient durch unsere Datenbank verarbeitet wird. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das ist ein Bild zur Erkl\u00e4rung, was das ist. Es gibt einen Buffer im Linux-Betriebssystem, es gibt Shared Memory und Shared Buffers in PostgreSQL. Im Gegensatz zu Oracle arbeitet PostgreSQL direkt nur \u00fcber den Kernel-Buffer, d. h. damit eine Seite von der Festplatte in seinen Shared Memory gelangt, muss sie durch den Kernel-Buffer gehen, und die Situation ist genau dieselbe. <\/p>\n<p><\/p>\n<p>Unter diesem System leben die Festplatten. Ich habe es als Festplatten gezeichnet. Tats\u00e4chlich kann dort ein RAID-Controller sein usw. <\/p>\n<p><\/p>\n<p>Und dieser Ein- und Ausgabeprozess erfolgt mehr oder weniger durch dieses Element.<\/p>\n<p><\/p>\n<p>PostgreSQL ist eine klassische Datenbank. Im Inneren gibt es Seiten. Der gesamte Ein- und Ausgabestrom erfolgt \u00fcber diese Seiten. Wir laden mit Seiten Bl\u00f6cke in den Speicher. Und wenn nichts passiert ist, sondern wir sie einfach gelesen haben, verschwinden sie allm\u00e4hlich aus dem Cache, aus den Shared Buffern, und gelangen zur\u00fcck auf die Festplatte. <\/p>\n<p><\/p>\n<p>Wenn wir irgendwo etwas ersetzt haben, wird die gesamte Seite als schmutzig markiert. Ich habe sie hier mit blauer Farbe markiert. Und das bedeutet, dass diese Seite mit dem Blockspeicher synchronisiert werden muss. D. h. als wir sie schmutzig gemacht haben, haben wir einen Eintrag in WAL gemacht. Und zu einem bestimmten Zeitpunkt trat ein Ph\u00e4nomen namens Checkpoint auf. Und in dieses Protokoll wurde die Information dar\u00fcber geschrieben, dass es eingetreten ist. Und das bedeutet, dass alle schmutzigen Seiten, die zu diesem Zeitpunkt in diesen Shared Buffern waren, mit dem Speichermedium \u00fcber fsync durch den Kernel-Buffer synchronisiert wurden.<\/p>\n<p><\/p>\n<p>Warum geschieht das? Wenn der Strom ausf\u00e4llt, haben wir nicht das Problem, dass alle Daten verschwunden sind. Der persistente Speicher, von dem uns alle erz\u00e4hlt haben, ist derzeit in der Theorie der Datenbanken \u2013 die strahlende Zukunft, auf die wir nat\u00fcrlich hinarbeiten und die uns gef\u00e4llt, aber vorerst leben wir noch 20 Jahre hinterher. Und wir m\u00fcssen nat\u00fcrlich darauf achten.<\/p>\n<p><\/p>\n<p>Die Aufgabe, die Durchsatzkapazit\u00e4t zu maximieren, besteht darin, alle diese Schritte zu optimieren, damit alles schnell hin und her geht. Shared Memory ist haupts\u00e4chlich ein Seiten-Cache. In PostgreSQL haben wir eine Anfrage gesendet, um etwas auszuw\u00e4hlen, er hat diese Daten von der Festplatte abgerufen. Sie sind in die Shared Buffer gelangt. Damit das besser funktioniert, sollte viel Speicher vorhanden sein.<\/p>\n<p><\/p>\n<p>Damit alles gut und schnell funktioniert, m\u00fcssen Sie das Betriebssystem in allen Phasen richtig einrichten. W\u00e4hlen Sie ausgewogenes Hardware, denn wenn irgendwo ein Ungleichgewicht besteht, k\u00f6nnen Sie zwar viel Arbeitsspeicher haben, aber dieser wird mit unzureichender Geschwindigkeit bedient. <\/p>\n<p><\/p>\n<p>Und wir werden jeden dieser Punkte durchgehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Damit diese Seiten schneller hin und her reisen, m\u00fcssen wir Folgendes erreichen:<\/p>\n<p><\/p>\n<ul>\n<li>Erstens muss der Umgang mit dem Arbeitsspeicher effizienter sein.<\/li>\n<li>Zweitens sollte dieser \u00dcbergang, wenn Seiten aus dem Speicher auf die Festplatte gelangen, effizienter sein.<\/li>\n<li>Und drittens sollten die Festplatten gut sein. <\/li>\n<\/ul>\n<p><\/p>\n<p>Wenn Sie 512 GB RAM haben in <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/server\/dts-dronten\/\"   title=\"Server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">Server<\/a> und das alles am Ende auf eine SATA-Festplatte ohne Cache ankommt, verwandelt sich der gesamte Datenbankserver nicht nur in einen K\u00fcrbis, sondern in einen K\u00fcrbis mit SATA-Schnittstelle. Sie werden direkt darauf sto\u00dfen. Nichts wird Sie retten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was den ersten Punkt \u00fcber den Arbeitsspeicher betrifft, so gibt es drei Dinge, die das Leben erheblich erschweren k\u00f6nnen. <\/p>\n<p><\/p>\n<p>Das erste ist NUMA. NUMA ist ein Konzept, das entwickelt wurde, um die Leistung zu verbessern. Je nach Arbeitslast k\u00f6nnen verschiedene Dinge optimiert werden. In ihrer aktuellen Form ist sie f\u00fcr Anwendungen wie Datenbanken, die intensiv gemeinsam genutzte Seiten Caches verwenden, nicht sehr gut. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kurz gesagt. Wie erkennt man, dass mit NUMA etwas nicht stimmt? Sie haben ein unangenehmes Ger\u00e4usch, pl\u00f6tzlich ist eine CPU \u00fcberlastet. Gleichzeitig analysieren Sie die Anfragen in PostgreSQL und sehen, dass dort nichts \u00c4hnliches ist. Diese Anfragen sollten die CPU nicht so intensiv beanspruchen. Es kann lange dauern, dies zu erkennen. Am besten verwenden Sie von Anfang an die richtige Empfehlung zur Einrichtung von NUMA f\u00fcr PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was passiert wirklich? NUMA steht f\u00fcr Non-Uniform Memory Access. Worauf basiert das? Sie haben eine CPU, daneben ist deren lokaler Speicher. Und dieser Interconnects-Speicher kann Speicher von anderen CPUs abrufen.<\/p>\n<p><\/p>\n<p>Wenn Sie ausf\u00fchren <code>numactl --hardware<\/code>, erhalten Sie eine gro\u00dfe Ausgabe. Unter anderem wird es ein Feld mit Distanzen geben. Dort finden Sie Zahlen \u2013 10-20, etwas in dieser Art. Diese Zahlen sind nichts anderes als die Anzahl der Hops, um diesen entfernten Speicher anzuschlie\u00dfen und lokal zu nutzen. Im Prinzip ist das eine gute Idee. Es beschleunigt die Leistung bei bestimmten Lasten erheblich.<\/p>\n<p><\/p>\n<p>Stellen Sie sich jetzt vor, Sie haben eine CPU, die zun\u00e4chst versucht, ihren lokalen Speicher zu nutzen, um dann \u00fcber das Interconnect einen anderen Speicher f\u00fcr etwas zu abrufen. Und auf diese CPU gelangt der gesamte Page Cache von PostgreSQL \u2013 alles, was da sind k\u00f6nnte, einige Gigabyte. Sie erhalten immer den schlechtesten Fall, weil in diesem Modul der Arbeitsspeicher normalerweise wenig Platz hat. Und der gesamte Speicher, der verwaltet wird, l\u00e4uft \u00fcber diese Interconnects. Das wird langsam und frustrierend. Und Sie haben einen Prozessor, der diesen Knoten versorgt, der st\u00e4ndig \u00fcberlastet ist. Und die Zugriffszeit auf diesen Speicher ist schlecht, langsam. Das ist die Situation, die Sie vermeiden m\u00f6chten, wenn Sie dies f\u00fcr eine Datenbank verwenden. <\/p>\n<p><\/p>\n<p>Daher ist die sinnvollere L\u00f6sung f\u00fcr die Datenbank, dass das Betriebssystem Linux \u00fcberhaupt nicht wei\u00df, was dort passiert. Damit es auf den Speicher zugreift, wie es zugreift. <\/p>\n<p><\/p>\n<p>Warum ist das so? Es scheint, dass es umgekehrt sein sollte. Das passiert aus einem einfachen Grund, dass wir viel Speicher f\u00fcr den Page Cache ben\u00f6tigen \u2013 Dutzende, Hunderte von Gigabyte. <\/p>\n<p><\/p>\n<p>Und wenn wir das alles zugewiesen und unsere Daten dort zwischengespeichert haben, dann wird der Vorteil durch die Verwendung des Caches deutlich gr\u00f6\u00dfer sein als der Vorteil durch so eine raffinierte Speicheransprache. Dadurch gewinnen wir in einem Vergleich dazu, dass wir effizienter auf den Speicher mit NUMA\u2010Technik zugreifen.<\/p>\n<p><\/p>\n<p>Aus diesem Grund gibt es derzeit zwei Ans\u00e4tze, solange die strahlende Zukunft noch nicht eingetreten ist und die Datenbank nicht selbst herausfindet, auf welchen CPUs sie arbeitet und woher sie etwas abrufen muss. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Daher ist der richtige Ansatz, NUMA generell abzuschalten<\/strong>, zum Beispiel beim Neustart. In den meisten F\u00e4llen sind die Gewinne so erheblich, dass die Frage, was besser ist, gar nicht aufkommt. <\/p>\n<p><\/p>\n<p>Es gibt eine andere M\u00f6glichkeit. Wir verwenden sie \u00f6fter als die erste, weil es f\u00fcr einen Kunden, der zu uns kommt, ein gro\u00dfes Anliegen ist, den Server neugestartet zu bekommen. Sein Gesch\u00e4ft l\u00e4uft dort. Und sie haben Probleme mit NUMA. Daher versuchen wir, es auf weniger invasive Weise abzustellen als durch einen Neustart, aber achten Sie darauf, dass es auch tats\u00e4chlich abgeschaltet ist. Denn wie die Erfahrung zeigt, dass wir NUMA f\u00fcr den \u00fcbergeordneten PostgreSQL-Prozess deaktivieren, ist das gut, aber es ist nicht unbedingt sicher, dass das funktioniert. Man muss \u00fcberpr\u00fcfen und sicherstellen, dass es wirklich abgeschaltet ist. <\/p>\n<p><\/p>\n<p>Es gibt einen guten Beitrag von Robert Haas. Er ist einer der Committer von PostgreSQL und z\u00e4hlt zu den Hauptentwicklern aller Low-Level-Details. Wenn man den Links in diesem Beitrag folgt, findet man mehrere farbenfrohe Geschichten dar\u00fcber, wie NUMA den Menschen das Leben erschwert hat. Schaut euch die Checkliste f\u00fcr Systemadministratoren an, um zu sehen, was auf dem Server eingestellt werden muss, damit unsere Datenbank gut funktioniert. Diese Einstellungen sollten notiert und \u00fcberpr\u00fcft werden, denn sonst kann es problematisch werden. <\/p>\n<p><\/p>\n<p>Ich weise darauf hin, dass dies alle Einstellungen betrifft, \u00fcber die ich sprechen werde. Normalerweise werden Datenbanken im Master-Slave-Modus f\u00fcr Ausfallsicherheit konfiguriert. Vergessen Sie nicht, diese Einstellungen auch im Slave vorzunehmen, denn eines sch\u00f6nen Tages wird ein Notfall eintreten, und Sie m\u00fcssen auf den Slave umschalten, der dann zum Master wird. <\/p>\n<p><\/p>\n<p>In einer Notfallsituation, in der alles schiefgeht, klingelt st\u00e4ndig das Telefon, und der Chef kommt mit einem gro\u00dfen Stock hereingest\u00fcrzt. Dann bleibt keine Zeit, um zu pr\u00fcfen. Die Ergebnisse k\u00f6nnen ziemlich katastrophal sein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der n\u00e4chste Punkt sind Huge Pages. Huge Pages sind schwierig separat zu testen, und es macht auch keinen Sinn, obwohl es Benchmarks gibt, die das k\u00f6nnen. Diese finden Sie leicht \u00fcber eine Google-Suche. <\/p>\n<p><\/p>\n<p>Worum geht es? Sie haben einen nicht besonders teuren Server mit viel RAM, zum Beispiel mehr als 30 GB. Huge Pages werden nicht verwendet. Das bedeutet, dass es eindeutig einen Overhead bei der Speichernutzung gibt. Und dieser Overhead ist alles andere als angenehm. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warum ist das so? Was passiert dabei? Das Betriebssystem weist den Speicher in kleinen St\u00fccken zu. So ist es bequem, das hat sich historisch so entwickelt. Wenn man ins Detail geht, muss das OS virtuelle Adressen in physische \u00fcbersetzen. Und dieser Prozess ist nicht der einfachste, weshalb das OS das Ergebnis dieses Vorgangs im Translation Lookaside Buffer (TLB) cacht.<\/p>\n<p><\/p>\n<p>Da der TLB ein Cache ist, treten in dieser Situation alle typischen Cache-Probleme auf. Erstens, wenn Sie sehr viel RAM haben und dieser in kleinen Chunks zugewiesen ist, wird der Buffer sehr gro\u00df. Und wenn der Cache gro\u00df ist, dauert die Suche darin l\u00e4nger. Der Overhead ist erheblich, und er selbst ben\u00f6tigt Platz, d.h. irgendetwas Unangemessenes verbraucht RAM. <\/p>\n<p><\/p>\n<p>Zwei \u2013 je mehr der Cache in einer solchen Situation anw\u00e4chst, desto h\u00f6her ist die Wahrscheinlichkeit, dass Sie Cache Misses haben. Die Effizienz dieses Caches sinkt schnell mit seiner Gr\u00f6\u00dfe. Deshalb wurde in Betriebssystemen ein einfacher Ansatz entwickelt. In Linux wird dies schon lange verwendet. In FreeBSD ist es nicht so lange her, dass es eingef\u00fchrt wurde. Aber wir sprechen von Linux. Es sind huge pages.<\/p>\n<p><\/p>\n<p>Hier ist zu erw\u00e4hnen, dass huge pages als Idee urspr\u00fcnglich von Gemeinschaften, zu denen Oracle und IBM geh\u00f6rten, durchgesetzt wurden, d. h. die Hersteller von Datenbanken haben intensiv dar\u00fcber nachgedacht, dass dies n\u00fctzlich sein k\u00f6nnte, unter anderem f\u00fcr Datenbanken. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie l\u00e4sst sich das mit PostgreSQL kombinieren? Erstens m\u00fcssen huge pages im Linux-Kernel aktiviert sein.<\/p>\n<p><\/p>\n<p>Zweitens m\u00fcssen sie explizit durch den sysctl-Parameter angegeben werden \u2013 wie viele es sind. Die Zahlen stammen von einem \u00e4lteren Server. Sie k\u00f6nnen ungef\u00e4hr berechnen, wie viele Shared Buffers Sie haben, damit die huge pages dort Platz finden. <\/p>\n<p><\/p>\n<p>Wenn Ihr gesamte Server PostgreSQL gewidmet ist, dann ist ein guter Ausgangspunkt, entweder 25 % des Arbeitsspeichers f\u00fcr Shared Buffers zu verwenden oder 75 %, wenn Sie sicher sind, dass Ihre Datenbank in diese 75 % passt. Das ist der erste Ausgangspunkt. Und rechnen Sie, wenn Sie 256 GB RAM haben, dann haben Sie entsprechend 64 GB Shared Buffers. Sch\u00e4tzen Sie ungef\u00e4hr mit etwas Puffer \u2013 in welcher H\u00f6he diese Zahl eingestellt werden sollte.<\/p>\n<p><\/p>\n<p>Bis zur Version 9.2 (wenn ich mich nicht irre, ab Version 8.2) konnte man PostgreSQL mithilfe einer Drittanbieterbibliothek mit huge pages verbinden. Und das muss immer gemacht werden. Erstens muss das Kernel in der Lage sein, huge pages richtig zuzuweisen. Und zweitens, damit die Anwendung, die damit arbeitet, sie nutzen kann. Einfach so wird sie das nicht tun. Da PostgreSQL den Speicher im Style von System 5 zugewiesen hat, konnte dies mit libhugetlbfs geschehen \u2013 das ist der vollst\u00e4ndige Name der Bibliothek.<\/p>\n<p><\/p>\n<p>In Version 9.3 wurde die Leistung von PostgreSQL im Umgang mit Speicher verbessert, und die Methode 5 zur Speicherzuweisung wurde aufgegeben. Alle waren sehr erfreut, denn ansonsten versucht man, zwei Instanzen von PostgreSQL auf einer Maschine zu starten, und er sagt, dass der Shared-Speicher nicht ausreicht. Und er sagt, man muss den sysctl anpassen. Dabei ist der sysctl so beschaffen, dass man sich auch neu starten muss usw. Insgesamt waren alle erfreut. Aber die mmap-Speicherzuweisung hat die Verwendung von Huge Pages beeintr\u00e4chtigt. Die meisten unserer Kunden verwenden gro\u00dfe Shared Buffers. Und wir haben dringend empfohlen, nicht auf 9.3 umzusteigen, da dort der Overhead in guten Prozents\u00e4tzen beginnt zu berechnen.<\/p>\n<p><\/p>\n<p>Aber die Community hat auf dieses Problem hingewiesen und in 9.4 wurde dieses Thema sehr gut \u00fcberarbeitet. In 9.4 gibt es nun einen Parameter in postgresql.conf, mit dem man try, on oder off aktivieren kann.<\/p>\n<p><\/p>\n<p>Try ist der sicherste Parameter. Beim Start von PostgreSQL, wenn er den Shared-Speicher zuweist, versucht er, sich diesen Speicher aus den Huge Pages zu holen. Und wenn das nicht klappt, f\u00e4llt er auf die normale Zuweisung zur\u00fcck. Wenn Sie FreeBSD oder Solaris haben, k\u00f6nnen Sie try verwenden, das ist immer sicher. <\/p>\n<p><\/p>\n<p>Wenn on, dann startet er einfach nicht, wenn er den Speicher nicht aus den Huge Pages zuweisen konnte. Das h\u00e4ngt dann von den individuellen Vorlieben ab. Aber wenn Sie try eingestellt haben, stellen Sie sicher, dass wirklich das zugewiesen wurde, was ben\u00f6tigt wird, denn es gibt viel Raum f\u00fcr Fehler. Momentan funktioniert diese Funktionalit\u00e4t nur unter Linux.<\/p>\n<p><\/p>\n<p>Noch eine kleine Anmerkung, bevor wir fortfahren. Transparent Huge Pages sind bisher nicht f\u00fcr PostgreSQL relevant. Er kann sie nicht richtig nutzen. Und bei Transparent Huge Pages gibt es f\u00fcr solche Workloads, bei denen ein gro\u00dfer St\u00fcck Shared-Speicher ben\u00f6tigt wird, nur bei sehr gro\u00dfen Volumina Vorteile. Wenn Sie Terabytes an Speicher haben, kann das eine Rolle spielen. Wenn wir von allt\u00e4glichen Anwendungen sprechen, bei denen Sie 32, 64, 128 oder 256 GB Speicher auf der Maschine haben, dann ist die normale Huge Page-Implementierung in Ordnung, w\u00e4hrend Transparent einfach deaktiviert bleibt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und das letzte Thema, das den Speicher betrifft, ist nicht direkt mit dem Durchsatz verbunden, kann aber das Leben erheblich erschweren. Die gesamte Bandbreite leidet erheblich, da der Server st\u00e4ndig swappt. <\/p>\n<p><\/p>\n<p>Und das wird in einer Reihe von Momenten sehr unangenehm sein. Das Hauptproblem besteht darin, dass sich das Verhalten der modernen Kerne etwas von den \u00e4lteren Linux-Kernen unterscheidet. Und das ist etwas, auf was man ziemlich unangenehm tritt, denn wenn wir \u00fcber die Arbeit mit Swap sprechen, endet das nicht mit dem rechtzeitigen Erscheinen des OOM-Killers. Und der OOM-Killer, der nicht rechtzeitig kam und PostgreSQL heruntergefahren hat, ist unangenehm. Das erfahren alle, d. h. bis zum letzten Benutzer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was passiert? Ihr habt viel Arbeitsspeicher, alles funktioniert gut. Aber aus irgendeinem Grund h\u00e4ngt der Server im Swap und verlangsamt sich dadurch. Es scheint, dass viel Speicher vorhanden ist, aber trotzdem passiert es. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fr\u00fcher haben wir empfohlen, vm.swappiness auf null zu setzen, d. h. Swap zu deaktivieren. Fr\u00fcher schien es, dass 32 GB Arbeitsspeicher und entsprechende Shared Buffers eine riesige Menge sind. Die Hauptaufgabe von Swap besteht darin, einen Platz zu haben, wohin man einen Prozess ablegen kann, wenn wir ausfallen. Und das hat nicht mehr wirklich funktioniert. Und was macht man dann mit diesem Prozess? Das ist dann so eine Aufgabe, bei der nicht ganz klar ist, wozu Swap \u00fcberhaupt ben\u00f6tigt wird, erst recht nicht in solcher Gr\u00f6\u00dfe. <\/p>\n<p><\/p>\n<p>Aber in den moderneren, d. h. in den dritten Versionen des Kerns hat sich das Verhalten ge\u00e4ndert. Wenn man Swap auf null setzt, also deaktiviert, wird irgendwann, auch bei noch vorhandenem Arbeitsspeicher, der OOM-Killer kommen, um die intensivsten Verbraucher zu killen. Denn er wird annehmen, dass bei dieser Arbeitslast noch ein wenig Speicher \u00fcbrig ist und wir ausfallen, d. h. nicht den Systemprozess abschalten, sondern etwas weniger Wichtiges. Dieses weniger Wichtige wird dann ein intensiver Verbraucher des Shared Memory sein, n\u00e4mlich postmaster. Und danach wird es gut sein, wenn die Datenbank nicht wiederhergestellt werden muss. <\/p>\n<p><\/p>\n<p>Deshalb ist standardm\u00e4\u00dfig, soweit ich mich erinnere, bei den meisten Distributionen ein Wert von etwa 6 eingestellt, d. h. ab wann mit Swap begonnen wird, je nachdem, wie viel Speicher noch \u00fcbrig ist. <strong>Wir empfehlen jetzt, vm.swappiness auf 1 zu setzen, weil das es praktisch ausschaltet, aber nicht die negativen Effekte hat, die mit einem unerwartet kommenden OOM-Killer verbunden sind, der alles kaputt macht.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was kommt als N\u00e4chstes? Wenn wir \u00fcber die Leistung von Datenbanken sprechen und allm\u00e4hlich zu den Festplatten \u00fcbergehen, geraten alle in Aufruhr. Denn die Wahrheit, dass die Festplatte langsam und der Speicher schnell ist, ist jedem seit seiner Kindheit bekannt. Und alle wissen, dass es in einer Datenbank Probleme mit der Festplattenleistung geben wird.<\/p>\n<p><\/p>\n<p>Das Hauptproblem mit der Leistung von PostgreSQL, das mit den Spitzenbelastungen bei Checkpoints verbunden ist, entsteht nicht, weil die Festplatte langsam ist. Es liegt eher daran, dass die Bandbreite von Speicher und Festplatte nicht ausgeglichen ist. Dabei k\u00f6nnen sie an verschiedenen Punkten unausgeglichen sein. PostgreSQL ist nicht konfiguriert, das Betriebssystem ist nicht konfiguriert, die Hardware ist nicht konfiguriert und die Hardware ist falsch. Und dieses Problem tritt nur dann nicht auf, wenn alles nach Plan l\u00e4uft, d. h. entweder gibt es keine Last oder die Einstellungen und die Hardware sind gut ausgew\u00e4hlt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was ist das und wie sieht es aus? Normalerweise arbeiten Menschen, die mit PostgreSQL umgehen, mehrmals an diesem Thema. Ich werde es erkl\u00e4ren. Wie ich bereits sagte, f\u00fchrt PostgreSQL regelm\u00e4\u00dfig Checkpoints durch, um die schmutzigen Seiten im gemeinsamen Speicher auf die Festplatte zu dumpen. Wenn wir ein gro\u00dfes Volumen an gemeinsamem Speicher haben, beginnt der Checkpoint intensiv auf die Festplatte einzuwirken, weil er diese Seiten mit fsync dumpet. Er gelangt in den Kernel-Puffer und wird mithilfe von fsync auf die Festplatten geschrieben. Und wenn dieses Volumen gro\u00df ist, k\u00f6nnen wir einen unangenehmen Effekt beobachten, n\u00e4mlich eine sehr hohe Auslastung der Festplatten.<\/p>\n<p><\/p>\n<p>Hier habe ich zwei Bilder. Ich werde jetzt erkl\u00e4ren, was das ist. Das sind zwei zeitlich korrelierte Grafiken. Die erste Grafik zeigt die Festplattenauslastung. Hier erreicht sie in diesem Moment fast 90 %. Wenn Ihre Datenbank mit physischen Festplatten und einem RAID-Controller eine Auslastung von fast 90 % aufweist, sind das schlechte Nachrichten. Das bedeutet, dass es nur noch ein kleines St\u00fcckchen bis zu 100 % sind und die Ein- und Ausgabe stoppen werden. <\/p>\n<p><\/p>\n<p>Wenn Sie ein RAID-System haben, sieht die Geschichte ein wenig anders aus. Es h\u00e4ngt davon ab, wie es konfiguriert ist, um was f\u00fcr ein Array es sich handelt usw. <\/p>\n<p><\/p>\n<p>Gleichzeitig ist hier ein Diagramm aus der internen PostgreSQL-Ansicht konfiguriert, das zeigt, wie der Checkpoint abl\u00e4uft. In Gr\u00fcn wird angezeigt, wie viele Buffer, also diese schmutzigen Seiten, in diesem Moment f\u00fcr die Synchronisierung bei diesem Checkpoint angekommen sind. Und das ist das Wichtigste, was man hier wissen muss. Wir sehen, dass viele Seiten angekommen sind und irgendwann sto\u00dfen wir auf die Grenze, d.h. wir haben viel geschrieben, hier ist eindeutig das Speichersystem stark besch\u00e4ftigt. Und unser Checkpoint hat einen gro\u00dfen Einfluss auf die Festplatte. Idealerweise sollte die Situation eher so aussehen, dass wir hier weniger Schreibvorg\u00e4nge hatten. Und mit den Einstellungen k\u00f6nnen wir das beheben, damit es so bleibt. Das hei\u00dft, die Auslastung ist gering, aber irgendwo machen wir hier Schreibvorg\u00e4nge. <\/p>\n<p><\/p>\n<p>Was muss man tun, um dieses Problem zu \u00fcberwinden? Wenn das IO unter der Datenbank stoppt, bedeutet das, dass alle Benutzer, die ihre Anfragen ausf\u00fchren wollen, warten m\u00fcssen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn man das aus der Sicht von Linux betrachtet, wenn man gute Hardware hat, sie richtig konfiguriert hat und PostgreSQL so eingestellt hat, dass es diese Checkpoints seltener durchf\u00fchrt und sie zeitlich voneinander verteilt, dann landet man bei den Standardparametern von Debian. F\u00fcr die meisten Linux-Distributionen sieht die Situation so aus: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>Was bedeutet das? Mit dem Kernel 2.6 erschien ein Daemon f\u00fcr das Flushing. Pdglush, je nachdem, wer welchen nutzt, befasst sich mit dem Hintergrund-Entfernen von schmutzigen Seiten aus dem Kernel-Buffer und damit, das Entfernen durchzuf\u00fchren, wenn es unbedingt n\u00f6tig ist, wenn das Hintergrund-Entfernen nicht mehr hilft. <\/p>\n<p><\/p>\n<p>Wann tritt das Hintergrund-Entfernen ein? Wenn 10 % des gesamten Arbeitsspeichers, der auf dem Server vorhanden ist, mit schmutzigen Seiten im Kernel-Buffer belegt sind, wird eine spezielle Funktion f\u00fcr das Entfernen im Hintergrund aufgerufen. Warum ist sie im Hintergrund? Sie nimmt als Parameter auf, wie viele Seiten entfernt werden sollen. Und, sagen wir, entfernt N Seiten. Und f\u00fcr eine gewisse Zeit schl\u00e4ft dieses Ding dann. Danach kommt es wieder und entfernt eine weitere Anzahl von Seiten. <\/p>\n<p><\/p>\n<p>Das ist eine ganz einfache Geschichte. Hier ist die Aufgabe wie bei einem Pool, wo in ein Rohr rein und aus einem anderen rausl\u00e4uft. Unser Checkpoint ist angekommen und wenn er nur wenige schmutzige Seiten zum Entfernen geschickt hat, wird sich das allm\u00e4hlich aus dem Kernel-Buffer durch pgflush zusammensetzen. <\/p>\n<p><\/p>\n<p>Wenn diese schmutzigen Seiten weiter ansammeln, summieren sie sich bis zu 20 %, danach hat das Betriebssystem Priorit\u00e4t, all dies auf die Festplatte zu schreiben, weil die Stromversorgung ausf\u00e4llt, und es wird schlecht f\u00fcr uns sein. Wir verlieren diese Daten, zum Beispiel. <\/p>\n<p><\/p>\n<p>Was ist der Trick? <strong>Der Trick besteht darin, dass diese Parameter in der modernen Welt 20 und 10 % des gesamten Arbeitsspeichers, der im Computer vorhanden ist, ausmachen, was aus Sicht der Bandbreite jeder Festplattensysteme, die Sie haben, v\u00f6llig t\u00f6dlich ist.<\/strong> <\/p>\n<p><\/p>\n<p>Stellen Sie sich vor, Sie haben 128 GB RAM. 12,8 GB kommen in Ihr Speichersystem. Und egal, welcher Cache vorhanden ist, egal welches Array Sie haben, sie werden das nicht verkraften. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Deshalb empfehlen wir, diese Zahlen sofort an die M\u00f6glichkeiten Ihres RAID-Controllers anzupassen.<\/strong> Hier ist sofort eine Empfehlung f\u00fcr einen Controller angegeben, der 512 MB Cache hat. <\/p>\n<p><\/p>\n<p>Es ist alles sehr einfach. Man kann vm.dirty_background in Bytes setzen. Und diese Einstellungen heben die vorherigen beiden auf. Entweder das Verh\u00e4ltnis standardm\u00e4\u00dfig oder die aktiviert, die in Bytes sind, werden die arbeiten, die in Bytes sind. Aber da ich als DBA-Berater arbeite und mit verschiedenen Kunden zu tun habe, versuche ich, auf Nummer sicher zu gehen, und daher, wenn in Bytes, dann in Bytes. Niemand hat eine Garantie gegeben, dass ein freundlicher Administrator dem Server nicht mehr Speicher zuschiebt oder ihn nicht neu startet, w\u00e4hrend die Zahl die gleiche bleibt. Berechnen Sie einfach diese Zahlen, damit garantiert alles hineinpasst. <\/p>\n<p><\/p>\n<p>Was passiert, wenn Sie nicht hineinpassen? Es steht geschrieben, dass jeder Flushing effektiv gestoppt wird, aber in Wirklichkeit ist das eine Floskel. Das Betriebssystem hat ein gro\u00dfes Problem \u2013 es hat viele schmutzige Seiten, deshalb wird der IO, der von Ihren Clients erzeugt wird, effektiv gestoppt, d. h. eine SQL-Anwendung ist dabei, eine Anfrage an die Datenbank zu senden, sie wartet. Jeder Input-Output in sie hat die niedrigste Priorit\u00e4t, weil die Datenbank mit dem Checkpoint besch\u00e4ftigt ist. Und wann sie damit fertig ist, ist v\u00f6llig unklar. Und wenn Sie nicht am hintergr\u00fcndigen, nicht am Hintergrund-Flushing angekommen sind, bedeutet das, dass alle IO damit besch\u00e4ftigt sind. Und solange es nicht abgeschlossen ist, k\u00f6nnen Sie nichts tun. <\/p>\n<p><\/p>\n<p>Es gibt noch zwei wichtige Punkte, die den Rahmen dieses Berichts sprengen. Diese Einstellungen sollten mit den Einstellungen in postgresql.conf \u00fcbereinstimmen, d. h. den Einstellungen f\u00fcr Checkpoints. Und Ihr Speichersystem sollte angemessen konfiguriert sein. <strong>Wenn Sie einen Cache auf RAID haben, sollte sich darauf eine Batterie befinden.<\/strong> Menschen kaufen RAID mit gutem Cache ohne Batterie. <strong>Wenn Sie SSDs im RAID haben, sollten sie Server-SSDs sein, sie sollten Kondensatoren haben.<\/strong> Hier ist eine ausf\u00fchrliche Checkliste. \u00dcber diesen Link finden Sie meinen Bericht dar\u00fcber, wie man die Disk-Performance in PostgreSQL einstellt. Dort sind all diese Checklisten enthalten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was kann das Leben noch erheblich erschweren? Das sind zwei Parameter. Sie sind relativ neu. Sie k\u00f6nnen standardm\u00e4\u00dfig in verschiedenen Anwendungen aktiviert sein. Und sie k\u00f6nnen das Leben nicht minder komplizieren, wenn sie falsch aktiviert sind. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt zwei relativ neue Merkmale. Sie sind bereits in den dritten Kernversionen aufgetaucht. Das sind sched_migration_cost in Nanosekunden und sched_autogroup_enabled, das standardm\u00e4\u00dfig auf eins gesetzt ist. <\/p>\n<p><\/p>\n<p>Und wie beeintr\u00e4chtigen sie das Leben? Was ist sched_migration_cost? Der Linux-Scheduler kann einen Prozess von einem CPU auf einen anderen migrieren. Und f\u00fcr PostgreSQL, das Abfragen ausf\u00fchrt, ist die Migration auf einen anderen CPU v\u00f6llig unverst\u00e4ndlich. <strong>F\u00fcr die Datenbank ist das sehr schlecht.<\/strong> <strong>Daher ist eine sinnvolle Politik, den migration_cost auf einen hohen Wert zu setzen, zumindest mehrere tausend Nanosekunden.<\/strong> <\/p>\n<p><\/p>\n<p>Was wird das f\u00fcr den Scheduler bedeuten? Er wird annehmen, dass dieser Prozess in diesem Zeitraum weiterhin aktiv ist. Das bedeutet, wenn Sie eine lange Transaktion haben, die sich mit etwas Zeitaufwendigem besch\u00e4ftigt, wird der Scheduler das verstehen. Er wird annehmen, dass dieser Prozess nicht migriert werden muss, solange dieser Timeout nicht \u00fcberschritten ist. Wenn der Prozess gleichzeitig etwas tut, wird er nicht migriert, sondern l\u00e4uft weiterhin auf dem CPU, der ihm zugewiesen wurde. Das Ergebnis ist ausgezeichnet. <\/p>\n<p><\/p>\n<p>Der zweite Punkt ist autogroup. Es gibt eine gute Idee f\u00fcr spezifische Workloads, die nichts mit modernen Datenbanken zu tun haben \u2013 Prozesse nach dem virtuellen Terminal, von dem aus sie gestartet wurden, zu gruppieren. Das ist praktisch f\u00fcr bestimmte Aufgaben. <strong>In der Praxis ist PostgreSQL ein Multiprozesssystem mit Prefork, das von einem Terminal aus gestartet wird. Sie haben Writer-Locks, Checkpoints, und alle Ihre Client-Anfragen werden auf einen Scheduler, auf eine CPU, gruppiert. Dort werden sie gemeinsam warten, bis sie frei werden, um sich gegenseitig zu behindern und sie l\u00e4nger zu besetzen. Diese Situation ist bei solch einer Belastung v\u00f6llig unn\u00f6tig, und daher sollte sie abgeschaltet werden.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mein Kollege Alexey Lesovskiy hat Tests mit einfachem pgbench durchgef\u00fchrt, bei denen er die Migrationskosten um den Faktor 10 erh\u00f6ht und die Autogruppe deaktiviert hat. <strong>Der Unterschied bei schlechter Hardware betrug fast 10 %.<\/strong>. Es gibt eine Diskussion in der Postgres-Mail-Liste, in der Leute Ergebnisse erw\u00e4hnen, wie solche \u00c4nderungen die Abfragegeschwindigkeit <strong>beeinflussten um 50 %.<\/strong>. Es gibt viele solcher Geschichten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und abschlie\u00dfend zur Stromsparpolitik. Es ist gut, dass man Linux jetzt auf einem Laptop verwenden kann. Und es wird angeblich den Akku gut schonen. Aber pl\u00f6tzlich stellt sich heraus, dass das auch auf Servern so sein kann. <\/p>\n<p><\/p>\n<p>Dar\u00fcber hinaus, wenn Sie Server von einem Hosting-Anbieter mieten, k\u00fcmmern sich die \"freundlichen\" <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/\"   title=\"Hoster\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">Hoster<\/a> nicht darum, Ihnen eine bessere Leistung zu bieten. Ihre Aufgabe ist es, daf\u00fcr zu sorgen, dass ihre Hardware m\u00f6glichst effizient genutzt wird. Daher k\u00f6nnen sie standardm\u00e4\u00dfig den Energiesparmodus des Laptops im Betriebssystem aktivieren.<\/p>\n<p><\/p>\n<p><strong>Wenn Sie auf einem Server mit einer stark belasteten Datenbank den Energiesparmodus verwenden, dann ist Ihre Wahl acpi_cpufreq + performance. Selbst mit ondemand werden bereits Probleme auftreten.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate ist bereits ein etwas anderer Treiber. Und aktuell wird dieser bevorzugt, da er sp\u00e4ter entwickelt wurde und besser funktioniert.<\/p>\n<p><\/p>\n<p>Entsprechend ist der Governor ausschlie\u00dflich performance. Ondemand, powersave und alles andere \u2013 das ist nicht f\u00fcr Sie. <\/p>\n<p><\/p>\n<p>Die Ergebnisse von explain analyze in PostgreSQL k\u00f6nnen um mehrere Gr\u00f6\u00dfenordnungen abweichen, wenn Sie powersave aktivieren, da der CPU unter Ihrer Datenbank auf vollkommen unvorhersehbare Weise geplant wird.<\/p>\n<p><\/p>\n<p>Diese Dinge k\u00f6nnen standardm\u00e4\u00dfig aktiviert sein. Schauen Sie genau hin \u2013 haben sie m\u00f6glicherweise standardm\u00e4\u00dfig aktiviert. Das k\u00f6nnte wirklich ein gro\u00dfes Problem sein. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und zum Schluss m\u00f6chte ich den Jungs aus unserem DBA-Team PosgreSQL-Consulting danken, insbesondere Max Boguk und Alexey Lesovsky, die sich jeden Tag mit diesem Thema auseinandersetzen. F\u00fcr unsere Kunden versuchen wir, es so gut wie m\u00f6glich zu machen, damit alles funktioniert. Das ist wie mit den Anleitungen zur Flugsicherheit. Hier steht alles in Blut geschrieben. Jede dieser Schrauben wurde im Zuge eines Problems entdeckt. Ich teile sie gerne mit Ihnen.<\/p>\n<p><\/p>\n<p>Fragen:<\/p>\n<p><\/p>\n<p><em>Danke! Wenn zum Beispiel ein Unternehmen Kosten sparen m\u00f6chte und die Datenbank und die Anwendungslogik auf einem Server unterbringen m\u00f6chte, oder wenn das Unternehmen dem Trend zu mikroservicebasierten Architekturen folgt, bei denen PostgreSQL in einem Container l\u00e4uft. Was ist der Trick dabei? Sysctl beeinflusst global den gesamten Kernel. Ich habe noch nie geh\u00f6rt, dass sysctl irgendwie virtualisiert wird, damit sie in einem Container separat arbeiten. Es gibt nur cgroups und dort gibt es nur eine eingeschr\u00e4nkte Kontrolle. Wie kann man damit leben? Oder wenn Sie Leistung m\u00f6chten, sollten Sie PostgreSQL auf einem eigenen physischen Server betreiben und diesen optimieren?<\/em><\/p>\n<p><\/p>\n<p>Wir haben Ihre Frage auf etwa drei Arten beantwortet. Wenn es sich nicht um einen physischen Server handelt, den man optimieren kann usw., dann entspannen Sie sich, alles wird auch ohne diese Einstellungen gut funktionieren. Wenn Sie eine Last haben, die diese Einstellungen erforderlich macht, werden Sie schneller zu einem physischen Server kommen, als zu diesen Einstellungen.<\/p>\n<p><\/p>\n<p>Was ist das Problem? Wenn es sich um eine virtuelle Maschine handelt, werden Sie wahrscheinlich viele Probleme haben, zum Beispiel mit der insgesamt inkonsistenten Latenz der Festplatte auf den meisten virtuellen Maschinen. Selbst wenn die Festplattendurchsatz gut ist, kann eine fehlgeschlagene Transaktion bei einer Ein- und Ausgabeoperation, die sich zur Zeit eines Checkpoints oder beim Schreiben in WAL ereignet, die mittlere Durchsatzrate kaum beeinflussen, aber die Datenbank wird darunter leiden. Und Sie werden das fr\u00fcher bemerken, als Sie denken. <\/p>\n<p><\/p>\n<p>Wenn Sie NGINX auf demselben Server haben, wird es ebenfalls das gleiche Problem geben. Er wird um den gemeinsamen Speicher k\u00e4mpfen. Und zu den Problemen, die hier beschrieben sind, werden Sie nicht gelangen.<\/p>\n<p><\/p>\n<p>Aber auf der anderen Seite werden einige dieser Parameter f\u00fcr Sie dennoch relevant sein. Zum Beispiel, mit sysctl den dirty_ratio einstellen, damit es nicht so verr\u00fcckt ist \u2013 das hilft in jedem Fall. So oder so werden Sie mit der Festplatte interagieren. Und das wird nach einem falschen Schema geschehen. Das sind im Grunde die Standardparameter, die ich gezeigt habe. Und in jedem Fall ist es besser, sie zu \u00e4ndern. <\/p>\n<p><\/p>\n<p>Mit NUMA kann es Probleme geben. VmWare funktioniert zum Beispiel gut mit NUMA mit genau gegenteiligen Einstellungen. Und hier muss man w\u00e4hlen \u2013 ein physischer Server oder kein physischer. <\/p>\n<p><\/p>\n<p><em>Ich habe eine Frage zu Amazon AWS. Sie haben vorgefertigte Images. Eines davon nennt sich Amazon RDS. Gibt es dort irgendwelche benutzerdefinierten Einstellungen f\u00fcr ihr Betriebssystem?<\/em><\/p>\n<p><\/p>\n<p>Es gibt Einstellungen, aber das sind andere Einstellungen. Hier konfigurieren wir das Betriebssystem aus der Perspektive, wie die Datenbank dies nutzen wird. Und dort gibt es Parameter, die festlegen, wohin wir jetzt gehen, so eine Art Shaping. D.h. wir brauchen so viele Ressourcen, die werden wir jetzt verbrauchen. Danach f\u00fcgt Amazon RDS diese Ressourcen hinzu, und die Leistung sinkt. Es gibt verschiedene Geschichten, wie Leute anfangen, in dieser Angelegenheit zu experimentieren. Manchmal sogar sehr erfolgreich. Aber das hat nichts mit den Einstellungen des OS zu tun. Das ist gewisserma\u00dfen Cloud-Hacking. Das ist eine andere Geschichte.<\/p>\n<p><\/p>\n<p><em>Warum haben transparente gro\u00dfe Seiten keinen Effekt im Vergleich zu gro\u00dfen TLB?<\/em><\/p>\n<p><\/p>\n<p>Haben sie nicht. Man kann das auf viele Arten erkl\u00e4ren. Aber faktisch bringen sie einfach nichts. Wie steht es um PostgreSQL? Zu Beginn reserviert es ein gro\u00dfes St\u00fcck Shared Memory. Ob transparent oder nicht transparent \u2013 das ist v\u00f6llig unwichtig. Die Tatsache, dass sie zu Beginn reserviert wird, erkl\u00e4rt alles. Und wenn der Speicher sehr gro\u00df ist und der shared_memory-Segment umstrukturiert werden muss, dann wird Transparent Huge Pages relevant. Bei PostgreSQL ist es einfach zu Beginn als gro\u00dfes St\u00fcck reserviert, und das war's, und danach passiert nichts Besonderes. Nat\u00fcrlich kann man es verwenden, aber es besteht die Gefahr, dass der shared_memory besch\u00e4digt wird, wenn er etwas neu zuweist. PostgreSQL wei\u00df jedoch nichts davon.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505108\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u0432\u0435\u0440\u0441\u0438\u044f 9.4 \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 4 \u0433\u043e\u0434\u0430 \u0432\u044b\u0448\u043b\u043e 5 \u043d\u043e\u0432\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 PostgreSQL \u0432\u044b\u0448\u043b\u043e \u0438 15 \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0434\u0440\u0430 Linux. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84083,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84082","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\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\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\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-06-05T05:42:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-05T05:42:28+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\udd47Linux-Tuning zur Verbesserung der PostgreSQL-Leistung. Ilya Kosmodemyansky | ProHoster","description":"Entschl\u00fcsselung des Berichts von Ilya Kosmodemyansky aus dem Jahr 2015 \"Linux-Tuning zur Verbesserung der PostgreSQL-Leistung\" Haftungsausschluss: Ich m\u00f6chte darauf hinweisen, dass dieser Bericht aus November 2015 datiert ist \u2013 es sind mehr als 4 Jahre vergangen und viel passiert.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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\udd47Linux tuning to improve PostgreSQL performance. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2015 \u0433\u043e\u0434\u0430 \u0418\u043b\u044c\u0438 \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u043e\u0433\u043e &quot;Linux tuning to improve PostgreSQL performance&quot; Disclaimer: \u0417\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u0434\u043e\u043a\u043b\u0430\u0434 \u044d\u0442\u043e\u0442 \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u044f\u0431\u0440\u0435\u043c 2015 \u0433\u043e\u0434\u0430 \u2014 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 4 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","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-06-05T05:42:28+00:00","article:modified_time":"2020-06-05T05:42:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84082","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 15:05:32","updated":"2026-02-09 21:38:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/84082","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=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}