Qasja industriale pĂ«r tuning PostgreSQL: eksperimentet mbi bazat e tĂ« dhĂ«nave». Nikolai Samokhvalov

Ju rendojë të njiheni me përmbledhjen e diskutimit të Nikolai Samokhvalovit "Qasja industriale në tuningun e PostgreSQL: eksperimente mbi bazat e të dhënave"

Shared_buffers = 25% – Ă«shtĂ« shumĂ« apo pak? Apo ndoshta Ă«shtĂ« perfekt? Si mund ta kuptoni nĂ«se kjo – njĂ« rekomandim mjaft i vjetĂ«r – i pĂ«rshtatet rastit tuaj konkret?

Ka ardhur koha të afrohemi me çështjen e përcaktimit të parametrave postgresql.conf "si të rritur". Jo me anë të "autotunerëve" të verbër apo këshillave të vjetra nga artikuj dhe blogje, por mbi bazën e:

  1. eksperimenteve të sakta mbi DB, të realizuara automatikisht, në numra të mëdhenj dhe në kushte sa më afër "luftës",
  2. njohjes së thellë të veçorive të funksionimit të DBMS dhe OS.

Duke pĂ«rdorur Nancy CLI (https://gitlab.com/postgres.ai/nancy), ne do tĂ« shqyrtojmĂ« njĂ« shembull konkret – tĂ« famshmit shared_buffers – nĂ« situata tĂ« ndryshme, nĂ« projekte tĂ« ndryshme dhe do tĂ« pĂ«rpiqemi tĂ« kuptojmĂ« se si tĂ« pĂ«rcaktojmĂ« konfigurimin optimal pĂ«r infrastrukturĂ«n tonĂ«, DB dhe ngarkesĂ«n.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Do të flasim për eksperimente mbi bazat e të dhënave. Kjo është një histori që vazhdon për më shumë se gjashtë muaj.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Pak të dhëna për veten time. Kam mbi 14 vjet përvojë me Postgres. Kam themeluar disa kompani në rrjetet sociale. Kudo është përdorur dhe përdoret Postgres.

Gjithashtu, grupi RuPostgres në Meetup, vendi i dytë në botë. Po afrohemi ngadalë drejt 2000 personave. RuPostgres.org.

Dhe në shumë konferenca, duke përfshirë Highload, unë jam përgjegjës për bazat e të dhënave, veçanërisht Postgres që nga fillimi.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe në vitet e fundit kam rinisur praktikën time të këshillimit për Postgres në 11 zona orare nga këtu.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe kur e bëra këtë disa vite më parë, pata një ndalesë të dukshme në punën manuale me Postgres, ndoshta që nga viti 2010. U habitëm se sa pak kishin ndryshuar ditët e punës së DBA-ve, sa shumë punë manuale ende është e nevojshme. Dhe menjëherë mendova se diçka nuk shkon, duhet të automatizohet më shumë.

Dhe për shkak se kjo ndodhte kryesisht në distancë, shumica e klientëve ishin në cloud. Dhe tashmë shumë është automatizuar, kjo është e qartë. Për këtë do të flasim më vonë. Kjo do të thotë se gjithçka kyçej në një ide, që duhet të kemi një mori instrumentesh, pra një platformë, e cila do të automatizonte pothuajse të gjitha veprimet e DBA-ve, në mënyrë që të mund të menaxhonim një numër të madh bazash.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Në këtë diskutim nuk do të ketë:

  • „FletĂ«t argjendi” dhe deklarata si – vendosni 8 GB ose 25% shared_buffers dhe do t'ju shkojĂ« mirĂ«. PĂ«r shared_buffers nuk do tĂ« flitet shumĂ«.
  • Hardcore „thellĂ«si”.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Po çfarë do të ketë?

  • Do tĂ« jenĂ« parime optimizimi qĂ« ne i aplikojmĂ« dhe i zhvillojmĂ«. Do tĂ« jenĂ« çdo lloj ideje qĂ« na lind nĂ« rrugĂ« dhe njĂ« mori instrumentesh qĂ« krijojmĂ« kryesisht nĂ« Open Source, pra ne krijojmĂ« njĂ« bazĂ« nĂ« Open Source. PĂ«r mĂ« tepĂ«r, kemi bileta, tĂ« gjithĂ« komunikimi Ă«shtĂ« praktikisht nĂ« Open Source. Mund tĂ« shihni se çfarĂ« po bĂ«jmĂ« tani, çfarĂ« do tĂ« jetĂ« nĂ« versionin e ardhshĂ«m, etj.
  • Do tĂ« ketĂ« gjithashtu disa pĂ«rvoja mbi pĂ«rdorimin e kĂ«tyre parimeve dhe kĂ«tyre instrumenteve nĂ« njĂ« sĂ«rĂ« kompanish: nga fillestarĂ« tĂ« vegjĂ«l deri tek kompani tĂ« mĂ«dha.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Si zhvillohet gjithçka kjo?

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Së pari, detyra kryesore e DBA-së përveç sigurisë së krijimit të instanceve, përhapjes së kopjeve të rezervës etj., është identifikimi i ngushticave dhe optimizimi i performancës.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Tani, kjo është strukturuar kështu. Ne shikojmë monitorimin, shohim diçka, na mungojnë disa detaje. Fillojmë të hetojmë më në thellësi, zakonisht me duar dhe kuptojmë se çfarë duhet të bëjmë kështu ose ashtu.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe ka dy qasje. Pg_stat_statements – zgjidhja standarde pĂ«r identifikimin e kĂ«rkesave tĂ« ngadalta. Dhe analiza e logĂ«ve tĂ« Postgres me pgBadger.

Çdo qasje ka tĂ« meta tĂ« rĂ«nda. NĂ« qasjen e parĂ« ne hedhim tĂ« gjitha parametrat. Dhe nĂ«se ne shohim grupe SELECT * FROM table where kolona Ă«shtĂ« e barabartĂ« me simbolin "?" ose "$" qĂ« nga versione Postgres 10. Ne nuk e dimĂ« – bĂ«het fjalĂ« pĂ«r njĂ« skanim indeksi apo njĂ« skanim sekondar. VĂ«rtet varet shumĂ« nga parametri. NĂ«se shton njĂ« vlerĂ« tĂ« rrallĂ«, do tĂ« jetĂ« skanim indeksi. NĂ«se fut njĂ« vlerĂ« qĂ« pĂ«rfshin 90% tĂ« tabelĂ«s, do tĂ« jetĂ« skanim sekondar, sepse Postgres di statistikĂ«n. Dhe kjo Ă«shtĂ« njĂ« mangĂ«si e madhe e pg_stat_statements, megjithatĂ« disa punĂ« po zhvillohen.

Analiza e logëve ka mangësinë më të madhe që nuk mund të lejoni "log_min_duration_statement = 0", si rregull. Dhe për këtë do të flasim gjithashtu. Për këtë arsye, nuk e shihni tërë pamjen. Dhe një kërkesë që është shumë e shpejtë, mund të konsumojë një sasi të madhe burimesh, por ju nuk do ta shihni atë, sepse është nën pragun tuaj.

Si i zgjidhin DBA-të problemet e gjetura?

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

PĂ«r shembull, gjetĂ«m njĂ« problem. ÇfarĂ« bĂ«het zakonisht? NĂ«se jeni zhvillues, do tĂ« bĂ«ni diçka nĂ« ndonjĂ« instance qĂ« nuk Ă«shtĂ« aq i madh. NĂ«se jeni DBA, keni staging. Dhe ai mund tĂ« jetĂ« vetĂ«m njĂ«. Dhe Ă«shtĂ« pas me gjashtĂ« muaj. Dhe mendoni se do tĂ« shkoni nĂ« production. Edhe DBA tĂ« pĂ«rvojshĂ«m kontrollojnĂ« pastaj nĂ« production, nĂ« replikĂ«. Dhe ndonjĂ«herĂ« krijojnĂ« njĂ« indeks tĂ« pĂ«rkohshĂ«m, e kontrollojnĂ« nĂ«se ndihmon, e heqin dhe ia dorĂ«zojnĂ« zhvilluesve pĂ«r ta futur nĂ« skedarĂ«t e migrimit. Kjo Ă«shtĂ« çfarĂ« po ndodh tani. Dhe kjo Ă«shtĂ« e keqe.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

  • TĂ« optimizoni konfigurimet.
  • TĂ« optimizoni grupin e indekseve.
  • TĂ« ndryshoni krijimin e SQL (kjo Ă«shtĂ« mĂ«nyra mĂ« e vĂ«shtirĂ«).
  • TĂ« shtoni kapacitet (mĂ«nyra mĂ« e lehtĂ« nĂ« shumicĂ«n e rasteve).

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Me këto gjëra ka shumë për të bërë. Ka shumë mundësi në Postgres. Duhet të dini shumë. Ka shumë indekse në Postgres, falë organizatorëve të kësaj konference. Dhe të gjitha këto duhet të dihen, dhe pikërisht kjo i jep ndjesinë atyre që nuk janë DBA se ata merren me magji të zezë. Pra, duhet të kaloni rreth 10 vjet për të filluar të kuptoni të gjitha këto siç duhet.

Dhe unë jam luftëtar kundër kësaj magjie të zezë. Dua të bëj gjithçka në mënyrë që të ketë teknologji, e jo intuitë në të gjitha këto.

Shembuj nga jeta

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

KĂ«tĂ« e kam vĂ«zhguar nĂ« tĂ« paktĂ«n dy projekte, pĂ«rfshirĂ« tĂ« mien. NjĂ« postim i ri nĂ« blog na tregon se vlera 1 000 pĂ«r default_statistict_target – Ă«shtĂ« e mirĂ«. MirĂ«, le tĂ« provojmĂ« nĂ« production.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe këtu ne, duke përdorur mjetin tonë dy vjet më vonë me eksperimente mbi bazat e të dhënave për të cilat po flasim sot, mund të krahasojmë çfarë ka qenë dhe çfarë është bërë.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe për këtë na nevojitet të krijojmë një eksperiment. Ai përbëhet nga katër pjesë.

  • E para – Ă«shtĂ« mjedisi. Na nevojitet harduer. Dhe kur shkoj nĂ« ndonjĂ« kompani dhe lidh njĂ« kontratĂ«, unĂ« them qĂ« tĂ« mĂ« japin harduerin e njĂ«jtĂ« si nĂ« production. PĂ«r secilin nga Master-at tuaja, mĂ« nevojitet tĂ« paktĂ«n njĂ« harduer i tillĂ«. QoftĂ« kjo njĂ« makinĂ« virtuale instance nĂ« Amazon ose nĂ« Google, ose mĂ« nevojitet pikĂ«risht njĂ« harduer i njĂ«jtĂ«. Pra, dua ta riprodhoj mjedisin. Dhe nĂ« konceptin e mjedisit pĂ«rfshijmĂ« versionin kryesor tĂ« Postgres.
  • Pjesa e dytĂ« – Ă«shtĂ« objekti i hulumtimeve tona. Kjo Ă«shtĂ« baza e tĂ« dhĂ«nave. Ajo mund tĂ« krijohet nĂ« disa mĂ«nyra. UnĂ« do tĂ« tregoj si.
  • Pjesa e tretĂ« – Ă«shtĂ« ngarkesa. Ky Ă«shtĂ« momenti mĂ« i komplikuar.
  • Dhe pjesa e katĂ«rt – Ă«shtĂ« ajo qĂ« ne kontrollojmĂ«, pra çfarĂ« do tĂ« krahasojmĂ«. Le tĂ« themi, mund tĂ« ndryshojmĂ« njĂ« ose disa parametra nĂ« konfigurim, ose mund tĂ« krijojmĂ« njĂ« indeks dhe kĂ«shtu me radhĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ne fillojmĂ« eksperimentin. Ja pg_stat_statements. Nga e majta – ajo qĂ« ishte. Nga e djathta – sidomos si Ă«shtĂ« bĂ«rĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Nga e majta default_statistics_target = 100, nga e djathta = 1 000. Shohim se na ndihmoi. Në 8% gjithçka është përmirësuar.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Por nëse rrokullisim poshtë, do të ketë grupe kërkesash nga pgBadger ose nga pg_stat_statements. Këtu ka dy variante. Ne do të shohim që ndonjë kërkesë ka rënë me 88%. Dhe këtu është një qasje inxhinierike. Ne mund të thellojmë më tej, sepse na intereson, pse ra. Duhet të kuptojmë se çfarë ndodhi me statistikën. Pse më shumë bakete në statistikë çojnë në një rezultat më të keq.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ose mund të mos thellohemi, por të bëjmë "ALTER TABLE 
 ALTER COLUMN" dhe t'i kthejmë sërish 100 bakete në statistikën e kësaj kolone. Dhe më tej, me një eksperiment, ne mund të sigurohemi se kjo zgjidhje ndihmoi. Kjo është qasje inxhinierike, që na ndihmon të shohim imazhin dhe të marrim vendime mbi të dhëna, dhe jo mbi intuitë.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Pak shembuj nga fusha të tjera. Në testime ka CI-testime për shumë vite. Dhe asnjë projekt tashmë në mendjen e shëndoshë nuk do të ekzistojë pa teste automatike.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Në fusha të tjera: në aviacion, në automobilizëm, kur testojmë aerodinamikën, ne gjithashtu kemi mundësinë të bëjmë eksperimente. Nuk do të hedhim ndonjë gjë të hartuar menjëherë në hapësirë ose nuk do të nxjerrim ndonjë makinë menjëherë në rrugë. Për shembull, ka një tunel aerodinamik.

Nga vëzhgimet në fusha të tjera, ne mund të nxjerrim përfundime.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Së pari, kemi një mjedis të specializuar. Ai është afër production, por nuk është afër. Karakteristika kryesore është se duhet të jetë i lirë, i riprodhueshëm dhe maksimalisht i automatizuar. Dhe gjithashtu duhet të kemi mjete speciale për një analizë të detajuar.

Shumë mundësi, kur hedhim avionin dhe flasim, në kemi më pak mundësi për të studiuar çdo milimetër të sipërfaqes së krahut, sesa kemi në tunelin aerodinamik. Ne kemi më shumë mjete për diagnostikim. Mund të lejojmë veten të vendosim më shumë peshë, që nuk mund ta vendosim në avion ndërsa fluturojmë. Po ashtu edhe me Postgres. Në disa raste, mund të aktivizojmë regjistrimin e plotë të kërkesave gjatë eksperimenteve. Dhe ne nuk duam ta bëjmë këtë në production. Ndoshta madje këtë do ta aktivizojmë me planet duke përdorur auto_explain.

Dhe siç thashë, niveli i lartë i automatizimit do të thotë që ne e shtypëm butonin dhe e kemi përsëritur. Kështu duhet të jetë që të ketë shumë eksperimente, që të jetë në fluks.

Nancy CLI – baza e "laboratorit tĂ« DB"

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe ja çfarë kemi bërë. Domethënë, për këto ide kam folur në qershor, gati një vit më parë. Dhe ne tashmë kemi në Open Source atë që quhet Nancy CLI. Ky është themeli për ndërtimin e laboratorit të bazës së të dhënave.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Nancy — Kjo Ă«shtĂ« nĂ« Open Source, nĂ« Gitlab. Mund ta shikoni, mund ta provoni. Kam lĂ«nĂ« njĂ« lidhje nĂ« slidet. Mund tĂ« klikoni dhe atje do tĂ« jetĂ« help pĂ«r tĂ« gjitha parametrat.

Sigurisht, aty ka shumĂ« qĂ« janĂ« ende nĂ« zhvillim. Ka shumĂ« ide. Por kjo Ă«shtĂ« diçka qĂ« ne e aplikojmĂ« nĂ« pĂ«rditshmĂ«ri. Dhe kur na vjen njĂ« ide – a çfarĂ« ndodh kur fshihet 40 000 000 rreshta dhe gjithçka pĂ«rfundon nĂ« IO, ne mund tĂ« kryejmĂ« njĂ« eksperiment dhe tĂ« shohim mĂ« nĂ« detaje, pĂ«r tĂ« kuptuar çfarĂ« po ndodh dhe pastaj tĂ« pĂ«rpiqemi ta rregullojmĂ« atĂ« nĂ« moment. DomethĂ«nĂ«, ne bĂ«jmĂ« njĂ« eksperiment. PĂ«r shembull, ndryshojmĂ« diçka dhe shohim çfarĂ« rezultati merrim. Dhe ne e bĂ«jmĂ« kĂ«tĂ« jo nĂ« prodhim. Kjo Ă«shtĂ« thelbi i ideve.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ku mund të funksionojë kjo? Mund të funksionojë lokalisht, domethënë mund ta bëni kudo, mund ta nisni edhe në MacBook. Duhet Docker, le të nisim. Dhe gjithë kjo. Mund ta nisim në ndonjë instancë në harduer, ose në një makinë virtuale, kudo.

Dhe ka gjithashtu mundĂ«sinĂ« pĂ«r ta nisur nga larg nĂ« Amazon nĂ« EC2 Instance, nĂ« spot. Dhe kjo Ă«shtĂ« njĂ« mundĂ«si shumĂ« e shkĂ«lqyer. PĂ«r shembull, dje ne kryem mbi 500 eksperimentet nĂ« instancĂ«n i3, duke filluar nga mĂ« e vogla dhe duke pĂ«rfunduar me i3-16-xlarge. Dhe na kushtuan 500 eksperimente 64 dollarĂ«. Çdo njĂ«ra zgjati 15 minuta. DomethĂ«nĂ«, pĂ«r shkak se aty pĂ«rdoren spotet, kjo Ă«shtĂ« shumĂ« e lirĂ« – zbritje 70%, tarifimi pĂ«r sekondĂ« nga Amazon. Mund tĂ« bĂ«ni shumĂ«. Mund tĂ« kryeni njĂ« studim tĂ« vĂ«rtetĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe tri versione kryesore të Postgres mbështeten. Nuk është aq e vështirë të përshtatni disa të vjetra dhe versionin e ri 12 gjithashtu.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Objektin mund ta përcaktojmë në tri mënyra. Këto janë:

  • Dump/sql-file.
  • MĂ«nyra kryesore – Ă«shtĂ« kloni i drejtorisĂ« PGDATA. NĂ« pĂ«rgjithĂ«si merret nga serveri i backup-it. NĂ«se keni backup-e binarĂ« tĂ« mira, mund tĂ« bĂ«ni klona atje. NĂ«se keni cloud, atĂ«herĂ« kjo do tĂ« bĂ«het nga kompania cloud si Amazon ose Google. Kjo Ă«shtĂ« mĂ«nyra kryesore pĂ«r klonat e prodhimit real. NĂ« kĂ«tĂ« mĂ«nyrĂ« ne po e zbatojmĂ«.
  • Dhe mĂ«nyra e fundit Ă«shtĂ« e pĂ«rshtatshme pĂ«r hulumtime, kur dĂ«shirojmĂ« tĂ« kuptojmĂ« se si funksionon diçka nĂ« Postgres. Kjo Ă«shtĂ« pgbench. Mund tĂ« gjeneroni me ndihmĂ«n e pgbench. Kjo Ă«shtĂ« thjesht njĂ« zgjedhje "db-pgbench". I thoni atij se çfarĂ« shkalle. Dhe gjithçka do tĂ« gjenerohet nĂ« cloud, siç thuhet.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe ngarkesa:

  • NgarkesĂ«n mund ta ekzekutojmĂ« nĂ« njĂ« rrjedhĂ« SQL. Kjo Ă«shtĂ« mĂ«nyra mĂ« primitive.
  • Ose mund tĂ« emulojmĂ« ngarkesĂ«n. Dhe emulimi mund tĂ« bĂ«het kryesisht nĂ« kĂ«tĂ« mĂ«nyrĂ«. Duhet tĂ« mbledhim tĂ« gjitha log-et. Dhe kjo Ă«shtĂ« e dhimbshme. Do tĂ« tregoj pse. Dhe me ndihmĂ«n e pgreplay, qĂ« Ă«shtĂ« i integruar nĂ« Nancy.
  • Ose njĂ« alternativĂ« tjetĂ«r. E ashtuquajtura ngarkesĂ« artizanal, qĂ« ne e bĂ«jmĂ« me disa pĂ«rpjekje. Duke analizuar ngarkesĂ«n tonĂ« aktuale nĂ« sistemin aktiv, ne tĂ«rheqim grupet kryesore tĂ« kĂ«rkesave. Dhe me ndihmĂ«n e pgbench mund tĂ« emulojmĂ« kĂ«tĂ« ngarkesĂ« nĂ« laborator.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

  • Ose ndoshta duam tĂ« ekzekutojmĂ« ndonjĂ« SQL, domethĂ«nĂ« kontrollojmĂ« migrimin, krijojmĂ« njĂ« indeks, pĂ«rfundojmĂ« njĂ« ANALAZE. Dhe shohim çfarĂ« ndodhi para dhe pas vakuumit. NĂ« pĂ«rgjithĂ«si, çdo SQL.
  • Ose ne nĂ« konfigurim ndryshojmĂ« njĂ« ose disa parametra. Mund tĂ« themi qĂ« tĂ« kontrollojmĂ«, pĂ«r shembull, 100 vlera nĂ« Amazon pĂ«r bazĂ«n tonĂ« njĂ« terabajt. Dhe pas disa orĂ«sh do tĂ« keni rezultatin. NĂ« pĂ«rgjithĂ«si, baza e tĂ« dhĂ«nave njĂ« terabajt do tĂ« zgjerohet pĂ«r disa orĂ«. Por nĂ« zhvillim ka njollĂ«, kemi mundĂ«si serike, domethĂ«nĂ« mund tĂ« pĂ«rdorni rendin e njĂ«jtĂ« tĂ« pgdata nĂ« tĂ« njĂ«jtin server dhe tĂ« kontrolloni. Postgres do tĂ« rindezĂ«, cache-et do tĂ« fshihen. Dhe mund tĂ« provoni ngarkesĂ«n.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

  • Vjen njĂ« direktorĂ«, nĂ« tĂ« cilĂ«n ka shumĂ« skedarĂ«, duke filluar nga snapshot-et pgstat***. Dhe aty mĂ« e rĂ«ndĂ«sishmja – janĂ« pg_stat_statements, pg_stat_kcacke. KĂ«to janĂ« dy zgjerime qĂ« analizojnĂ« kĂ«rkesat. Dhe pg_stat_bgwriter pĂ«rmban jo vetĂ«m statistikĂ«n e pgwriter, por gjithashtu informacion pĂ«r checkpoint dhe si backend-at vetĂ« shtyjnĂ« buferat e ndotura. Dhe gjithçka Ă«shtĂ« interesante pĂ«r t'u parĂ«. PĂ«r shembull, kur e konfiguroni shared_buffers, Ă«shtĂ« shumĂ« interesante tĂ« shihni sa shumĂ« janĂ« kaluar.
  • Po ashtu vijnĂ« log-et e Postgres. Dy log-e – log-u i pĂ«rgatitjes dhe log-u i ekzekutimit tĂ« ngarkesĂ«s.
  • Tipar relativisht i ri – janĂ« FlameGraphs.
  • Po tĂ« njĂ«jtĂ«n mĂ«nyrĂ«, nĂ«se keni pĂ«rdorur pgreplay ose pgbench opsionet e ngarkesĂ«s, do tĂ« keni daljen e tyre natyrale. Dhe do tĂ« shihni latencĂ«n dhe TPS-in. Do t'ju ndihmojĂ« tĂ« kuptoni si i kanĂ« parĂ« ato.
  • Informacion nĂ« lidhje me sistemin.
  • Kontrolli bazik i CPU-sĂ« dhe IO. Kjo Ă«shtĂ« mĂ« shumĂ« pĂ«r instancat EC2 nĂ« Amazon, kur dĂ«shironi tĂ« ekzekutoni 100 instanca tĂ« njĂ«jta dhe tĂ« ekzekutoni 100 teste tĂ« ndryshme, do tĂ« keni 10,000 eksperimente. Dhe duhet tĂ« siguroheni qĂ« tĂ« mos pĂ«rfshiheni me njĂ« instancĂ« tĂ« dĂ«mtuar qĂ« dikush tjetĂ«r e ka shkarkuar. NĂ« kĂ«tĂ« pajisje, tĂ« tjerĂ« janĂ« aktivizuar dhe juve ju mbetet pak burim. TĂ« tilla rezultate Ă«shtĂ« mĂ« mirĂ« t'i hidhni poshtĂ«. Dhe pikĂ«risht me ndihmĂ«n e sysbench nga Aleksei Kopytov, realizojmĂ« disa kontrole tĂ« shkurtra, tĂ« cilat vijnĂ« dhe mund tĂ« krahasohen me tĂ« tjerĂ«t, pra do tĂ« kuptoni si sillet CPU dhe si sillet IO.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

ÇfarĂ« Ă«shtĂ« e komplikuar teknikisht pĂ«rmes shembujve tĂ« ndryshĂ«m tĂ« kompanive?

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Supozoni se dëshirojmë të ripërsërisim ngarkesën reale me ndihmën e skedarëve të log. Një ide e shkëlqyer nëse është shkruar në Open Source pgreplay. Ne e përdorim. Por, për të punuar mirë, duhet të aktivizoni regjistrimin e plotë të kërkesave me parametra dhe kohë.

Ka disa vĂ«shtirĂ«si sa i pĂ«rket kohĂ«zgjatjes dhe timestamp-eve. Ne do ta lemĂ« kĂ«tĂ« pĂ«r momentin. Pyetja kryesore Ă«shtĂ« – a mund ta lejoni kĂ«tĂ« apo jo?

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

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

Problemi është se kjo mund të mos jetë e disponueshme. Duhet të kuptoni së pari se çfarë lloj fluksi do të shkruhet në log. Nëse keni pg_stat_statements, mund të përdorni këtë pyetje (linku do të jetë i disponueshëm në slidet) për të kuptuar se sa shumë byte do të shkruhen për sekondë.

Shikojmë në gjatësi të pyetjes. Në këtë rast injorojmë faktin se nuk ka parametra, por e dimë gjatësi e pyetjes dhe e dimë sa herë për sekondë ajo është ekzekutuar. Kështu, mund të bëjmë një vlerësim se sa byte do të shkruhet për sekondë. Mund të gabojmë dy herë, por rendi do ta kuptojmë me siguri në këtë mënyrë.

Mund tĂ« shohim qĂ« kjo pyetje ekzekutohet 802 herĂ« nĂ« sekondĂ«. Dhe shohim se bytes_per sec – 300 kB/s do tĂ« shkruhen plus minus. Dhe, zakonisht, ne mund ta lejojmĂ« njĂ« fluks tĂ« tillĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Por! Problemi është se ka sisteme të ndryshme regjistrimi. Dhe, në përgjithësi, njerëzit zakonisht kanë «syslog».

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe nëse keni syslog, mund të ndodheni me një pamje të tillë. Do të marrim pgbench, do të aktivizojmë regjistrimin e kërkesave dhe do të shikojmë se çfarë ndodh.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Pa regjistrim – ky Ă«shtĂ« kolona e majtĂ«. Ne kishim 161,000 TPS. Me syslog – kjo nĂ« Ubuntu 16.04 nĂ« Amazon rezulton 37,000 TPS. Dhe nĂ«se ne ndryshojmĂ« nĂ« dy metoda tĂ« tjera regjistrimi, situata Ă«shtĂ« shumĂ« mĂ« e mirĂ«. Pra, prisnim qĂ« do tĂ« bjerĂ«, por jo kaq shumĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ndërsa në CentOS 7, ku merr pjesë edhe journald, regjistrimi i logeve në formatin binar për kërkime më të lehta, atje ndodh një situatë katastrofike, me 44 herë rënie në TPS.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe kjo është diçka me të cilën përballen njerëzit. Dhe shpesh në kompanitë, veçanërisht në ato të mëdha, është shumë e vështirë të ndryshohet diçka. nëse mund të largoheni nga syslog, atëherë shkoni.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

  • VlerĂ«soni IOPS-in dhe fluksin e shkrimit.
  • Kontrolloni sistemin tuaj tĂ« regjistrimit.
  • NĂ«se ngarkesa e parashikuar Ă«shtĂ« tepĂ«r e lartĂ«, konsideroni mundĂ«sinĂ« e kampionimit.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ne kemi pg_stat_statements. Siç thashĂ«, ai duhet tĂ« jetĂ« patjetĂ«r. Dhe mund tĂ« marrim dhe tĂ« pĂ«rshkruajmĂ« çdo grup kĂ«rkesash nĂ« njĂ« skedar tĂ« veçantĂ«. Pastaj mund tĂ« pĂ«rdorim njĂ« veçori shumĂ« tĂ« rehatshme nĂ« pgbench – mundĂ«sinĂ« pĂ«r tĂ« futur disa skedare pĂ«rmes opsionit «-f».

Ai kupton shumë «-f». Dhe mund të themi me ndihmën e «@» në fund, se cila është përqindja për secilin skedar. Pra, mund të themi se ky do të ekzekutohet në 10% të rasteve, ndërsa ky në 20%. Dhe kjo do të na afrojë më afër asaj që shohim në prodhim.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Si do të kuptojmë se çfarë ka në prodhim? Cila është përqindja dhe çfarë? Këtu pak dalim nga tema. Kemi edhe një produkt tjetër postgres-checkup. Gjithashtu një bazë në Open Source. Dhe ne tani po e zhvillojmë me përkushtim.

Ai lindi pĂ«r disa arsye tĂ« tjera. PĂ«r shkak tĂ« faktit qĂ« monitorimi Ă«shtĂ« i pamjaftueshĂ«m. Pra, ju erdhni, shikoni bazĂ«n, shikoni problemet qĂ« ka. Dhe, nĂ« pĂ«rgjithĂ«si, ju bĂ«ni njĂ« kontrolle shĂ«ndeti. NĂ«se jeni njĂ« DBA me pĂ«rvojĂ«, ju bĂ«ni njĂ« kontroll shĂ«ndeti. Shikoni pĂ«rdorimin e indekseve, etj. NĂ«se keni OKmeter, atĂ«herĂ« shkĂ«lqyer. Ky Ă«shtĂ« njĂ« monitorim fantastik pĂ«r Postgres. OKmeter.io – ju lutemi, installoni atĂ«, gjithçka Ă«shtĂ« bĂ«rĂ« shumĂ« mirĂ« atje. Ai Ă«shtĂ« me pagesĂ«.

Nëse nuk e keni, zakonisht nuk keni shumë. Në monitorim zakonisht kemi CPU, IO dhe këtë me kusht, dhe asgjë më shumë. Por na nevojitet më shumë. Na nevojitet të shohim si funksionon avtokorrigjimi, si funksionon pikënisja, në io duhet të ndahen pikënisja nga bgwriter dhe nga backend-et etj.

Problemi është se kur ndihmon një kompani të madhe, ata nuk mund të implementojnë diçka shpejt. Nuk mund të blejnë shpejt OKmeter-in. Mbase do ta blejnë pas gjashtë muajsh. Nuk mund të instalohet ndonjë paketë shpejt.

Na kemi erdhi ideja se na nevojitet një mjet i veçantë, i cili nuk kërkon ndonjë instalim, pra nuk keni nevojë të instaloni asgjë në prodhim. E vendosni në laptopin tuaj, ose në serverin e vëzhgimit, nga ku do ta lanconi. Dhe ai do të analizojë shumë gjëra: sistemin operativ, sistemin e skedarëve, dhe vetë Postgres, duke bërë disa kërkesa të lehta, të cilat mund t'i dërgoni direkt në prodhim dhe asgjë nuk do të dështojë.

Ne e quajtam atë Postgres-checkup. Nëse flasim në terma mjekësorë, kjo është një kontroll i rregullt i shëndetit. Nëse e shohim nga perspektiva automobilistike, kjo është si një kontroll teknik. Ju bëni kontrollin teknik për makinën tuaj çdo gjashtë muaj apo një herë në vit, në varësi të markës. Po, a bëni kontroll teknik për bazën tuaj? Kjo është, a bëni kërkime të thella rregullisht? Kjo është e nevojshme. Nëse bëni backup, atëherë bëni edhe një kontroll, kjo është po aq e rëndësishme.

Dhe ne kemi një mjet të tillë. Ai ka filluar të zhvillohet aktivisht vetëm për tre muaj. Ai është ende i ri, por ka shumë funksionalitete.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Mblidhni grupet më "të influencueshme" të kërkesave - raporti K003 në Postgres-checkup.

Dhe aty ka një grup raportesh K. Një grup raportesh të tillë. Tani ka tre raporte. Dhe ka një raport të tillë K003. Aty është maja nga pg_stat_statements, e renditur sipas total_time.

Kur ne rendisim sipas total_time grupet e kërkesave, ne shohim një grup në krye, i cili ngarkon sistemin tonë më së shumti, pra konsumon më shumë burime. Pse e quaj grupet e kërkesave? Sepse ne e kemi hequr parametrin. Këto nuk janë më kërkesa, por grupe kërkesash, pra ato janë të abastraktuara.

Dhe nëse ne do të optimizojmë nga lart poshtë, do t'i lehtësojmë burimet tona dhe do ta shtyjmë momentin kur na duhen përmirësime. Ky është një mënyrë e shkëlqyer për të kursyer para.

Mund të mos jetë mënyra më e mirë për të kujdesur për përdoruesit, sepse ndoshta ne nuk i shohim rastet e rralla, por shumë të bezdisshme, kur dikush pret 15 sekonda. Në total ato janë aq të rralla sa që ne nuk i shohim, por ne jemi duke u marrë me burimet.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

ÇfarĂ« ndodhi nĂ« kĂ«tĂ« tabelĂ«? BĂ«mĂ« dy snapshot-e. Postgres_checkup do t'ju bĂ«jĂ« diferencĂ«n pĂ«r çdo metrikĂ«: pĂ«r total-time, calls, rows, shared_blks_read, etj. E gjitha, diferenca Ă«shtĂ« llogaritur. NjĂ« problem i madh me pg_stat_statements Ă«shtĂ« se ai nuk mban mend kur u resetua. NĂ«se pg_stat_database mban mend, pg_stat_statements nuk mban mend. Ju shihni atje numrin 1,000,000, por nuk e dimĂ« se nga e kemi llogaritur.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Por këtu ne e dimë, këtu kemi dy snapshot-e. Ne e dimë që diferenca ka qenë në këtë rast 56 sekonda. Një interval shumë i vogël. E renditëm sipas total_time. Dhe më pas mund të diferencojmë, pra ne i ndajmë të gjitha metrikat sipas kohës së gjatë. Nëse ne e ndajmë secilën metrikë me kohën e gjatë, do të kemi numrin e thirrjeve për sekondë.

MĂ« pas total_time pĂ«r sekondĂ« – kjo Ă«shtĂ« metrika ime e preferuar. Ajo matet nĂ« sekonda, nĂ« sekondĂ«, pra sa sekonda iu desh sistemit tonĂ« pĂ«r tĂ« ekzekutuar kĂ«tĂ« grup kĂ«rkesash nĂ« sekondĂ«. NĂ«se ju shihni atje mĂ« shumĂ« se njĂ« sekondĂ« nĂ« sekondĂ«, kjo do tĂ« thotĂ« se ju kishit nevojĂ« pĂ«r mĂ« shumĂ« se njĂ« bĂ«rthamĂ«. Kjo Ă«shtĂ« njĂ« metrikĂ« shumĂ« e mirĂ«. Ju mund tĂ« kuptoni se ky person, pĂ«r shembull, ka nevojĂ« pĂ«r tĂ« paktĂ«n tre bĂ«rthama.

Kjo Ă«shtĂ« noviteti ynĂ«, nuk kam parĂ« asnjĂ«herĂ« diçka tĂ« tillĂ«. VĂ«reni – kjo Ă«shtĂ« diçka shumĂ« e thjeshtĂ« – sekonda nĂ« sekondĂ«. N sometimes, kur CPU Ă«shtĂ« 100 %, ju keni gjysmĂ« ore nĂ« sekondĂ«, pra ju keni kaluar gjysmĂ« ore vetĂ«m me kĂ«to kĂ«rkesa.

Më pas shohim rreshta në sekondë. Ne e dimë se sa rreshta janë kthyer në sekondë.

Dhe më pas është gjithashtu diçka interesante. Sa shared_buffers kemi lexuar në sekondë nga shared_buffers. Goditjet tashmë ishin atje, ndërsa rreshtat i morëm nga memorieja e sistemit operativ, ose nga disku. Opcioni i parë është i shpejtë, ndërsa i dyti, ndoshta është i shpejtë, ndoshta jo, varet nga situata.

Dhe mĂ«nyra e dytĂ« e diferencimit – ne ndajmĂ« numrin e kĂ«rkesave nĂ« kĂ«tĂ« grup. NĂ« kolonĂ«n e dytĂ« gjithmonĂ« do tĂ« keni njĂ« kĂ«rkesĂ« pĂ«r tĂ« ndarĂ« me kĂ«rkesĂ«n. Dhe mĂ« pas Ă«shtĂ« interesante – sa milisekonda ishte nĂ« kĂ«tĂ« kĂ«rkesĂ«. Ne e dimĂ« se si sillet mesatarisht kjo kĂ«rkesĂ«. 101 milisekonda nevojiteshin pĂ«r çdo kĂ«rkesĂ«. Kjo Ă«shtĂ« njĂ« metrikĂ« tradicionale qĂ« na nevojitet pĂ«r kuptimin.

Sa rreshta ktheu çdo kërkesë në mesatare. Ne shohim se grupi kthen 8. Sa mesatarisht mori dhe lexoi nga cache. Ne shohim se gjithçka është e ruajtur në memory. Goditje të përgjithshme për grupin e parë.

Dhe substrati i katĂ«rt nĂ« çdo rresht – Ă«shtĂ« pĂ«rqindja e pĂ«rgjithshme. Ne kemi thirrje. Le ta themi, nĂ« 1,000,000. Dhe ne mund tĂ« kuptojmĂ« se çfarĂ« kontributi sjell ky grup. Ne shohim se nĂ« kĂ«tĂ« rast grupi i parĂ« kontribuon mĂ« pak se 0,01%. Kjo Ă«shtĂ«, ajo Ă«shtĂ« kaq e ngadalshme sa qĂ« ne nuk e shohim nĂ« pamjen e pĂ«rgjithshme. NdĂ«rsa grupi i dytĂ« – 5% nga thirrjet. Kjo Ă«shtĂ«, 5% e tĂ« gjitha thirrjeve janĂ« nga grupi i dytĂ«.

ËshtĂ« gjithashtu interesante pĂ«r total_time. PĂ«r grupin e parĂ« tĂ« kĂ«rkesave, harxhuam 14% tĂ« gjithĂ« kohĂ«s sĂ« punĂ«s. NdĂ«rsa pĂ«r tĂ« dytin – 11% etj.

Nuk do të hyj në detaje, por aty ka nuanca. Ne nxjerrim një gabim në sipërfaqe, sepse kur krahasojmë, snapshotet mund të lëkunden, dmth disa kërkesa mund të humbasin dhe në të dytin nuk mund të jenë më të pranishme, ndërsa disa mund të shfaqen të reja. Dhe aty ne llogarisim gabimin. Nëse shihni 0, atëherë është mirë. Nuk ka gabime. Nëse treguesi i gabimeve është deri në 20%, është OK.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Më pas kthehemi në temën tonë. Ne duhet të konceptojmë workload. Shkojmë nga lart poshtë derisa të mbledhim 80% ose 90%. Zakonisht kjo është 10-20 grupe. Dhe bëmë skedarët për pgbench. Atje përdorim random. Ndonjëherë, për fat të keq, kjo nuk funksionon. Dhe në Postgres 12 do të ketë më shumë mundësi për të përdorur këtë qasje.

MĂ« pas kĂ«shtu ne mbledhim 80-90% nĂ« total_time. ÇfarĂ« tĂ« vendosim mĂ« pas pas «@»? Ne shohim thirrjet, shohim sa pĂ«rqindje dhe kuptojmĂ« se kĂ«tu duhet tĂ« kemi kaq pĂ«rqindje. Nga kĂ«to pĂ«rqindje ne mund tĂ« kuptojmĂ« se si tĂ« balancojmĂ« secilin nga skedarĂ«t. Pas kĂ«saj ne pĂ«rdorim pgbench dhe fillojmĂ« tĂ« punojmĂ«.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Ka gjithashtu K001 dhe K002.

K001 – Ă«shtĂ« njĂ« varg i madh me katĂ«r nĂ«nvargje. Kjo Ă«shtĂ« karakteristika e gjithĂ« ngarkesĂ«s sonĂ«. Shihni kolonĂ«n e dytĂ« dhe nĂ«nvargun e dytĂ«. Ne shohim se rreth njĂ« sekond nĂ« sekondĂ«, dmth nĂ«se do tĂ« ketĂ« dy bĂ«rthama, do tĂ« jetĂ« mirĂ«. Do tĂ« ketĂ« rreth 75% ngarkesĂ«. Dhe kĂ«shtu do tĂ« funksionojĂ«. NĂ«se kemi 10 bĂ«rthama, do tĂ« jemi plotĂ«sisht tĂ« qetĂ«. KĂ«shtu mund tĂ« vlerĂ«sojmĂ« burimet.

K002 – kĂ«to i quaj klasat e kĂ«rkesave, dmth SELECT, INSERT, UPDATE, DELETE. Dhe veçmas SELECT FOR UPDATE, sepse ai bllokon.

Dhe kĂ«tu mund tĂ« pĂ«rfundojmĂ« se SELECT tĂ« zakonshmet lexuese – 82% e tĂ« gjitha thirrjeve, por nĂ« tĂ« njĂ«jtĂ«n kohĂ« – 74% nĂ« total_time. Pra, ato thirren shpesh, por konsumojnĂ« mĂ« pak burime.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe kthehemi nĂ« pyetjen: «Si tĂ« pĂ«rshtatim saktĂ«sisht shared_buffers?». VĂ«rej qĂ« shumica e benchmarking-ve janĂ« ndĂ«rtuar mbi idenĂ« – le tĂ« shohim se cili do tĂ« jetĂ« throughput, dmth cili do tĂ« jetĂ« kapaciteti. Ajo zakonisht matet nĂ« TPS ose QPS.

Dhe ne mundohemi të nxjerrim sa më shumë transaksione në sekondë nga makina me parametrat e tuningut. Këtu saktësisht 311 në sekondë për select.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Por askush nuk shkon në punë dhe për të rikthyer shtëpinë me makinë me shpejtësi maksimale. Kjo është e budallallëk. Ashtu është dhe me bazat e të dhënave. Ne nuk duhet të ecim me shpejtësi maksimale, askush nuk e bën këtë. Askush nuk jeton në production që ka 100% CPU. Megjithatë, ndoshta dikush jeton, por kjo nuk është e mirë.

Ideja është që zakonisht ne ecim në 20% të mundësive, preferohet të mos kalojmë 50%. Dhe ne mundohemi të optimizojmë kohën e përgjigjes për përdoruesit tanë, së pari. Pra, duhet të manovrojmë dorët tona për të pasur latency minimale në 20% shpejtësi, në parim. Kjo është një ide që ne gjithashtu mundohemi ta përdorim në eksperimentet tona.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Dhe në përfundim, rekomandimet:

  • Sigurisht, bĂ«ni Database Lab.
  • Sa mĂ« shumĂ« qĂ« tĂ« jetĂ« e mundur, bĂ«ni on demand, qĂ« tĂ« krijohet pĂ«r njĂ« periudhĂ« – luani dhe pastaj hidhni. NĂ«se keni nĂ« oblake, kjo Ă«shtĂ« e natyrshme, dmth, keni shumĂ« standing.
  • Jini kureshtarĂ«. Dhe nĂ«se diçka nuk shkon, kontrolloni me eksperimente se si sillet. Nancy mund tĂ« jetĂ« pĂ«rdorur pĂ«r tĂ« mĂ«suar veten, pĂ«r tĂ« verifikuar si funksionon baza.
  • Dhe qĂ«ndroni tĂ« fokusuar nĂ« kohĂ«n minimale tĂ« pĂ«rgjigjes.
  • Dhe mos kini frikĂ« nga burimet e Postgres. Kur punoni me burimet, duhet tĂ« dini anglisht. Atje ka shumĂ« komente, gjithçka Ă«shtĂ« shpjeguar.
  • Dhe kontrolloni shĂ«ndetin e bazĂ«s rregullisht, tĂ« paktĂ«n njĂ« herĂ« nĂ« tre muaj me duar, ose Postgres-checkup.

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Pyetje

Faleminderit shumë! Një gjë shumë interesante.

Dy gjëra.

Po, dy gjëra. Por unë nuk e kuptova plotësisht. Kur punojmë me Nancy, a mund të rregullojmë vetëm një parameter apo një grup të tërë?

Ne kemi parameterin e dëlta-konfigurimit. Mund të sjellësh sa më shumë të duash njëherësh. Por duhet të kuptosh, kur ndryshon shumë gjëra, mund të jesh në një përfundim të gabuar.

Po. Pse e pyeta? Sepse është e vështirë të kryesh eksperimente kur ke vetëm një parameter. E rregullon atë, e ke parë si punon. E vendos atë. Pastaj fillon me tjetrin.

Mund të rregullohen njëherësh, por varet nga situata, natyrisht. Por më mirë është të kontrollosh një ide. Dje na erdhi një ide. Kemi patur një situatë shumë të ngjashme. Kishim dy konfigurime. Dhe nuk mund të kuptonim pse kishte një diferencë të madhe. Dhe erdhi ideja që të përdorim dykahësinë, për të kuptuar në radhë dhe për të gjetur se çfarë është ndryshe. Mund të bëjmë menjëherë gjysmën e parametrave të njëjtë, pastaj një të katërtin, etj. Të gjitha fleksibel.

Dhe ka një pyetje tjetër. Projekti është i ri, në zhvillim. Dokumentacioni është tashmë i gatshëm, ka një përshkrim të detajuar?

E kam bĂ«rĂ« lidhjen nĂ« pĂ«rshkrimin e parametrave. Kjo Ă«shtĂ« aty. Por ka shumĂ« gjĂ«ra qĂ« akoma mungojnĂ«. Po kĂ«rkoj njerĂ«z tĂ« ngjashĂ«m. I gjej kur kam paraqitje. Kjo Ă«shtĂ« shumĂ« e mrekullueshme. Disa tashmĂ« po punojnĂ« me mua, disa ndihmuan dhe bĂ«nĂ« diçka. Dhe nĂ«se jeni tĂ« interesuar pĂ«r kĂ«tĂ« temĂ«, lutem jepni komentet tuaja – çfarĂ« mungon.

Kur të realizojmë laboratorin, ndoshta do të kemi përgjigje. Do ta shohim. Faleminderit!

Përshëndetje! Faleminderit për prezantimin! Vura re që ka mbështetje për Amazon. A është planifikuar mbështetje për GSP?

NjĂ« pyetje e mirĂ«. Kemi filluar punĂ«n. Dhe pĂ«r momentin e kemi pezulluar, sepse duam tĂ« kursejmĂ«. Pra, ka mbĂ«shtetje pĂ«rmes run on localhost. Ju mund tĂ« krijoni vetĂ« njĂ« instance dhe tĂ« punoni lokal. PĂ«r mĂ« tepĂ«r, ne ashtu e bĂ«jmĂ«. NĂ« Getlab e bĂ«j kĂ«shtu, atje nĂ« GSP. Por pĂ«r tĂ« realizuar njĂ« orkestrim tĂ« tillĂ« nuk shohim ende sens, sepse Google nuk ka oferta tĂ« lira. Aty ka ??? instances, por ato kanĂ« kufizime. SĂ« pari, ata gjithmonĂ« kanĂ« vetĂ«m 70% zbritje dhe nuk mund tĂ« luani me çmimin. Ne rrisim çmimin e spoteve me 5-10% pĂ«r tĂ« ulur probabilitetin qĂ« t'ju nxjerrin jashtĂ«. DomethĂ«nĂ«, me spote ju kurseni, por mund t'ju marrin nĂ« çdo moment. NĂ«se vendosni njĂ« çmim pak mĂ« tĂ« lartĂ« se tĂ« tjerĂ«t, mund t'ju vrasin mĂ« vonĂ«. Google ka njĂ« specifik tjetĂ«r krejtĂ«sisht. Dhe ka njĂ« kufizim qĂ« nuk Ă«shtĂ« i mirĂ« – ata jetojnĂ« vetĂ«m 24 orĂ«. E ndonjĂ«herĂ« ne duam tĂ« bĂ«jmĂ« eksperimente pĂ«r 5 ditĂ«. Por me spote kjo mund tĂ« bĂ«het, spote ndonjĂ«herĂ« jetojnĂ« pĂ«r muaj.

Përshëndetje! Faleminderit për prezantimin! Përmendët për checkup. Si llogaritni gabimet stat_statements?

Pyetje shumĂ« e mirĂ«. Mund tĂ« tregoj dhe shpjegoj shumĂ« detajisht. NĂ« shkurt – ne shikojmĂ« si evoluon grupi i kĂ«rkesave: sa u shkĂ«put dhe sa u shfaqen tĂ« reja. Pastaj shikojmĂ« dy metri: total_time dhe calls, prandaj ka dy gabime. ShikojmĂ« gjithashtu, cila Ă«shtĂ« kontributi i grupeve tĂ« shkĂ«putura. Ka dy nĂ«ngrupe: tĂ« larguara dhe tĂ« ardhura. ShikojmĂ«, cila Ă«shtĂ« kontributi i tyre nĂ« pĂ«rgjithĂ«sinĂ«.

A nuk keni frikë se ajo mund të rrotullohet dy-tre herë gjatë kohës midis snapshot-ve?

Domethënë, ata u regjistruan përsëri ose si?

Për shembull, kjo kërkesë është shtypur një herë, pastaj erdhi përsëri dhe u shtyp, pastaj përsëri erdhi dhe u shtyp. Dhe ju keni bërë disa llogaritje, dhe ku janë të gjithë ata?

Pyetje e mirë, duhet të shohim.

Unë kam bërë një gjë të ngjashme. Sigurisht më e thjeshtë, e kam bërë vetëm. Por më duhej të shlyej, të bëj një reset stat_statements dhe të orientohem në momentin e snapshot, që atje të ketë një pjesë përkatëse, që përsëri nuk është arritur në kufirin e maksimalit sa stat_statements mund të grumbullohen. Dhe unë orientohem, që me gjasë nuk është zhdukur asgjë.

Po-po.

Por si mund ta bësh ndryshe në mënyrë të besueshme, nuk e kuptoj.

MĂ« vjen keq, nuk e mbaj mend saktĂ«sisht – a pĂ«rdorim tekstin e kĂ«rkesĂ«s apo queryid me pg_stat_statements dhe nĂ« atĂ« orientohemi. NĂ«se orientohemi nĂ« queryid, atĂ«herĂ« teorikisht po krahasonim gjĂ«ra tĂ« krahasueshme.

Jo, ai mund të shtypet disa herë midis snapshot-ve dhe të vijë përsëri.

Me këtë id?

Po.

Ne do ta studiojmë këtë. Pyetje e mirë. Duhet ta studiojmë. Por për momentin, ajo që shohim është ose shkruhet 0...

Sigurisht, ky është një rast i rrallë, por jam tronditur kur mësova se stat_statements mund të shtypet.

Në Pg_stat_statements mund të ketë shumë gjëra. Ndeshim se nëse keni track_utility = e aktivizuar, atëherë kurset gjithashtu regjistrohen.

Po, sigurisht.

Dhe nëse keni java hibernate, që është rastësor, atëherë fillon të bllokohet tabela e hasheve. Dhe sapo të fikni një aplikacion shumë të ngarkuar, ju mbeteni me 50-100 grupe. Dhe aty gjithçka bëhet më shumë-më pak e stabilizuar. Një nga mënyrat për të luftuar këtë është të rrisni pg_stat_statements.max.

Po, por duhet të dini, sa. Dhe duhet të mbani ndjekje. Unë e bëj kështu. Domethënë, unë kam pg_stat_statements.max. Dhe shikoj që në momentin e snapshot nuk kam arritur më shumë se 70%. Mirë, domethënë nuk kemi humbur asgjë. Bëjmë reset. Dhe grumbullojmë përsëri. Nëse në snapshot-in tjetër është nën 70, atëherë me gjasë përsëri nuk kemi humbur asgjë.

Po. Në mënyrë të paracaktuar tani janë 5,000. Dhe shumë njerëz mjaftojnë me këtë.

Zakonisht – po.

Video:

Luaj videon

P.S. Nga vetja do të shtoja se nëse në Postgres ka të dhëna konfidenciale dhe nuk duhet të hyjnë në ambientin e testimit, atëherë mund të përdorni PostgreSQL Anonymizer. Schemi është përafërsisht si vijon:

Qasja industriale ndaj optimizimit të PostgreSQL: eksperimente mbi bazat e të dhënave". Nikolai Samokhvalov

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster