{"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\/it\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","title":{"rendered":"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"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;<\/p>\n<p><\/p>\n<p>Disclaimer: Noter\u00f2 che questa relazione \u00e8 datata novembre 2015 \u2014 sono passati pi\u00f9 di 4 anni e molto tempo \u00e8 trascorso. La versione discussa nella relazione, 9.4, non \u00e8 pi\u00f9 supportata. Negli ultimi 4 anni sono state rilasciate 5 nuove versioni di PostgreSQL e 15 versioni del kernel Linux. Se riscrivessimo questi punti, otterremmo alla fine una relazione diversa. Ma qui viene trattata l'ottimizzazione fondamentale di Linux per PostgreSQL, che \u00e8 ancora attuale.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. 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=\"Riproduci video\" 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>Mi chiamo Ilya Kosmodemyansky. Lavoro per PostgreSQL-Consulting. E ora parler\u00f2 un po' di cosa fare con Linux in relazione ai database in generale e a PostgreSQL in particolare, poich\u00e9 i principi sono piuttosto simili.<\/p>\n<p><\/p>\n<p>Di cosa parleremo? Se interagite con PostgreSQL, \u00e8 necessario essere in qualche modo un amministratore UNIX. Cosa significa? Se confrontiamo Oracle e PostgreSQL, in Oracle bisogna essere per l'80% DBA dell'amministratore del database e per il 20% amministratore di Linux.<\/p>\n<p><\/p>\n<p>Con PostgreSQL \u00e8 un po' pi\u00f9 complicato. Con PostgreSQL \u00e8 fondamentale avere una buona comprensione di come funziona Linux. Inoltre, \u00e8 necessario seguire da vicino gli aggiornamenti, poich\u00e9 di recente ci sono stati molti sviluppi. Nuovi kernel sono stati rilasciati, sono apparse nuove funzionalit\u00e0 e le prestazioni sono migliorate, ecc. <\/p>\n<p><\/p>\n<p>Perch\u00e9 parliamo di Linux? Non perch\u00e9 siamo alla conferenza Linux di San Pietroburgo, ma perch\u00e9, nelle condizioni attuali, uno dei sistemi operativi pi\u00f9 giustificati per l'uso con database in generale e con PostgreSQL in particolare \u00e8 Linux. Purtroppo, FreeBSD sta seguendo una direzione piuttosto strana. Ci saranno problemi sia di prestazioni che in molte altre aree. <strong>Le prestazioni di PostgreSQL su Windows sono un tema a parte, legato al fatto che Windows non ha la memoria condivisa come UNIX, mentre PostgreSQL dipende molto da questo, poich\u00e9 \u00e8 un sistema multi-processo.<\/strong> <\/p>\n<p><\/p>\n<p>E esotismi come Solaris, penso interessino in misura minore, quindi procediamo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/990133933bd1816895fc8f73edaf900e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Una moderna distribuzione Linux ha pi\u00f9 di 1.000 parametri syctl, a seconda di come viene costruito il kernel. Inoltre, se consideriamo diverse opzioni, ci sono molti modi per ottimizzare ulteriormente il sistema. Esistono parametri per i file system, e modalit\u00e0 per il loro montaggio. Se ci sono domande su come avviare il sistema, come attivare le impostazioni nel BIOS, o come configurare l'hardware, ecc.<\/p>\n<p><\/p>\n<p>Si tratta di un argomento molto ampio, che potrebbe richiedere giorni per essere trattato, piuttosto che un breve intervento, ma ora mi concentrer\u00f2 su aspetti importanti su come evitare le insidie che sicuramente comprometteranno l'ottimizzazione del database su Linux, se non vengono sistemate. Inoltre, c'\u00e8 un aspetto importante: molti parametri sono di default impostati in modo non corretto per i database. Cio\u00e8, funzioner\u00e0 male o non funzioner\u00e0 affatto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/189f6497c795a5e5fd5b458edfadb22f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quali sono i tradizionali obiettivi di tuning in Linux? Credo che, dato che tutti voi avete a che fare con l'amministrazione di Linux, non sia necessario spiegare cosa siano gli obiettivi. <\/p>\n<p><\/p>\n<p>Si pu\u00f2 ottimizzare:<\/p>\n<p><\/p>\n<ul>\n<li>CPU.<\/li>\n<li>Memoria.<\/li>\n<li>Storage.<\/li>\n<li>Altro. Di questo parleremo alla fine come un dessert. Anche, ad esempio, parametri come la politica di risparmio energetico possono influenzare le prestazioni in modo molto imprevedibile e poco piacevole. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/92916aadaf123a3f836bed3a2c1bd95a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Qual \u00e8 la specificit\u00e0 di PostgreSQL e dei database in generale? Il problema \u00e8 che non si pu\u00f2 semplicemente regolare un singolo dado e aspettarsi un miglioramento significativo delle prestazioni. <\/p>\n<p><\/p>\n<p>S\u00ec, ci sono questi dadi, ma i database sono complessi. Interagiscono con tutte le risorse del server e preferiscono interagire completamente. Se guardate alle raccomandazioni moderne di Oracle su come utilizzare il sistema operativo host, \u00e8 un po' come la barzelletta del cosmonauta mongolo: dare da mangiare al cane e non toccare nulla. Diamo al database tutte le risorse, e il database si gestir\u00e0 da solo. <\/p>\n<p><\/p>\n<p>In linea di principio, la situazione con PostgreSQL \u00e8 molto simile. La differenza \u00e8 che il database non riesce a prelevare autonomamente tutte le risorse, cio\u00e8 \u00e8 necessario gestire tutto a livello di Linux. <\/p>\n<p><\/p>\n<p>L'idea principale non \u00e8 selezionare un singolo target e iniziare a modificarlo, ad esempio la memoria, la CPU o qualcosa del genere, ma analizzare il carico di lavoro e cercare di ottimizzare al massimo la larghezza di banda in modo che il carico che i bravi programmatori ci hanno creato, compresi i nostri utenti, attraversi il nostro database nel modo pi\u00f9 efficiente possibile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/2db6c11a6f612b8aecccfe126be4fd7f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ecco un'immagine che spiega cosa sia. C'\u00e8 un buffer del sistema operativo Linux, c'\u00e8 la memoria condivisa e ci sono i buffer condivisi di PostgreSQL. A differenza di Oracle, PostgreSQL funziona esclusivamente attraverso il buffer del kernel, cio\u00e8 affinch\u00e9 una pagina dal disco entri nella sua memoria condivisa, deve passare attraverso il kernel buffer e la situazione \u00e8 esattamente la stessa al contrario. <\/p>\n<p><\/p>\n<p>Sotto questo sistema risiedono i dischi. Li ho rappresentati come dischi. In realt\u00e0, potrebbe esserci un controller RAID e cos\u00ec via. <\/p>\n<p><\/p>\n<p>E questo input-output avviene in un modo o nell'altro attraverso questo sistema.<\/p>\n<p><\/p>\n<p>PostgreSQL \u00e8 un database classico. Le sue operazioni avvengono tramite pagine. Utilizziamo le pagine per caricare i blocchi in memoria. Se non succede nulla e le abbiamo semplicemente lette, queste pagine gradualmente escono dalla cache e dai buffer condivisi e ritornano su disco. <\/p>\n<p><\/p>\n<p>Se abbiamo sostituito qualcosa, l'intera pagina viene contrassegnata come sporca. L'ho evidenziata in blu. Ci\u00f2 significa che questa pagina deve essere sincronizzata con lo storage dei blocchi. Quando la rendiamo sporca, registriamo un'operazione nel WAL. A un certo punto interviene un fenomeno chiamato checkpoint. In questo log viene registrata l'informazione del suo arrivo. Ci\u00f2 significa che tutte le pagine sporche presenti in quel momento nei buffer condivisi vengono sincronizzate con il disco dello storage tramite fsync attraverso il kernel buffer.<\/p>\n<p><\/p>\n<p>Perch\u00e9 viene fatto? Se perdiamo la corrente, non possiamo permetterci di perdere tutti i dati. La memoria persistente, di cui ci hanno parlato, \u00e8 al momento solo teoria nei database; \u00e8 un futuro promettente verso cui aspiriamo e che ci piace, ma attualmente siamo ancora indietro di vent'anni. E, naturalmente, \u00e8 necessario monitorare tutto questo.<\/p>\n<p><\/p>\n<p>L'obiettivo di massimizzare la larghezza di banda \u00e8 ottimizzare tutte queste fasi affinch\u00e9 tutto funzioni rapidamente. La memoria condivisa \u00e8 principalmente una cache basata su pagine. In PostgreSQL, abbiamo inviato una richiesta di selezione e i dati sono stati recuperati dal disco. Sono stati caricati nei buffer condivisi. Pertanto, per migliorare le prestazioni, \u00e8 necessaria molta memoria.<\/p>\n<p><\/p>\n<p>Affinch\u00e9 tutto funzioni bene e rapidamente, \u00e8 fondamentale configurare correttamente il sistema operativo in tutte le fasi. Inoltre, bisogna scegliere hardware bilanciato, perch\u00e9 se c'\u00e8 uno squilibrio in qualche parte, anche se avete molta memoria, il servizio potrebbe risultare lento. <\/p>\n<p><\/p>\n<p>Esamineremo ciascuno di questi punti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/fe031218be39cd727f3a76b22563e101.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Perch\u00e9 queste pagine viaggino avanti e indietro pi\u00f9 velocemente, \u00e8 necessario raggiungere quanto segue:<\/p>\n<p><\/p>\n<ul>\n<li>In primo luogo, \u00e8 necessario lavorare in modo pi\u00f9 efficiente con la memoria.<\/li>\n<li>In secondo luogo, deve essere pi\u00f9 efficiente questa transizione, quando le pagine passano dalla memoria al disco.<\/li>\n<li>E, in terzo luogo, devono esserci buoni dischi. <\/li>\n<\/ul>\n<p><\/p>\n<p>Se avete 512 GB di memoria RAM in <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/server\/dts-dronten\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2587\">server<\/a> e tutto questo alla fine arriva su un disco rigido SATA senza alcuna cache, allora l'intero server database non si trasforma solo in una zucca, ma in una zucca con interfaccia SATA. Vi troverete a dover affrontare direttamente questo. E nulla potr\u00e0 salvarvi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/6630e445c96e94621ae670bc4aee8492.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Per quanto riguarda il primo punto sulla memoria, ci sono tre cose che possono complicare notevolmente la vita. <\/p>\n<p><\/p>\n<p>La prima di esse \u00e8 il NUMA. Il NUMA \u00e8 un meccanismo progettato per migliorare le prestazioni. A seconda del carico di lavoro, \u00e8 possibile ottimizzare diverse cose. E nella sua attuale forma, non \u00e8 particolarmente efficace per applicazioni come i database che utilizzano intensamente buffer condivisi di page cache. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/8fcf2af82a96bd1ac52fb0a36bf0b0b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In poche parole. Come si fa a capire che c'\u00e8 qualcosa di sbagliato con NUMA? Avete un rumore strano, improvvisamente qualche CPU risulta sovraccarico. Nel frattempo, analizzate le query in PostgreSQL e non notate nulla di simile. Queste query non dovrebbero consumare cos\u00ec intensamente la CPU. Riconoscerlo pu\u00f2 richiedere tempo. \u00c8 pi\u00f9 semplice seguire fin dall'inizio la raccomandazione corretta su come configurare NUMA per PostgreSQL.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/424b8677e5ae1382b9b49b288e045a3f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa succede realmente? NUMA significa Non-Uniform Memory Access. Qual \u00e8 il concetto? Avete una CPU, e nelle vicinanze c'\u00e8 la sua memoria locale. E questa memoria interconnects pu\u00f2 accedere alla memoria di altre CPU.<\/p>\n<p><\/p>\n<p>Se eseguite <code>numactl --hardware<\/code>, vedrete un lungo elenco. Tra le varie informazioni ci sar\u00e0 il campo distances. Ci saranno numeri - 10-20, qualcosa del genere. Questi numeri non sono altro che il numero di hop necessari per connettere e utilizzare questa memoria remota localmente. In generale, \u00e8 una buona idea. Questo migliora notevolmente le prestazioni in alcune situazioni di carico.<\/p>\n<p><\/p>\n<p>Immaginate di avere una CPU che prima cerca di utilizzare la propria memoria locale e poi tenta di accedere a un'altra memoria tramite interconnect per qualche operazione. E a questa CPU arriva tutto il vostro page cache di PostgreSQL \u2013 tutto, per un certo numero di gigabyte. Riceverete sempre il caso peggiore, perch\u00e9 di solito c'\u00e8 poca memoria direttamente in questo modulo. E tutta la memoria gestita passa attraverso questi interconnect. Risultato: lentissimo e frustrante. E la CPU che gestisce questo nodo \u00e8 costantemente sovraccarica. I tempi di accesso a questa memoria sono scarsi, lenti. \u00c8 proprio la situazione che non desiderate se utilizzate questo per un database. <\/p>\n<p><\/p>\n<p>Pertanto, la soluzione pi\u00f9 corretta per un database \u00e8 che il sistema operativo Linux non sappia affatto cosa stia succedendo. Deve accedere alla memoria come sarebbe normale. <\/p>\n<p><\/p>\n<p>Perch\u00e9 ci\u00f2? Apparirebbe logico il contrario. Questo succede per un motivo molto semplice: abbiamo bisogno di molta memoria per il page cache \u2013 decine, centinaia di gigabyte. <\/p>\n<p><\/p>\n<p>E se abbiamo evidenziato e memorizzato nella cache i nostri dati, allora il vantaggio dell'uso della cache sar\u00e0 significativamente maggiore rispetto ai benefici di un accesso alla memoria cos\u00ec astuto. In questo modo avremo un guadagno non comparabile rispetto a quella che sar\u00e0 una gestione pi\u00f9 efficace della memoria utilizzando NUMA.<\/p>\n<p><\/p>\n<p>Pertanto, attualmente ci sono due approcci, finch\u00e9 non arriver\u00e0 un futuro luminoso in cui il database non sapr\u00e0 autonomamente su quali CPU sta lavorando e da dove deve prelevare i dati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/218513d407ea77320057d57b447c54d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Dunque, l'approccio corretto \u00e8 disabilitare completamente NUMA<\/strong>, ad esempio, al riavvio. Nella maggior parte dei casi, i guadagni sono cos\u00ec significativi che non si pone nemmeno la questione di quale sia la soluzione migliore. <\/p>\n<p><\/p>\n<p>C'\u00e8 un'altra opzione. La utilizziamo pi\u00f9 spesso della prima, perch\u00e9 quando un cliente richiede supporto, riavviare il server \u00e8 un grande problema per lui. L\u00ec c'\u00e8 il suo business che gira. E tendono a sperimentare problemi legati a NUMA. Perci\u00f2 cerchiamo di disattivarlo in modi meno invasivi rispetto al riavvio, ma qui bisogna essere pi\u00f9 cauti nel controllare che sia effettivamente disattivato. Perch\u00e9, come dimostra l'esperienza, disattivare NUMA sul processo principale di PostgreSQL va bene, ma non \u00e8 affatto garantito che funzioni. \u00c8 necessario controllare e assicurarsi che sia davvero disattivato. <\/p>\n<p><\/p>\n<p>C'\u00e8 un buon post di Robert Haas. \u00c8 uno dei collaboratori di PostgreSQL. Uno dei principali sviluppatori di tutto il funzionamento a basso livello. E se segui i link di questo post, l\u00ec vengono raccontate diverse storie colorite su come NUMA abbia complicato la vita alle persone. Guarda, studia la checklist degli amministratori di sistema, che cosa bisogna configurare sul server affinch\u00e9 il nostro database funzioni bene. Queste impostazioni devono essere annotate e controllate, altrimenti la situazione non sar\u00e0 molto buona. <\/p>\n<p><\/p>\n<p>Vorrei sottolineare che questo riguarda tutte le impostazioni di cui parler\u00f2. Di solito, i database vengono configurati in modalit\u00e0 master-slave per garantire la resilienza. Non dimenticate di applicare queste impostazioni anche sullo slave, perch\u00e9 a un certo punto avrete un guasto e passerete allo slave, che diventer\u00e0 il master. <\/p>\n<p><\/p>\n<p>In una situazione di emergenza, quando tutto va male, il telefono suoner\u00e0 continuamente e il capo arriver\u00e0 con un grosso bastone; non avrete tempo per pensare a controllare. E i risultati potrebbero essere molto deludenti.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/d2fdda7ad4570554b0e134758295f83e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il prossimo punto riguarda le huge pages. \u00c8 difficile testare le huge pages separatamente, e non ha molto senso farlo, anche se ci sono dei benchmark capaci di farlo. Si trovano facilmente online. <\/p>\n<p><\/p>\n<p>Qual \u00e8 il punto? Avete un server non molto costoso con molta RAM, ad esempio, pi\u00f9 di 30 GB. Non state utilizzando le huge pages. Questo significa che avete sicuramente un overhead nell'uso della memoria. E questo overhead non \u00e8 affatto piacevole. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/28c3c94390a6afef815f712ac9189c2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Perch\u00e9 succede tutto ci\u00f2? E cosa sta accadendo? Il sistema operativo allocca la memoria in piccole porzioni. \u00c8 comodo e storicamente cos\u00ec. E se entriamo nei dettagli, il SO deve tradurre indirizzi virtuali in fisici. Questo processo non \u00e8 semplice, quindi il SO memorizza i risultati di questa operazione nella Translation Lookaside Buffer (TLB).<\/p>\n<p><\/p>\n<p>E poich\u00e9 il TLB \u00e8 una cache, in questa situazione sorgono tutti i problemi tipici delle cache. In primo luogo, se hai molta memoria RAM e questa \u00e8 tutta allocata in piccole porzioni, allora questo buffer diventa molto grande. E se la cache \u00e8 grande, la ricerca in essa diventa pi\u00f9 lenta. Il sovraccarico \u00e8 significativo e occupa spazio, ovvero la memoria operativa consuma ci\u00f2 che non \u00e8 corretto. Questo \u00e8 uno. <\/p>\n<p><\/p>\n<p>Due: pi\u00f9 si espande la cache in questa situazione, maggiore \u00e8 la probabilit\u00e0 di avere cache misses. L'efficienza di questa cache diminuisce rapidamente con l'aumento delle sue dimensioni. Per questo motivo, nei sistemi operativi \u00e8 stato ideato un approccio semplice. In Linux \u00e8 utilizzato da tempo. In FreeBSD \u00e8 comparso non molto tempo fa. Ma stiamo parlando di Linux. Si tratta di huge pages.<\/p>\n<p><\/p>\n<p>\u00c8 importante notare che l'idea delle huge pages \u00e8 stata inizialmente promossa da comunit\u00e0 che comprendevano Oracle e IBM, cio\u00e8 i produttori di database hanno pensato seriamente che ci\u00f2 sarebbe stato utile anche per i database. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/39a24536929fbcf551d8ba1c8e7faf32.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E come collegarlo a PostgreSQL? Innanzitutto, nel kernel di Linux devono essere abilitate le huge pages.<\/p>\n<p><\/p>\n<p>In secondo luogo, devono essere specificate esplicitamente tramite il parametro sysctl \u2013 quante sono. I numeri qui provengono da un vecchio server. Puoi calcolare quanti shared buffers hai approssimativamente, affinch\u00e9 le huge pages possano adattarsi. <\/p>\n<p><\/p>\n<p>E se l'intero server \u00e8 dedicato a PostgreSQL, un buon punto di partenza \u00e8 assegnare il 25 % della memoria RAM ai shared buffers, oppure il 75 %, se sei sicuro che la tua base di dati ci entrer\u00e0. Ecco il primo punto di partenza. Se hai 256 GB di RAM, avrai quindi 64 GB di shared buffers. Calcola approssimativamente con un certo margine \u2013 quale dovrebbe essere impostata questa cifra.<\/p>\n<p><\/p>\n<p>Fino alla versione 9.2 (se non sbaglio, dalla versione 8.2) era possibile integrare PostgreSQL con huge pages tramite una libreria di terze parti. E questo \u00e8 sempre necessario fare. Innanzitutto, \u00e8 necessario che il kernel sappia allocare correttamente le huge pages. In secondo luogo, l'applicazione che lavora con esse deve essere in grado di utilizzarle. Non pu\u00f2 farlo cos\u00ec, senza ulteriori passaggi. Poich\u00e9 PostgreSQL allocava memoria secondo lo stile system 5, questo poteva essere fatto utilizzando libhugetlbfs \u2014 questo \u00e8 il nome completo della libreria.<\/p>\n<p><\/p>\n<p>Nella versione 9.3 \u00e8 stata migliorata la gestione della memoria in PostgreSQL e si \u00e8 abbandonato il metodo system 5 per l'allocazione della memoria. Tutti erano molto felici, perch\u00e9 altrimenti si provava a far funzionare due istanze di PostgreSQL sulla stessa macchina e lui diceva che mancavano memoria condivisa. E diceva che bisognava correggere sysctl. E c'era un tale sysctl che bisognava anche riavviarsi e cos\u00ec via. Insomma, tutti furono contenti. Ma l'allocazione della memoria mmap ha rotto l'uso delle huge pages. La maggior parte dei nostri clienti utilizza grandi shared buffers. E abbiamo fortemente raccomandato di non passare alla 9.3, perch\u00e9 l\u00ec l'overhead iniziava a calcolarsi in buoni percentuali.<\/p>\n<p><\/p>\n<p>Tuttavia, la community ha prestato attenzione a questo problema e nella versione 9.4 ha notevolmente migliorato questa funzione. In 9.4 \u00e8 stato aggiunto un parametro in postgresql.conf, che consente di attivare try, on o off.<\/p>\n<p><\/p>\n<p>Try \u00e8 il parametro pi\u00f9 sicuro. All'avvio di PostgreSQL, quando viene allocata la memoria condivisa, tenta di ottenere da huge pages questa memoria. Se non riesce, torna all'allocazione standard. Se utilizzate FreeBSD o Solaris, potete impostare try, \u00e8 sempre sicuro. <\/p>\n<p><\/p>\n<p>Se \u00e8 impostato on, non si avvia semplicemente se non riesce a ottenere da huge pages. Qui entra in gioco la preferenza personale. Ma se utilizzate try, verificate che sia stata effettivamente allocata la memoria corretta, poich\u00e9 ci sono molte possibilit\u00e0 di errore. Attualmente, questa funzionalit\u00e0 funziona solo su Linux.<\/p>\n<p><\/p>\n<p>Un'ultima nota prima di procedere. Le Transparent huge pages non riguardano PostgreSQL per ora. Non possono essere utilizzate a dovere. Con le Transparent huge pages, per un carico di lavoro che richiede grandi porzioni di memoria condivisa, i vantaggi si manifestano solo con volumi molto elevati. Se hai terabyte di memoria, allora potrebbe avere importanza. Se parliamo di utilizzi pi\u00f9 quotidiani, quando hai 32, 64, 128 o 256 GB di memoria sulla macchina, allora le huge pages normali vanno bene, mentre le Transparent possono essere semplicemente disabilitate. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/18cf3ace8876e55b42e66f617a24f1bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E l'ultima cosa riguardante la memoria, sebbene non direttamente collegata alla larghezza di banda, pu\u00f2 complicare molto la situazione. L'intera capacit\u00e0 di trasferimento dati ne risentir\u00e0 se il server continua a effettuare il swap. <\/p>\n<p><\/p>\n<p>E questo sar\u00e0 molto sgradevole in diverse situazioni. Il problema principale \u00e8 che nei kernel moderni il comportamento \u00e8 leggermente diverso rispetto ai kernel Linux pi\u00f9 vecchi. \u00c8 una questione su cui \u00e8 difficile mettere i piedi, perch\u00e9 quando parliamo di lavoro con lo swap, finiamo con l'arrivo intempestivo dell'OOM-killer. E avere un OOM-killer che non arriva in tempo e termina PostgreSQL \u00e8 sgradevole. Questo si riflette su tutti, ovvero fino all'ultimo utente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c7c46ff0f4cd8cfcfb21978dd1da4c08.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa sta succedendo? Hai una grande quantit\u00e0 di memoria RAM, tutto funziona bene. Ma per qualche motivo, il server si blocca nello swap e rallenta a causa di questo. Sembrerebbe che ci sia molta memoria, eppure accade. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/24d19929f1506cd9768a836095a24dfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un tempo consigliavamo di impostare vm.swappiness a zero, ovvero di disattivare lo swap. In passato sembrava che 32 GB di RAM e i corrispondenti buffer condivisi fossero una quantit\u00e0 enorme. La funzione principale dello swap \u00e8 avere uno spazio in cui spingere i dati quando c'\u00e8 un problema. E questo non veniva pi\u00f9 eseguito. E poi, che ne fai di quei dati? \u00c8 un compito in cui non \u00e8 chiaro se lo swap sia davvero necessario, specialmente in una quantit\u00e0 cos\u00ec grande. <\/p>\n<p><\/p>\n<p>Ma nelle versioni pi\u00f9 moderne del kernel, cio\u00e8 nelle terze, il comportamento \u00e8 cambiato. E se si imposta lo swap a zero, cio\u00e8 si disattiva, prima o poi, anche con un certo quantitativo di memoria RAM rimasta, il processo OOM-killer arriver\u00e0 per uccidere i consumatori pi\u00f9 intensivi. Questo perch\u00e9 considerer\u00e0 che, con un carico di lavoro del genere, ci resta ancora poco e non uccider\u00e0 i processi di sistema, ma qualcosa di meno importante. Questo meno importante sar\u00e0 un consumatore intensivo di memoria condivisa, ovvero il postmaster. E dopo questo sar\u00e0 un bene se non sar\u00e0 necessario ripristinare il database. <\/p>\n<p><\/p>\n<p>Quindi, attualmente, se non ricordo male, la maggior parte delle distribuzioni ha un valore predefinito di circa 6, cio\u00e8 in quale momento iniziare a utilizzare lo swap in base a quanta memoria \u00e8 rimasta. <strong>Attualmente, consigliamo di impostare vm.swappiness = 1, perch\u00e9 praticamente lo disattiva, ma non produce effetti come l'arrivo inaspettato dell'OOM-killer che ha gi\u00e0 eliminato tutto.<\/strong> <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/20f01dca0aff819abcbb687cea69ac74.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa succede adesso? Quando parliamo delle performance dei database e ci avviciniamo gradualmente ai dischi, tutti si prendono la testa tra le mani. Perch\u00e9 la verit\u00e0 che i dischi sono lenti e la memoria \u00e8 veloce \u00e8 conosciuta da tutti fin dall'infanzia. Tutti sanno che ci saranno problemi di prestazioni del disco nei database.<\/p>\n<p><\/p>\n<p>Il principale problema di prestazioni di PostgreSQL, legato ai picchi dei checkpoint, non \u00e8 causato dalla lentezza del disco. Piuttosto, deriva dal fatto che la larghezza di banda della memoria e del disco non \u00e8 bilanciata. Possono essere sbilanciate in diversi modi. PostgreSQL non \u00e8 configurato correttamente, il sistema operativo non \u00e8 ottimizzato, l'hardware non \u00e8 impostato bene e l'hardware \u00e8 inadeguato. Questo problema non si verifica solo se tutto funziona come dovrebbe, cio\u00e8 se non ci sono carichi o se le configurazioni e l'hardware sono ben selezionati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/c4d841f9ed48bb5bb1b29bd9f189753f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cos'\u00e8 e come appare? Di solito, le persone che lavorano con PostgreSQL hanno affrontato questo problema pi\u00f9 volte. Lasciate che spieghi. Come accennato, PostgreSQL effettua periodicamente dei checkpoint per trasferire le pagine sporche dalla memoria condivisa al disco. Se abbiamo una grande quantit\u00e0 di memoria condivisa, i checkpoint cominciano a influenzare intensamente il disco, poich\u00e9 dumpano queste pagine tramite fsync. Arrivano nel buffer del kernel e vengono scritte sui dischi grazie a fsync. E se il volume di questa operazione \u00e8 elevato, possiamo osservare un effetto indesiderato, ovvero un utilizzo molto elevato dei dischi.<\/p>\n<p><\/p>\n<p>Qui ho due immagini. Ora spiegher\u00f2 cosa sono. Si tratta di due grafici correlati nel tempo. Il primo grafico mostra l'utilizzo del disco. Qui quasi raggiunge il 90 % in quel momento. Se il vostro database fallisce con dischi fisici e un controller RAID, un utilizzo vicino al 90 % \u00e8 una brutta notizia. Questo significa che a breve si raggiunger\u00e0 il 100 % e l'input-output si fermer\u00e0. <\/p>\n<p><\/p>\n<p>Se avete un array di dischi, la situazione \u00e8 un po' diversa. Dipende da come \u00e8 configurato, che tipo di array si tratta, ecc. <\/p>\n<p><\/p>\n<p>Parallelamente, qui \u00e8 configurato un grafico da una vista interna di postgres, che mostra come avviene il checkpoint. In verde \u00e8 evidenziata la quantit\u00e0 di buffer, queste pagine sporche che in questo momento sono arrivate in questo checkpoint per la sincronizzazione. Questa \u00e8 la cosa principale da sapere. Vediamo che qui sono arrivate molte pagine e a un certo punto siamo rimasti bloccati, cio\u00e8 abbiamo continuato a scrivere, qui chiaramente il sistema disco \u00e8 molto occupato. E il nostro checkpoint ha un forte impatto sul disco. Idealmente, la situazione dovrebbe apparire cos\u00ec, cio\u00e8 qui ci sono stati meno scritti. E possiamo risolvere questo con delle impostazioni, affinch\u00e9 in futuro rimanga cos\u00ec. Cio\u00e8, l'utilizzo \u00e8 ridotto, ma da qualche parte stiamo comunque scrivendo. <\/p>\n<p><\/p>\n<p>Cosa fare per risolvere questo problema? Se si \u00e8 fermato l'IO sotto il database, significa che tutti gli utenti che sono arrivati per eseguire le loro query dovranno aspettare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/3efac5fe79443c32f56ec8da2f418116.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se guardiamo dal punto di vista di Linux, se hai preso un buon hardware, lo hai configurato correttamente, e hai impostato PostgreSQL in modo che faccia questi checkpoint meno frequentemente, distribuendoli nel tempo, allora si fatica con le impostazioni predefinite di Debian. Per la maggior parte delle distribuzioni Linux, la situazione \u00e8 cos\u00ec: vm.dirty_ratio=20, vm.dirty_background_ratio=10.<\/p>\n<p><\/p>\n<p>Cosa significa questo? Dalla versione 2.6 del kernel \u00e8 apparso un demonio per il flushing. Pdglush dipende da chi lo utilizza, ed \u00e8 responsabile dello svuotamento in background delle pagine sporche dal buffer del kernel e dello svuotamento quando necessario, senza eccezioni per liberare le pagine sporche, quando lo svuotamento in background non \u00e8 pi\u00f9 efficace. <\/p>\n<p><\/p>\n<p>Quando avviene il background? Quando il 10% della memoria RAM totale presente sul server \u00e8 occupato da pagine sporche nel buffer del kernel, viene chiamata una funzione speciale di scrittura in background. Perch\u00e9 \u00e8 in background? Essa accetta come parametro quanti page scrivere. E, ad esempio, scrive N pagine. E per un certo periodo di tempo, questa cosa va in pausa. E poi torna e scrive ancora un certo numero di pagine. <\/p>\n<p><\/p>\n<p>\u00c8 una storia estremamente semplice. La situazione \u00e8 come quella di una piscina, dove in un tubo si versa e nell'altro si immette. Abbiamo ricevuto un checkpoint e se ha inviato poche pagine sporche per l'eliminazione, queste si assorbiranno gradualmente dal kernel buffer pgflush. <\/p>\n<p><\/p>\n<p>Se queste pagine sporche continuano ad accumularsi, si accumulano fino al 20%, dopodich\u00e9 il sistema operativo d\u00e0 priorit\u00e0 per scriverle su disco, perch\u00e9 se si interrompe l'alimentazione, avremo problemi. Ad esempio, perderemo questi dati. <\/p>\n<p><\/p>\n<p>Qual \u00e8 il trucco? <strong>Il trucco consiste nel fatto che questi parametri, nel mondo moderno, del 20 e 10% della totale memoria RAM della macchina, sono totalmente spaventosi dal punto di vista della capacit\u00e0 di qualsiasi sistema di archiviazione che possediate.<\/strong> <\/p>\n<p><\/p>\n<p>Immaginate di avere 128 GB di RAM. 12,8 GB arrivano al vostro sistema di archiviazione. E qualunque cache o array abbiate, non ce la faranno a reggere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/1e4bab2fad7d3a05dc76cdd9d153f46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Pertanto, vi consigliamo di impostare immediatamente questi valori in base alle capacit\u00e0 del vostro controller RAID.<\/strong> Qui ho subito fornito una raccomandazione per un controller che ha 512 MB di cache. <\/p>\n<p><\/p>\n<p>\u00c8 tutto molto semplice. Puoi impostare vm.dirty_background in byte. Queste impostazioni annullano le due precedenti. O utilizzi il ratio di default, oppure se attivi quelli in byte, funzioneranno quelli in byte. Ma poich\u00e9 sono un consulente DBA e lavoro con diversi clienti, cerco sempre di essere prudente; quindi, se in byte, allora in byte. Nessuno ha garantito che un buon amministratore non aggiunga memoria al server, non lo riavvii, mentre il numero rimane lo stesso. Calcola semplicemente queste cifre, per essere sicuro che tutto ci stia. <\/p>\n<p><\/p>\n<p>Cosa succede se non si riesce a entrare? \u00c8 scritto che qualsiasi flushing si ferma in modo efficace, ma in realt\u00e0 \u00e8 un modo di dire. Il sistema operativo ha un grosso problema: ha molte pagine sporche, quindi si ferma in modo efficace l'IO che generano i vostri clienti, cio\u00e8, quando un'applicazione invia una query SQL al database, essa aspetta. Qualsiasi input-output in esso ha la priorit\u00e0 pi\u00f9 bassa perch\u00e9 il database \u00e8 occupato con il checkpoint. E quando finir\u00e0 non \u00e8 chiaro. E quando raggiungete uno stato di flushing non in background, significa che tutto il vostro IO \u00e8 occupato da esso. E finch\u00e9 non termina, non farete nulla. <\/p>\n<p><\/p>\n<p>Ci sono anche altri due punti importanti che vanno oltre questa relazione. Queste impostazioni devono corrispondere alle impostazioni in postgresql.conf, cio\u00e8 le impostazioni dei checkpoint. E il vostro sistema di dischi deve essere adeguatamente configurato. <strong>Se avete una cache su RAID, deve avere una batteria.<\/strong> La gente acquista RAID con una buona cache senza batteria. <strong>Se avete SSD in RAID, devono essere server-oriented e devono avere condensatori.<\/strong> Ecco un elenco di controlli dettagliati. A questo link trovi la mia presentazione su come configurare le prestazioni del disco in PostgreSQL. L\u00ec ci sono tutte queste liste di controllo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/0ca13d550cb9eec4163f886467b2b3ea.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cosa pu\u00f2 complicare ulteriormente la vita? Ci sono due parametri. Sono relativamente nuovi. Possono essere attivati di default in diverse applicazioni. E possono rendere la vita molto pi\u00f9 difficile se non sono attivati correttamente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/35aa98d67ff1f089a751a5fd808bd1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ci sono due novit\u00e0. Sono gi\u00e0 presenti nei recenti kernel. Si tratta di sched_migration_cost in nanosecondi e sched_autogroup_enabled, che per default \u00e8 impostato su uno. <\/p>\n<p><\/p>\n<p>E come rovinano la situazione? Cosa significa sched_migration_cost? Il gestore dei processi di Linux pu\u00f2 migrare un processo da una CPU a un'altra. E per PostgreSQL, che esegue query, la migrazione su un'altra CPU non ha assolutamente senso. Dal punto di vista del sistema operativo, quando si passa da OpenOffice al terminale, potrebbe anche andare bene, ma <strong>per un database \u2013 \u00e8 molto male.<\/strong> <strong>Pertanto, \u00e8 sensato impostare migration_cost su un valore piuttosto alto, almeno alcune migliaia di nanosecondi.<\/strong> <\/p>\n<p><\/p>\n<p>Cosa significher\u00e0 questo per il scheduler? Si considerer\u00e0 che durante questo tempo il processo sia ancora attivo. Cio\u00e8, se hai qualche transazione lunga che richiede tempo, il scheduler lo comprender\u00e0. Fino a quando non scade questo timeout, non sar\u00e0 necessario migrare questo processo altrove. Se il processo sta svolgendo un'attivit\u00e0, non verr\u00e0 migrato; continuer\u00e0 a funzionare sul CPU a cui \u00e8 stato assegnato. Il risultato sar\u00e0 eccellente. <\/p>\n<p><\/p>\n<p>Il secondo aspetto \u00e8 l'autogruppo. \u00c8 una buona idea per workload specifici che non riguardano i database moderni: raggruppare i processi in base al terminale virtuale da cui sono stati avviati. Questo \u00e8 pratico per alcune attivit\u00e0. <strong>Nella pratica, PostgreSQL \u00e8 un sistema multiprocessore con prefork, avviato da un unico terminale. Avrai lock writer, checkpoint e tutte le tue richieste client saranno raggruppate su un unico scheduler, su un'unica CPU. Attendono insieme che questa si liberi, per non ostacolarsi a vicenda e rimanere occupati pi\u00f9 a lungo. Questa situazione non \u00e8 affatto necessaria in caso di questo tipo di carico di lavoro, quindi \u00e8 necessario disattivarla.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/55e829d1c1b69b7f6eaf5fc89dad30d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il mio collega Alexey Lesovski ha condotto dei test con un semplice pgbench, aumentando di un ordine di grandezza il migration_cost e disattivando l'autogroup. <strong>La differenza su hardware scadente \u00e8 stata quasi del 10%.<\/strong>C'\u00e8 una discussione nella mailing list di Postgres, dove le persone riportano i risultati di come tali modifiche abbiano influito sulla velocit\u00e0 delle query. <strong>Hanno influito sul 50%.<\/strong>Ci sono molte storie simili.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/b3d1983ec2a37f8b85129c93f2373644.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E infine, riguardo alla politica di risparmio energetico. \u00c8 positivo che ora Linux possa essere usato su un laptop, promettendo di utilizzare bene la batteria. Ma si scopre che la stessa cosa pu\u00f2 valere anche per i server. <\/p>\n<p><\/p>\n<p>Inoltre, se affittate server da qualche provider, i \"buoni\" <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/\"   title=\"provider\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1200\">provider<\/a> non si preoccupano di garantirvi prestazioni superiori. Il loro obiettivo \u00e8 massimizzare l'utilizzo dell'hardware. Pertanto, possono attivare per impostazione predefinita la modalit\u00e0 risparmio energetico del portatile sul sistema operativo.<\/p>\n<p><\/p>\n<p><strong>Se usate sul server con un database ad alta intensit\u00e0 questo sistema, la vostra scelta deve essere acpi_cpufreq + performance. Anche con ondemand avrete gi\u00e0 dei problemi.<\/strong> <\/p>\n<p><\/p>\n<p>Intel_pstate \u2013 \u00e8 un driver leggermente diverso. Attualmente, si preferisce questo, in quanto \u00e8 pi\u00f9 recente e funziona meglio.<\/p>\n<p><\/p>\n<p>Pertanto, il governor \u00e8 solo performance. Ondemand, powersave e simili non sono per voi. <\/p>\n<p><\/p>\n<p>I risultati di explain analyze PostgreSQL possono variare di diversi ordini di grandezza se attivate powersave, poich\u00e9 praticamente il CPU sar\u00e0 schedulato in modo del tutto imprevedibile.<\/p>\n<p><\/p>\n<p>Queste impostazioni possono essere attivate di default. Controllate attentamente se sono state abilitate di default. Questo pu\u00f2 essere davvero un grande problema. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. Ilya Kosmodemyansky\" src=\"\/wp-content\/uploads\/2020\/06\/ef32dafd9c8ea3403dc31c34ee2b5da8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Infine, vorrei ringraziare i ragazzi del nostro team DBA PosgreSQL-Consulting, in particolare Max Boguk e Alexey Lesovsky, che ogni giorno imparano a gestire queste questioni. Cerchiamo di fare del nostro meglio per i nostri clienti, affinch\u00e9 tutto funzioni. \u00c8 come con le istruzioni di sicurezza aeree. Qui tutto \u00e8 scritto col sangue. Ogni dado \u00e8 stato scoperto durante un problema. Sono felice di condividerli con voi.<\/p>\n<p><\/p>\n<p>Domande:<\/p>\n<p><\/p>\n<p><em>Grazie! Se, ad esempio, un'azienda desidera risparmiare e ospitare su un unico server sia il database che la logica applicativa, o se segue la tendenza attuale verso architetture a microservizi in cui PostgreSQL viene eseguito in un container. Qual \u00e8 il vantaggio? Sysctl influisce globalmente su tutto il kernel. Non ho sentito parlare di sysctl che venga virtualizzato in modo che funzioni separatamente nei container. Esistono solo cgroup e l\u00ec il controllo \u00e8 limitato. Come si pu\u00f2 convivere con questo? Oppure, se desiderate performance, allora eseguite PostgreSQL su un server fisico dedicato e ottimizzatelo?<\/em><\/p>\n<p><\/p>\n<p>Abbiamo risposto alla vostra domanda in circa tre modi. Se non si tratta di un server fisico che pu\u00f2 essere ottimizzato, state tranquilli, tutto funzioner\u00e0 bene anche senza queste impostazioni. Se la vostra carico di lavoro \u00e8 tale da richiedere queste configurazioni, arriverete a un server fisico prima di dovervi preoccupare di queste impostazioni.<\/p>\n<p><\/p>\n<p>Qual \u00e8 il problema? Se si tratta di una macchina virtuale, probabilmente avrai molti problemi, come ad esempio un'latency del disco piuttosto incoerente su molte macchine virtuali. Anche se la banda passante dei dischi \u00e8 buona, una transazione di input\/output che ha avuto problemi, che non incide molto sulla banda media, ma si verifica durante un checkpoint o durante la scrittura nel WAL, causer\u00e0 molti danni al database. E lo noterai prima di affrontare questi problemi. <\/p>\n<p><\/p>\n<p>Se hai NGINX sullo stesso server, avrai lo stesso problema. Si contenderanno la memoria condivisa. E non arriverai ai problemi descritti qui.<\/p>\n<p><\/p>\n<p>D'altra parte, alcuni di questi parametri saranno comunque rilevanti per te. Ad esempio, impostare dirty_ratio con sysctl per non avere un valore eccessivo \u2013 in ogni caso questo aiuter\u00e0. In ogni caso, avrai interazioni con il disco. E seguiranno uno schema errato. Questi sono i parametri default che ho mostrato. In ogni caso, \u00e8 meglio modificarli. <\/p>\n<p><\/p>\n<p>Ci possono essere problemi con NUMA. VmWare, ad esempio, funziona bene con NUMA con impostazioni esattamente opposte. Qui si deve scegliere: server fisico o non fisico. <\/p>\n<p><\/p>\n<p><em>Ho una domanda riguardo ad Amazon AWS. Hanno immagini preimpostate. Una di queste si chiama Amazon RDS. Ci sono impostazioni personalizzate per il loro sistema operativo?<\/em><\/p>\n<p><\/p>\n<p>Ci sono impostazioni, ma sono impostazioni diverse. Qui configuriamo il sistema operativo dal punto di vista di come il database utilizzer\u00e0 il tutto. L\u00ec ci sono parametri che determinano la direzione in cui dobbiamo andare, un tipo di shaping. Cio\u00e8, abbiamo bisogno di queste risorse, e ora le consumeremo. Dopo di che, Amazon RDS integra queste risorse e l\u00ec la performance diminuisce. Ci sono storie su come le persone iniziano a lavorare su questo. A volte anche con successo. Ma ci\u00f2 non riguarda le impostazioni del sistema operativo. \u00c8 come fare hacking sul cloud. \u00c8 un'altra storia.<\/p>\n<p><\/p>\n<p><em>Perch\u00e9 le Transparent huge pages non producono effetti rispetto a Huge TLB?<\/em><\/p>\n<p><\/p>\n<p>Non lo danno. Si pu\u00f2 spiegare in molti modi, ma di fatto non lo danno. Qual \u00e8 la storia di PostgreSQL? All'avvio, riserva un grande pezzo di memoria condivisa. Se sono trasparenti o meno \u00e8 completamente irrilevante. Il fatto che vengano allocati all'avvio spiega tutto. E se c'\u00e8 molta memoria e bisogna ristrutturare il segmento di memoria condivisa, allora le Transparent huge pages diventano rilevanti. In PostgreSQL, questa memoria \u00e8 semplicemente allocata in un grande blocco all'avvio e basta, e poi non succede nulla di particolare. Si pu\u00f2 usare, certo, ma c'\u00e8 il rischio di ottenere una corruzione della memoria condivisa quando viene riallocato qualcosa. PostgreSQL non sa niente di questo.<\/p>\n<p>Fonte: <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 4.9.10 - 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 \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\" \/>\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\/it\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47 Ottimizzazione di Linux per migliorare le prestazioni di PostgreSQL. \u0418\u043b\u044c\u044f \u041a\u043e\u0441\u043c\u043e\u0434\u0435\u043c\u044c\u044f\u043d\u0441\u043a\u0438\u0439 | ProHoster","description":"Trascrizione della relazione di Ilya Kosmodemyansky del 2015 \"Tuning di Linux per migliorare le prestazioni di PostgreSQL\" Disclaimer: Nota che questa relazione \u00e8 datata novembre 2015 \u2014 sono passati pi\u00f9 di 4 anni e molto tempo da allora. La versione discussa nella relazione, 9.4, non \u00e8 pi\u00f9 supportata. Negli ultimi 4 anni sono stati rilasciati 5 nuove versioni di PostgreSQL e 15 versioni del kernel Linux. Se si dovesse riscrivere.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/linux-tuning-to-improve-postgresql-performance-ilya-kosmodemyanskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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 \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/84082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=84082"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/84082\/revisions"}],"predecessor-version":[{"id":159869,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/84082\/revisions\/159869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/84083"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=84082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=84082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=84082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}