Un approcciu industriale per tuning PostgreSQL: esperimenti cù basa di dati. Nikolay Samokhvalov

Vi cunsigliu di leghje a trascrizione di u rapportu di Nikolai Samokhvalov "Approccio industriale à tuning PostgreSQL: esperimenti nantu à basa di dati"

Shared_buffers = 25% - hè assai o pocu? O ghjustu ghjustu? Cumu sapete se sta raccomandazione - piuttostu obsoleta - hè adatta in u vostru casu particulare?

Hè u tempu di avvicinà u prublema di selezziunate i paràmetri postgresql.conf "cum'è un adultu". Micca cù l'aiutu di "tuners auto" ciechi o cunsiglii obsoleti da articuli è blog, ma basatu nantu à:

  1. esperimenti strettamente verificati nantu à e basa di dati, realizati automaticamente, in quantità maiò è in cundizioni u più vicinu pussibule à "combattimenti";
  2. cunniscenza prufonda di e caratteristiche di u DBMS è OS.

Utilizà Nancy CLI (https://gitlab.com/postgres.ai/nancy), fighjemu un esempiu specificu - i famusi shared_buffers - in diverse situazioni, in diversi prughjetti è pruvate à scopre cumu sceglie u paràmetru ottimale per a nostra infrastruttura, basa di dati è carica.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Parleremu di esperimenti cù basa di dati. Questa hè una storia chì dura pocu più di sei mesi.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Un pocu di mè. Esperienza cù Postgres per più di 14 anni. Una quantità di cumpagnie di rete suciale anu fundatu. Postgres era è hè utilizatu in ogni locu.

Ancu u gruppu RuPostgres nantu à Meetup, 2u postu in u mondu. Avvicinemu pianu pianu à 2 000 persone. RuPostgres.org.

È à i PC di diverse cunferenze, cumprese Highload, sò rispunsevuli di basa di dati, in particulare Postgres da u principiu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È in l'ultimi anni, aghju riavviatu a mo pratica di cunsultazione Postgres 11 fusi orari da quì.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È quandu aghju fattu questu uni pochi anni fà, aghju avutu una pausa in u travagliu manuale attivu cù Postgres, probabilmente da u 2010. Eru surprised quantu pocu a rutina di travagliu di un DBA hà cambiatu, è quantu u travagliu manuale hè ancu bisognu di utilizà. È aghju pensatu immediatamente chì qualcosa era sbagliatu quì, aghju bisognu di automatizà più di tuttu.

E postu chì era tuttu remota, a maiò parte di i clienti eranu in i nuvuli. È assai hè digià automatizatu, ovviamente. Più nantu à questu dopu. Questu hè, tuttu questu risultatu in l'idea chì ci deve esse una quantità di strumenti, vale à dì, un tipu di piattaforma chì automatizà quasi tutte l'azzioni DBA in modu chì un gran numaru di basa di dati pò esse amministratu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Stu rapportu ùn includerà micca:

  • "Ballets d'argentu" è dichjarazioni cum'è - stabilisce 8 GB o 25% shared_buffers è sarete bè. Ùn ci sarà assai di shared_buffers.
  • Hardcore "innards".

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Chì succede ?

  • Ci saranu principii di ottimisazione chì applichemu è sviluppemu. Ci seranu ogni tipu d'idee chì nascenu in u caminu è diversi arnesi chì creemu per a maiò parte in Open Source, vale à dì facemu a basa in Open Source. Inoltre, avemu i biglietti, tutta a cumunicazione hè praticamente Open Source. Pudete vede ciò chì facemu avà, ciò chì serà in a prossima versione, etc.
  • Ci sarà ancu una certa sperienza in l'usu di sti principii, sti arnesi in una quantità di cumpagnie: da e piccule startups à e grande imprese.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Cumu si sviluppa tuttu questu?

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Prima, u compitu principale di un DBA, in più di assicurà a creazione di istanze, implementazione di backups, etc., hè di truvà colli di bottiglia è ottimisà u rendiment.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Avà hè stallatu cusì. Fighjemu u monitoraghju, vedemu qualcosa, ma ci mancanu qualchi dettagli. Cuminciamu à scavà più cun cura, di solitu cù e nostre mani, è capisce ciò chì fà cun ellu in un modu o un altru.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È ci sò dui approcci. Pg_stat_statements hè a suluzione predeterminata per identificà e dumande lente. È l'analisi di i logs Postgres cù pgBadger.

Ogni approcciu hà svantaghji seri. In u primu approcciu, avemu cacciatu tutti i paràmetri. È se vedemu i gruppi SELECT * FROM table induve a colonna hè uguali à u "?" o "$" da Postgres 10. Ùn sapemu micca s'ellu hè un index scan o un seq scan. Si dipende assai di u paràmetru. Se sustituisci un valore raramente incontratu quì, serà una scansione d'indici. Se sustituisci un valore chì occupa u 90% di a tavula quì, u seq scan serà evidenti, perchè Postgres cunnosce e statistiche. È questu hè un grande svantaghju di pg_stat_statements, ancu s'ellu ci hè un travagliu in corso.

U più grande svantaghju di l'analisi di log hè chì ùn pudete micca permette "log_min_duration_statement = 0" in regula. È parleremu ancu di questu. Per quessa, ùn vede micca tutta a stampa. E qualchì dumanda, chì hè assai veloce, pò cunsumà una quantità enorme di risorse, ma ùn a vede micca perchè hè sottu à u vostru limitu.

Cumu DBA risolve i prublemi chì trovanu?

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Per esempiu, avemu trovu qualchi prublema. Chì hè di solitu fattu? Sè vo site un sviluppatore, allora farete qualcosa in qualchì esempiu chì ùn hè micca a stessa dimensione. Sè vo site un DBA, allora avete staging. È ci pò esse solu unu. È era sei mesi daretu. È pensate chì andarè à a pruduzzione. E ancu i DBA sperimentati poi verificate in a produzzione, nantu à una replica. È succede chì creanu un indici tempuranee, assicuratevi chì aiuta, abbandunà è dà à i sviluppatori per ch'elli ponu mette in i schedarii di migrazione. Questu hè u tipu di sciocchezza chì succede avà. È questu hè un prublema.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

  • Tune cunfigurazioni.
  • Optimizà u settore di indici.
  • Cambia a dumanda SQL stessu (questu hè u modu più difficiule).
  • Aghjunghje capacità (a manera più faciule in a maiò parte di i casi).

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Ci sò assai cose cù queste cose. Ci hè assai manichi in Postgres. Ci hè assai da sapè. Ci sò parechji indici in Postgres, grazia ancu à l'urganizatori di sta cunferenza. È tuttu ciò chì deve esse cunnisciutu, è questu hè ciò chì face chì i non-DBA si sentenu chì i DBA praticanu a magia negra. Questu hè, avete bisognu di studià per 10 anni per cumincià à capisce tuttu questu nurmale.

È sò un cumbattimentu contr'à sta magia negra. Vogliu fà tuttu ciò chì ci hè tecnulugia, è ùn ci hè micca intuizione in tuttu questu.

Esempii di a vita reale

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Aghju osservatu questu in almenu dui prughjetti, cumpresu u mo propiu. Un altru post di blog ci dice chì un valore di 1 per default_statistict_target hè bonu. Va bè, pruvemu in pruduzzione.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È quì simu, utilizendu u nostru strumentu dui anni dopu, cù l'aiutu di esperimenti nantu à e basa di dati chì avemu parlatu oghje, pudemu paragunà ciò chì era è ciò chì hè diventatu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È per questu avemu bisognu di creà un esperimentu. Hè custituitu di quattru parti.

  • U primu hè l'ambiente. Avemu bisognu di un pezzu di hardware. È quandu vene à qualchì cumpagnia è firmà un cuntrattu, li dicu per dà u stessu hardware cum'è in a produzzione. Per ognunu di i vostri Maestri, aghju bisognu di almenu un pezzu di hardware cum'è questu. O questu hè una macchina virtuale d'istanza in Amazon o Google, o aghju bisognu esattamente u stessu pezzu di hardware. Questu hè, vogliu ricreà l'ambiente. È in u cuncettu di l'ambiente includemu a versione maiò di Postgres.
  • A seconda parte hè l'ughjettu di a nostra ricerca. Questa hè una basa di dati. Pò esse creatu in parechje manere. Vi mustraraghju cumu.
  • A terza parte hè a carica. Questu hè u mumentu più difficiule.
  • È a quarta parte hè ciò chì avemu verificatu, vale à dì ciò chì avemu da paragunà cù ciò chì. Diciamu chì pudemu cambià unu o più paràmetri in a cunfigurazione, o pudemu creà un indice, etc.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Lancemu un esperimentu. Eccu pg_stat_statements. A manca hè ciò chì hè accadutu. À a diritta - ciò chì hè accadutu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

À a manca default_statistics_target = 100, à a diritta = 1 000. Avemu vistu chì questu ci hà aiutatu. In generale, tuttu hè megliu da 8%.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Ma se scrollemu, ci saranu gruppi di richieste da pgBadger o da pg_stat_statements. Ci sò dui ozzione. Videremu chì una certa dumanda hè cascata da 88%. È quì vene l'approcciu di l'ingegneria. Pudemu scavà più in l'internu perchè ci dumandemu perchè hè affundatu. Avete bisognu di capisce ciò chì hè accadutu cù e statistiche. Perchè più buckets in statistiche portanu à risultati peghju.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

O ùn pudemu micca scavà, ma fate "ALTER TABLE ... ALTER COLUMN" è rinvià 100 buckets à e statistiche di sta colonna. E poi cun un altru esperimentu pudemu assicurà chì stu patch hà aiutatu. Tuttu. Questu hè un accostu di l'ingegneria chì ci aiuta à vede u big picture è à piglià decisioni basati nantu à e dati piuttostu cà nantu à l'intuizione.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Un paru di esempi da altre zone. Ci sò stati testi CI in teste per parechji anni. È nisun prughjettu in a so mente sana camparebbe senza teste automatizate.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

In altri industrii: in l'aviazione, in l'industria di l'automobile, quandu testemu l'aerodinamica, avemu ancu l'uppurtunità di fà esperimenti. Ùn lanceremu micca qualcosa da un disegnu direttamente in u spaziu, o ùn pigliaremu micca immediatamente una vittura nantu à a pista. Per esempiu, ci hè un tunnel di ventu.

Pudemu tirà cunclusioni da l'osservazioni di altre industrie.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Prima, avemu un ambiente speciale. Hè vicinu à a pruduzzione, ma micca vicinu. A so caratteristica principale hè chì deve esse prezzu, ripetibile è automatizatu quantu pussibule. È ci vole ancu esse strumenti spiciali per fà un analisi detallatu.

Hè assai prubabile, quandu avemu lanciatu un aviò è vola, avemu menu opportunità di studià ogni millimetru di a superficia di l'ala chì avemu in un tunnel di ventu. Avemu più strumenti di diagnostichi. Pudemu permette di portà più cose pisanti chì ùn pudemu micca permette di mette in un aviò in l'aria. U stessu cù Postgres. Pudemu, in certi casi, attivà a registrazione di e dumande cumpletu durante l'esperimenti. È ùn vulemu micca fà questu in a produzzione. Pudemu ancu pianificà per attivà questu utilizendu auto_explain.

È cum'è aghju dettu, un altu livellu d'automatizazione significa chì pressu u buttone è ripetite. Questu hè cumu si deve esse, cusì chì ci hè assai sperimentazione, perchè hè in flussu.

Nancy CLI - a fundazione di u "laboratoriu di basa di dati"

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È cusì avemu fattu sta cosa. Questu hè, aghju parlatu di sti idee in ghjugnu, quasi un annu fà. È avemu digià u chjamatu Nancy CLI in Open Source. Questu hè u fundamentu per custruisce un laboratoriu di basa di dati.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Nancy - Hè in Open Source, in Gitlab. Pudete dì, pudete pruvà. Aghju furnitu un ligame in i slides. Pudete cliccà nantu à ellu è serà quì aiutu in tutti i sensi.

Di sicuru, ci hè ancu assai in sviluppu. Ci sò assai idee quì. Ma questu hè qualcosa chì usemu quasi ogni ghjornu. È quandu avemu una idea - perchè hè chì quandu sguassate 40 di linee, tuttu vene à IO, allora pudemu fà un esperimentu è guardà in più detail per capisce ciò chì succede è poi pruvate à riparà in u viaghju. Vale à dì, facemu un esperimentu. Per esempiu, aghjustemu qualcosa è vede ciò chì succede à a fine. È ùn facemu micca questu in a produzzione. Questu hè l'essenza di l'idea.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Induve pò travaglià questu? Questu pò travaglià in u locu, vale à dì pudete fà in ogni locu, pudete ancu eseguisce in un MacBook. Avemu bisognu di un docker, andemu. Eccu tuttu. Pudete eseguisce in qualchì casu nantu à un pezzu di hardware, o in una macchina virtuale, in ogni locu.

È ci hè ancu l'uppurtunità di eseguisce remotamente in Amazon in EC2 Instance, in spots. È questu hè una opportunità assai bella. Per esempiu, ieri avemu realizatu più di 500 esperimenti nantu à l'istanza i3, cuminciendu cù i più ghjovani è finiscinu cù i3-16-xlarge. È 500 esperimenti ci costanu $ 64. Ogni durò 15 minuti. Questu hè, per via di u fattu chì i spots sò aduprati quì, hè assai prezzu - un scontu di 70%, a fattura per seconda di Amazon. Pudete fà assai. Pudete fà una vera ricerca.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

E trè versioni maiò di Postgres sò supportati. Ùn hè cusì difficiule di finisce alcuni vechji è ancu a nova 12a versione.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Pudemu definisce un oggettu in trè manere. Questu:

  • Dump/file sql.
  • A manera principale hè di clone u repertoriu PGDATA. Comu regula, hè pigliatu da u servitore di salvezza. Sì avete una copia di salvezza binari normale, pudete fà cloni da quì. Sì avete nuvole, allora un uffiziu in nuvola cum'è Amazon è Google farà questu per voi. Questu hè u modu più impurtante per clone a produzzione reale. Questu hè cumu si sviluppamu.
  • È l'ultimu metudu hè adattatu per a ricerca quandu vulete capisce cumu qualcosa funziona in Postgres. Questu hè pgbench. Pudete generà cù pgbench. Hè solu una opzione "db-pgbench". Tu dici à quale scala. È tuttu serà generatu in u nuvulu, cum'è dichjaratu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È carica:

  • Pudemu eseguisce a carica in un filu SQL. Questu hè u modu più primitivu.
  • È pudemu emulà a carica. È pudemu emulà prima di tuttu in a manera seguente. Avemu bisognu di cullà tutti i logs. È hè doloroso. Vi mustraraghju perchè. È usendu pgreplay avemu ghjucatu, chì hè custruitu in Nancy.
  • O un'altra opzione. A carica di l'artighjanali cusì chjamata, chì facemu cun un certu sforzu. Analizendu a nostra carica attuale nantu à u sistema di cummattimentu, tiremu i primi gruppi di richieste. È usendu pgbench pudemu emulà sta carica in u laboratoriu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

  • O duvemu fà qualchì tipu di SQL, vale à dì cuntrollemu qualchì tipu di migrazione, creanu un indice quì, eseguisce ANALAZE quì. E fighjemu ciò chì hè accadutu prima di u vacuum è dopu à u vacuum. In generale, ogni SQL.
  • O cambiamu unu o più paràmetri in a cunfigurazione. Pudemu dì di verificà, per esempiu, 100 valori in Amazon per a nostra basa di dati di terabyte. È in uni pochi d'ore avete u risultatu. In regula, vi purterà parechje ore per implementà una basa di dati di terabyte. Ma ci hè un patch in sviluppu, avemu una seria pussibile, vale à dì chì pudete sempre aduprà u listessu pgdata in u stessu servitore è verificate. Postgres riavviarà è i cache seranu resettati. È pudete guidà a carica.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

  • Un repertoriu arriva cù una mansa di schedarii diffirenti, partendu da i snapshots pgstatu***. È a cosa più interessante hè pg_stat_statements, pg_stat_kcacke. Quessi sò dui estensioni chì analizanu e dumande. È pg_stat_bgwriter cuntene micca solu statistiche di pgwriter, ma ancu nantu à u puntu di cuntrollu è cumu i backend stessi rimpiazzanu i buffer brutti. È tuttu hè interessante per vede. Per esempiu, quandu avemu stabilitu shared_buffers, hè assai interessante per vede quantu tutti rimpiazzatu.
  • I logs Postgres sò ancu ghjunti. Dui logs - un log di preparazione è un log di riproduzione di carica.
  • Una funzione relativamente nova hè FlameGraphs.
  • Inoltre, se avete usatu pgreplay o pgbench opzioni per ghjucà a carica, allora a so pruduzzioni serà nativa. È vi vede a latenza è TPS. Serà pussibule capisce cumu l'anu vistu.
  • L'infurmazione di u sistema.
  • Cuntrolli basi di CPU è IO. Questu hè più per l'istanza EC2 in Amazon, quandu vulete lancià 100 istanze identiche in un filu è eseguite 100 corse diverse, allora avete 10 000 esperimenti. È avete bisognu di assicurà chì ùn avete micca scontru una istanza difettu chì hè digià oppressa da qualchissia. L'altri sò attivi nantu à questu pezzu di hardware è avete pocu risorse. Hè megliu scaccià tali risultati. È cù l'aiutu di sysbench da Alexey Kopytov, facemu parechji cuntrolli brevi chì venenu è ponu esse paragunati cù l'altri, vale à dì chì capirete cumu si cumporta u CPU è cumu si cumporta l'IO.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Chì sò e difficultà tecniche basatu annantu à l'esempiu di e diverse cumpagnie?

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Diciamu chì vulemu ripetiri a carica vera usendu logs. Hè una bella idea s'ellu hè scrittu nantu à Open Source pgreplay. Avemu aduprà. Ma per u funziunamentu bè, duvete attivà a registrazione di e dumande cumpletu cù parametri è timing.

Ci hè parechje cumplicazioni cù a durazione è u timestamp. Sbuiteremu tutta sta cucina. A quistione principale hè s'ellu si pò permette o micca?

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408

U prublema hè chì ùn pò micca esse dispunibule. Prima di tuttu, duvete capisce quale flussu serà scrittu à u log. Se tenete pg_stat_statements, pudete aduprà sta dumanda (u ligame serà dispunibule in i slides) per capiscenu circa quanti bytes seranu scritti per seconda.

Fighjemu a durata di a dumanda. Trascuratemu u fattu chì ùn ci sò micca parametri, ma sapemu a durata di a dumanda è sapemu quante volte per seconda hè stata eseguita. Questu modu pudemu stimà circa quanti bytes per seconda. Pudemu fà un sbagliu duie volte, ma avemu da capisce definitivamente l'ordine in questu modu.

Pudemu vede chì 802 volte per seconda sta dumanda hè eseguita. È vedemu chì bytes_per sec - 300 kB / s serà scrittu più o minus. È, in regula, pudemu permette un tali flussu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Ma! U fattu hè chì ci sò diversi sistemi di logging. È u predefinitu di a ghjente hè di solitu "syslog".

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È s'è vo avete syslog, allura vi pò avè un ritrattu cum'è questu. Piglieremu pgbench, attiveremu a registrazione di e dumande è vede ciò chì succede.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Senza logging - questu hè a colonna à a manca. Avemu 161 TPS. Cù syslog - questu hè in Ubuntu 000 in Amazon, avemu 16.04 TPS. È se cambiamu à dui altri metudi di logging, allura a situazione hè assai megliu. Vale à dì, avemu aspittatu ch'ellu cadessi, ma micca in u listessu puntu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È nantu à CentOS 7, in quale ghjurnale participa ancu, trasfurmendu logs in un formatu binari per una ricerca faciule, etc., allora hè un incubo quì, abbandunemu 44 volte in TPS.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È questu hè ciò chì a ghjente vive. È spessu in l'imprese, soprattuttu grandi, questu hè assai difficiule di cambià. Se pudete alluntanassi da syslog, allora per piacè alluntanassi da ellu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

  • Evaluate IOPS è scrive u flussu.
  • Verificate u vostru sistema di logging.
  • Se a carica prughjettata hè eccessivamente grande, cunzidira u campionamentu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Avemu pg_stat_statements. Comu aghju dettu, deve esse quì. È pudemu piglià è discrive ogni gruppu di dumande in una manera speciale in un schedariu. E poi pudemu usà una funzione assai còmuda in pgbench - questu hè a capacità di inserisce parechji schedari cù l'opzione "-f".

Si capisce assai di "-f". È pudete dì cù l'aiutu di "@" à a fine chì sparte ogni schedariu deve avè. Questu hè, pudemu dì chì fate questu in u 10% di i casi, è questu in u 20%. È questu ci porta più vicinu à ciò chì vedemu in a produzzione.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Cumu avemu da capisce ciò chì avemu in pruduzzione? Chì sparte è cumu ? Questu hè un pocu di parte. Avemu un altru pruduttu postgres-checkup. Ancu una basa in Open Source. È avemu avà sviluppatu attivamente.

Hè natu per ragioni ligeramente diverse. Per ragioni chì u monitoraghju ùn hè micca abbastanza. Vale à dì, venite, fighjate à a basa, fighjate i prublemi chì esistenu. È, in regula, fate un health_check. Sè vo site un DBA espertu, allora fate health_check. Avemu vistu l'usu di l'indici, etc. Se avete OKmeter, allora grande. Questu hè un monitoraghju cool per Postgres. OKmeter.io - per piacè stallà, tuttu hè fattu assai bè quì. Hè pagatu.

Se ùn avete micca unu, allora ùn avete micca assai. In u monitoraghju, ci hè di solitu CPU, IO, è dopu cù riservazione, è questu hè tuttu. È avemu bisognu di più. Avemu bisognu di vede cumu funziona l'autovacuum, cumu funziona u checkpoint, in io avemu bisognu di separà u checkpoint da u bgwriter è da i backends, etc.

U prublema hè chì quandu aiutate una grande cumpagnia, ùn ponu micca implementà qualcosa rapidamente. Ùn ponu micca cumprà rapidamente OKmeter. Forse l'anu da cumprà in sei mesi. Ùn ponu micca furnisce rapidamente alcuni pacchetti.

È avemu avutu l'idea chì avemu bisognu di un strumentu speciale chì ùn hà micca bisognu di qualcosa per esse installatu, vale à dì chì ùn avete micca bisognu di stallà nunda in a produzzione. Installa in u vostru laptop, o in un servitore d'osservazione da induve u correrete. È analizà assai cose: u sistema operatore, u sistema di schedari, è u Postgres stessu, facendu alcune dumande di luce chì ponu esse eseguite direttamente à a produzzione è nunda ùn falla.

L'avemu chjamatu Postgres-checkup. In termini medichi, questu hè un cuntrollu di salute regulare. S'ellu hè tematicu di l'automobile, allora hè cum'è mantenimentu. Fate u mantenimentu di a vostra vittura ogni sei mesi o annu, secondu a marca. Fate mantenimentu per a vostra basa? Questu hè, fate una ricerca profonda regularmente? Si deve esse fattu. Se fate una copia di salvezza, fate un cuntrollu, questu hè micca menu impurtante.

È avemu un tali strumentu. Cuminciò à esce attivamente solu circa trè mesi fà. Hè sempre ghjovanu, ma ci hè assai.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Raccolta di i gruppi più "influenti" di dumande - rapportu K003 in Postgres-checkup

È ci hè un gruppu di rapporti K. Trè rapporti finu à quì. È ci hè un tali rapportu K003. Ci hè a cima da pg_stat_statements, ordinati per total_time.

Quandu avemu sorte i gruppi di richieste per total_time, in cima vedemu u gruppu chì carica u nostru sistema u più, vale à dì chì cunsuma più risorse. Perchè nome i gruppi di dumande? Perchè avemu cacciatu i paràmetri. Quessi ùn sò più dumande, ma gruppi di dumande, vale à dì chì sò astratti.

È s'ellu ottimisimu da u cima à u fondu, alluminemu e nostre risorse è ritarderemu u mumentu quandu avemu bisognu di aghjurnà. Questu hè un modu assai bonu per risparmià soldi.

Forsi questu ùn hè micca un modu assai bonu per piglià cura di l'utilizatori, perchè ùn pudemu micca vede casi rari, ma assai fastidiosi induve una persona aspittava 15 seconde. In tuttu, sò cusì rari chì ùn avemu micca vistu, ma avemu trattatu di risorse.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Cosa hè accadutu in sta tavula? Avemu pigliatu dui snapshots. Postgres_checkup vi darà un delta per ogni metrica: total-time, calls, rows, shared_blks_read, etc. Questu hè, u delta hè statu calculatu. U grande prublema cù pg_stat_statements hè chì ùn si ricorda micca quandu hè stata resettata. Se pg_stat_database si ricorda, allora pg_stat_statements ùn si ricorda micca. Vidite chì ci hè un numeru di 1, ma ùn sapemu da induve avemu cuntatu.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È quì sapemu, quì avemu dui snapshots. Sapemu chì u delta in questu casu era 56 seconde. Un intervallu assai cortu. Ordinatu per tempu_totale. E poi pudemu diferenze, vale à dì dividemu tutte e metriche per durata. Se dividemu ogni metrica per a durata, averemu u numeru di chjama per seconda.

Dopu, total_time per seconda hè a mo metrica preferita. Hè misurata in seconde, per seconda, vale à dì quanti sicondi hà pigliatu u nostru sistema per eseguisce stu gruppu di dumande per seconda. Se vi vede più di una seconda per seconda, significa chì avete da dà più di un core. Questa hè una metrica assai bona. Pudete capisce chì questu amicu, per esempiu, hà bisognu di almenu trè core.

Questu hè u nostru sapè fà, ùn aghju mai vistu nunda cusì in ogni locu. Per piacè nutate - questu hè una cosa assai simplice - secondu per seconda. Calchì volta, quandu u vostru CPU hè 100%, dopu una meza ora per seconda, vale à dì, avete passatu una meza ora à fà solu queste dumande.

Dopu vedemu fila per seconda. Sapemu quante fila per seconda hà tornatu.

E poi ci hè ancu una cosa interessante. Quanti shared_buffers avemu lettu per seconda da u shared_buffers stessu. I successi eranu digià quì, è avemu pigliatu e fila da u cache di u sistema operatore o da u discu. A prima opzione hè rapida, è a seconda pò esse veloce o micca, secondu a situazione.

È a seconda manera di differenziazione hè di dividisce u numeru di richieste in stu gruppu. In a seconda colonna averete sempre una dumanda divisa per dumanda. E poi hè interessante - quanti millisecondi eranu in questa dumanda. Sapemu cumu si cumporta sta dumanda in media. 101 millisecondi eranu necessarii per ogni dumanda. Questa hè a metrica tradiziunale chì avemu bisognu di capiscenu.

Quante fila hà tornatu ogni dumanda in media? Avemu vistu 8 stu gruppu torna. In media, quantu hè statu pigliatu da u cache è leghje. Avemu vistu chì tuttu hè in cache nicely. Hits solidi per u primu gruppu.

È a quarta substringa in ogni linea hè u percentuale di u tutale. Avemu chjama. Diciamu 1 000 000. È pudemu capisce chì cuntribuzione face stu gruppu. Avemu vistu chì in questu casu u primu gruppu cuntribuisce menu di 0,01%. Hè cusì, hè cusì lento chì ùn vedemu micca in a stampa generale. È u sicondu gruppu hè 5% nantu à e chjama. Questu hè, 5% di tutte e chjama sò u sicondu gruppu.

Total_time hè ancu interessante. Avemu passatu 14% di u nostru tempu di travagliu tutale nantu à u primu gruppu di dumande. È per u sicondu - 11%, etc.

Ùn andaraghju in dettagli, ma ci sò suttilità. Fighjemu un errore in a cima, perchè quandu paragunemu, i snapshots ponu float, vale à dì, alcune richieste ponu esse cascate è ùn ponu più esse prisenti in a seconda, mentre chì alcuni novi ponu appare. È quì avemu calculatu l'errore. Se vede 0, allora hè bonu. Ùn ci sò micca errori. Se a rata d'errore hè finu à u 20%, hè bè.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Allora vultemu à u nostru tema. Avemu bisognu di creà a carica di travagliu. Pigliemu da cima à fondu è andemu finu à ghjunghje à 80% o 90%. Di solitu si tratta di 10-20 gruppi. È facemu i schedarii per pgbench. Avemu aduprà casuale quì. Calchì volta questu, sfurtunatamenti, ùn funziona micca. È in Postgres 12 ci saranu più opportunità per aduprà stu approcciu.

E poi guadagnemu 80-90% in total_time in questu modu. Chì duverebbe mette dopu dopu "@"? Fighjemu à e chjama, fighjate quantu interessu ci hè è capisce chì duvemu tantu interessu quì. Da sti percentuali pudemu capisce cumu per equilibrà ognuna di i schedari. Dopu quì avemu aduprà pgbench è andemu à travaglià.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Avemu ancu K001 è K002.

K001 hè una grande stringa cù quattru substrings. Questa hè una caratteristica di tutta a nostra carica. Vede a seconda colonna è a seconda subfila. Avemu vistu chì circa unu è mezu seconde per seconda, vale à dì s'ellu ci sò dui core, allora serà bonu. Ci sarà circa 75% di capacità. È hà da travaglià cusì. Se avemu 10 core, allora seremu in generale calmu. Questu modu pudemu evaluà e risorse.

K002 hè ciò chì chjamu classi di quistione, vale à dì SELECT, INSERT, UPDATE, DELETE. È separatamente SELECT FOR UPDATE, perchè hè una serratura.

È quì pudemu cuncludi chì SELECT hè lettori ordinariu - 82% di tutte e chjama, ma à u stessu tempu - 74% in total_time. Questu hè, sò chjamati assai, ma cunsuma menu risorse.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È vultemu à a quistione: "Cumu pudemu sceglie u dirittu shared_buffers?" Aghju osservatu chì a maiò parte di i benchmarks sò basati nantu à l'idea - vedemu quale serà u throughput, vale à dì ciò chì serà u throughput. Hè generalmente misurata in TPS o QPS.

E pruvemu di sprimà quante transazzione per seconda pussibule da a vittura usendu paràmetri di sintonizazione. Eccu esattamente 311 per seconda per selezziunate.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Ma nimu conduce à u travagliu è torna in casa à piena velocità. Questu hè stupidu. U listessu cù e basa di dati. Ùn avemu micca da guidà à piena velocità, è nimu ùn hà. Nimu vive in a produzzione, chì hà 100% CPU. Eppuru, forsi qualchissia vive, ma questu ùn hè micca bonu.

L'idea hè chì di solitu conducemu à u 20 per centu di a capacità, preferibile micca più di 50%. E pruvemu à ottimisà u tempu di risposta per i nostri utilizatori sopra à tuttu. Vale à dì, duvemu turnà i nostri pomi in modu chì ci hè una latenza minima à a velocità di 20%, cundizionalmente. Questa hè una idea chì avemu ancu pruvà à aduprà in i nostri esperimenti.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

È infine, cunsiglii:

  • Assicuratevi di fà Database Lab.
  • Sè pussibule, fate nantu à dumanda in modu chì si sviluppa per un tempu - ghjucate è scaccià. Sè vo avete nuvole, allura chistu va senza dì, vale à dì hannu assai standing.
  • Siate curiosu. È se qualcosa hè sbagliatu, verificate cù esperimenti cumu si cumporta. Nancy pò esse usatu per furmà sè stessu per verificà cumu funziona a basa.
  • È mira à u tempu di risposta minimu.
  • È ùn abbiate paura di e fonti di Postgres. Quandu travagliate cù fonti, duvete sapè l'inglese. Ci sò assai cumenti, tuttu hè spiegatu quì.
  • È verificate a salute di a basa di dati regularmente, almenu una volta ogni trè mesi, manualmente, o Postgres-checkup.

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

I vostri dumanni

Grazie tante! Una cosa assai interessante.

Dui pezzi.

Iè, dui pezzi. Solu ùn aghju micca capitu bè. Quandu Nancy è eiu travagliemu, pudemu aghjustà solu un paràmetru o un gruppu sanu?

Avemu un paràmetru di cunfigurazione delta. Pudete turnà quì quant'è vo vulete in una volta. Ma avete bisognu di capisce chì quandu cambiate assai cose, pudete piglià cunclusioni sbagliate.

Iè. Perchè aghju dumandatu ? Perchè hè difficiule di fà esperimenti quandu avete solu un paràmetru. Ti stringi, vedi cumu funziona. L'aghju messu fora. Allora principia u prossimu.

Pudete strincà à u stessu tempu, ma dipende di a situazione, sicuru. Ma hè megliu pruvà una idea. Eri avemu avutu una idea. Avemu avutu una situazione assai vicinu. Ci era dui cunfigurazioni. È ùn pudemu micca capisce perchè ci era una grande diferenza. E l'idea hè ghjunta chì avete bisognu di usà a dicotomia per capisce sempre è truvà quale hè a diffarenza. Pudete immediatamente fà a mità di i paràmetri uguali, dopu un quartu, etc. Tuttu hè flexible.

È ci hè una altra quistione. U prughjettu hè ghjovanu è sviluppatu. A documentazione hè digià pronta, ci hè una descrizzione dettagliata ?

Aghju specificamente fattu un ligame à a descrizzione di i paràmetri. Ci hè. Ma assai cose ùn sò ancu quì. Cercu parsoni simili. È li truvu quandu eseguiu. Questu hè assai cool. Qualchissia hà digià travagliatu cun mè, qualchissia hà aiutatu è hà fattu qualcosa quì. È se site interessatu in questu tema, dà feedback nantu à ciò chì manca.

Una volta custruimu u laboratoriu, forse ci sarà feedback. Videmu. Grazie!

Bonghjornu! Grazie per u rapportu! Aghju vistu chì ci hè supportu Amazon. Ci hè un pianu per sustene u GSP?

Bona dumanda. Avemu cuminciatu à fà. È l'avemu congelatu per avà perchè vulemu risparmià soldi. Vale à dì, ci hè supportu cù run on localhost. Pudete creà una istanza sè stessu è travaglià in u locu. Per via, hè ciò chì facemu. Facciu questu à Getlab, quì à GSP. Ma ùn vedemu micca u puntu di fà solu una tale orchestrazione, perchè Google ùn hà micca spots economici. Ci hè ??? casi, ma anu limitazioni. Prima, anu sempre solu un scontu di 70% è ùn pudete micca ghjucà cù u prezzu quì. Nantu à i spots, aumentemu u prezzu da 5-10% per riduce a probabilità chì vi sarà cacciatu. Vale à dì, salvà spots, ma ponu esse tolti da voi in ogni mumentu. Sè vo fate un pocu più altu ch'è l'altri facenu, sarete uccisu dopu. Google hà specifiche completamente diverse. È ci hè una altra limitazione assai pessima - campanu solu per 24 ore. E qualchì volta vulemu fà un esperimentu per 5 ghjorni. Ma pudete fà questu in spots; i spots qualchì volta duranu mesi.

Bonghjornu! Grazie per u rapportu! Avete parlatu di cuntrollu. Cumu calculà l'errore stat_statements?

Assai bona dumanda. Puderaghju dimustrà è dicu in grande dettagliu. In cortu, fighjemu cumu u settore di i gruppi di richieste hè flottatu: quanti sò cascati è quanti novi sò apparsu. E poi fighjemu duie metriche: total_time è chjama, cusì ci sò dui errori. E fighjemu a cuntribuzione di i gruppi flottanti. Ci sò dui sottugruppi : quelli chì sò partuti è quelli chì sò ghjunti. Videmu quale hè a so cuntribuzione à a stampa generale.

Ùn avete micca paura chì si vulterà quì duie o trè volte durante u tempu trà i snapshots?

Questu hè, anu registratu di novu o chì ?

Per esempiu, sta dumanda hè digià stata preempted una volta, dopu hè vinutu è hè stata preempted di novu, dopu hè vinutu novu è hè statu preempted di novu. È avete calculatu qualcosa quì, è induve hè tuttu?

Bona dumanda, avemu da circà.

Aghju fattu una cosa simili. Era più simplice, sicuru, l'aghju fattu solu. Ma aghju avutu resettatu, resettate stat_statements è capisce à u mumentu di a snapshot chì ci era menu di una certa frazzioni, chì ùn hà micca righjuntu u tettu di quantu stat_statements puderia accumulà quì. È a mo capiscitura hè chì, assai prubabilmente, nunda hè statu spustatu.

Iè Iè.

Ma ùn aghju micca capitu cumu per fà in modu affidabile.

Sfortunatamente, ùn mi ricordu micca esattamente s'ellu usemu u testu di a dumanda o queryid cù pg_stat_statements è fucalizza nantu à questu. Se ci focalizemu nantu à queryid, allora in teoria paragunemu cose paragunabili.

Innò, pò esse custrettu fora parechje volte trà i snapshots è torna torna.

Cù u listessu id?

Sì.

Avemu da studià questu. Bona dumanda. Avemu bisognu di studià. Ma per avà, ciò chì vedemu hè o scrittu 0 ...

Questu hè, sicuru, un casu raru, ma aghju scuntatu quandu aghju scupertu chì stat_statemetns ponu spustà quì.

Ci ponu esse parechje cose in Pg_stat_statements. Avemu scontru u fattu chì se avete track_utility = on, allora i vostri setti sò ancu tracciati.

Iè, di sicuru.

È s'è vo avete java hibernate, chì hè aleatoriu, allura a tavola hash cumencia à esse situata quì. È appena spegne una applicazione assai caricata, finisci cù 50-100 gruppi. È tuttu hè più o menu stabile quì. Una manera di cumbatte questu hè di aumentà pg_stat_statements.max.

Iè, ma avete bisognu di sapè quantu. È in qualchì manera avemu bisognu di guardà ellu. Hè ciò chì facciu. Questu hè, aghju pg_stat_statements.max. È vecu chì à u mumentu di l'istantanea ùn avia micca ghjuntu à u 70%. Va bè, ùn avemu micca persu nunda. Resettamu. È salvemu di novu. Se a prossima snapshot hè menu di 70, allura u più prubabile ùn avete micca persu nunda di novu.

Iè. U predeterminatu hè avà 5 000. È questu hè abbastanza per parechje persone.

Di solitu sì.

Video:

PS Per mè stessu, aghju aghjustatu chì se Postgres cuntene dati cunfidenziale è ùn pò micca esse inclusu in l'ambiente di prova, allora pudete aduprà PostgreSQL Anonymizer. U schema hè apprussimatamente cusì:

Approcciu industriale à l'accordu PostgreSQL: esperimenti nantu à basa di dati." Nikolay Samokhvalov

Source: www.habr.com

Add a comment