Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Kaut kad tālā nākotnē nevajadzÄ«gu datu automātiska noņemÅ”ana bÅ«s viens no svarÄ«giem DBVS uzdevumiem [1]. Tikmēr mums paÅ”iem ir jārÅ«pējas par nevajadzÄ«go datu dzÄ“Å”anu vai pārvietoÅ”anu uz lētākām uzglabāŔanas sistēmām. Pieņemsim, ka nolemjat dzēst dažus miljonus rindu. Diezgan vienkārÅ”s uzdevums, it Ä«paÅ”i, ja stāvoklis ir zināms un ir piemērots indekss. "DELETE FROM table1 WHERE col1 = :value" - kas var bÅ«t vienkārŔāks, vai ne?

Video:

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

  • Esmu Highload programmas komitejā kopÅ” pirmā gada, t.i., kopÅ” 2007. gada.

  • Un es esmu kopā ar Postgres kopÅ” 2005. gada. To izmantoja daudzos projektos.

  • Grupa ar RuPostges arÄ« kopÅ” 2007. gada.

  • Mēs esam izauguÅ”i lÄ«dz 2100+ dalÄ«bniekiem Meetup. Tā ir otrā pasaulē aiz Ņujorkas, ko ilgu laiku apsteidza Sanfrancisko.

  • Es dzÄ«voju Kalifornijā vairākus gadus. Es vairāk nodarbojos ar amerikāņu firmām, arÄ« lielajām. Viņi ir aktÄ«vi Postgres lietotāji. Un ir visādas interesantas lietas.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://postgres.ai/ ir mans uzņēmums. Mēs nodarbojamies ar tādu uzdevumu automatizÄ“Å”anu, kas novērÅ” attÄ«stÄ«bas palēninājumus.

Ja jÅ«s kaut ko darāt, tad dažreiz ap Postgres ir kaut kādi spraudņi. Pieņemsim, ka jums ir jāgaida, lÄ«dz administrators uzstādÄ«s jums testa stendu, vai arÄ« jums ir jāgaida, lÄ«dz DBA jums atbildēs. Un mēs atrodam Ŕādas vājās vietas izstrādes, testÄ“Å”anas un administrÄ“Å”anas procesā un cenÅ”amies tos novērst ar automatizācijas un jaunu pieeju palÄ«dzÄ«bu.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://www.seagate.com/files/www-content/our-story/trends/files/idc-seagate-dataage-whitepaper.pdf

Nesen biju VLDB Losandželosā. Šī ir lielākā konference par datu bāzēm. Un bija ziņojums, ka nākotnē DBVS ne tikai uzglabās, bet arī automātiski dzēsīs datus. Šī ir jauna tēma.

Zetabaitu pasaulē ir arvien vairāk datu - tas ir 1 000 000 petabaitu. Un tagad jau tiek lēsts, ka mums pasaulē ir glabāti vairāk nekā 100 zettabaiti datu. Un viņu kļūst arvien vairāk.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://vldb2019.github.io/files/VLDB19-keynote-2-slides.pdf

Un ko ar to darÄ«t? AcÄ«mredzot tas ir jānoņem. Å eit ir saite uz Å”o interesanto ziņojumu. Bet lÄ«dz Å”im tas nav ieviests DBVS.

Tie, kas prot skaitÄ«t naudu, vēlas divas lietas. Viņi vēlas, lai mēs dzÄ“Å”am, tāpēc tehniski mums vajadzētu to izdarÄ«t.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Tālāk es pastāstÄ«Å”u kādu abstraktu situāciju, kas ietver virkni reālu situāciju, t.i., sava veida apkopojums par to, kas patiesÄ«bā notika ar mani un apkārtējām datubāzēm daudzas reizes, daudzus gadus. Grābekļi ir visur un uz tiem visu laiku kāpj.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Pieņemsim, ka mums ir bāze vai vairākas bāzes, kas aug. Un daži ieraksti acÄ«mredzami ir atkritumi. Piemēram, lietotājs tur sāka kaut ko darÄ«t, bet nepabeidza. Un pēc kāda laika mēs zinām, ka Å”o nepabeigto vairs nevar uzglabāt. Tas ir, mēs vēlētos iztÄ«rÄ«t dažas atkritumu lietas, lai ietaupÄ«tu vietu, uzlabotu veiktspēju utt.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Vispār uzdevums ir automatizēt konkrētu lietu, konkrētu rindu dzÄ“Å”anu kādā tabulā.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Un mums ir tāds pieprasÄ«jums, par kuru mēs Å”odien runāsim, tas ir, par atkritumu izveÅ”anu.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Mēs lÅ«dzām to izdarÄ«t pieredzējuÅ”am izstrādātājam. ViņŔ paņēma Å”o pieprasÄ«jumu, pārbaudÄ«ja pats - viss darbojas. PārbaudÄ«ts uz iestudējuma - viss kārtÄ«bā. Izrullēts - viss darbojas. Reizi dienā palaižam - viss kārtÄ«bā.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Datubāze aug un aug. Ikdienas DELETE sāk darboties nedaudz lēnāk.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Tad saprotam, ka tagad mums ir mārketinga kompānija un trafika būs vairākas reizes lielāka, tāpēc nolemjam uz laiku apturēt nevajadzīgās lietas. Un aizmirst atgriezties.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Dažus mēneÅ”us vēlāk viņi atcerējās. Un Å”is izstrādātājs pameta darbu vai ir aizņemts ar kaut ko citu, uzdeva citam to atgriezt.

ViņŔ pārbaudÄ«ja izstrādātāju, iestudējumu - viss ir kārtÄ«bā. Dabiski, ka vēl jāsakopj tas, kas sakrājies. ViņŔ pārbaudÄ«ja, ka viss darbojas.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Kas notiek tālāk? Tad mums viss sabrÅ«k. Tā nokrÄ«t, ka kādā brÄ«dÄ« viss nokrÄ«t. Visi ir Å”okā, neviens nesaprot, kas notiek. Un tad izrādās, ka lieta bija Å”ajā DZĒST.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Kaut kas nogāja greizi? Å eit ir saraksts ar to, kas varēja noiet greizi. KurÅ” no Å”iem ir vissvarÄ«gākais?

  • Piemēram, recenzijas nebija, t.i., DBA eksperts to neskatÄ«jās. Ar pieredzējuÅ”u aci viņŔ uzreiz atrastu problēmu, turklāt viņam ir pieejams prods, kurā sakrājuÅ”ies vairāki miljoni rindu.

  • VarbÅ«t viņi kaut ko nepareizi pārbaudÄ«ja.

  • VarbÅ«t aparatÅ«ra ir novecojusi, un jums ir jājaunina Ŕī bāze.

  • Vai arÄ« kaut kas nav kārtÄ«bā ar paÅ”u datu bāzi, un mums ir jāpāriet no Postgres uz MySQL.

  • Vai varbÅ«t operācijā kaut kas nav kārtÄ«bā.

  • VarbÅ«t ir kādas kļūdas darba organizācijā un vajag kādu atlaist un pieņemt darbā labākos cilvēkus?

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

DBA pārbaudes nebija. Ja bÅ«tu DBA, viņŔ redzētu Å”os vairākus miljonus rindu un pat bez jebkādiem eksperimentiem teiktu: "Viņi to nedara." Pieņemsim, ja Å”is kods atrastos GitLab, GitHub un bÅ«tu koda pārskatÄ«Å”anas process un tas nenotiktu tā, ka bez DBA apstiprinājuma Ŕī darbÄ«ba notiktu prod, tad acÄ«mredzami DBA teiktu: ā€œTo nevar izdarÄ«t. ā€

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Un viņŔ teiktu, ka jums bÅ«s problēmas ar diska IO un visi procesi bÅ«s traki, var bÅ«t bloÄ·Ä“Å”anas, kā arÄ« jÅ«s bloķēsit autovakuumu uz dažām minÅ«tēm, tāpēc tas nav labi.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

http://bit.ly/nancy-hl2018-2

Otra kļūda - viņi pārbaudÄ«ja nevietā. Pēc tam mēs redzējām, ka prod uzkrājās daudz nevēlamo datu, bet izstrādātājam nebija uzkrāto datu Å”ajā datu bāzē, un neviens Å”o nevēlamo nav izveidojis inscenÄ“Å”anas laikā. AttiecÄ«gi bija 1 rindu, kas ātri izdevās.

Mēs saprotam, ka mūsu testi ir vāji, t.i., process, kas tiek veidots, nerodas problēmas. Adekvāts DB eksperiments netika veikts.

Ideālu eksperimentu vēlams veikt ar to paÅ”u aprÄ«kojumu. Ne vienmēr to var izdarÄ«t ar vienu un to paÅ”u aprÄ«kojumu, taču ir ļoti svarÄ«gi, lai tā bÅ«tu pilna izmēra datu bāzes kopija. Tas ir tas, ko es sludinu jau vairākus gadus. Un pirms gada es par to runāju, to visu varat noskatÄ«ties vietnē YouTube.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

VarbÅ«t mÅ«su aprÄ«kojums ir slikts? Ja paskatās, tad latentums uzlēca. Mēs esam redzējuÅ”i, ka izmantoÅ”ana ir 100%. Protams, ja tie bÅ«tu moderni NVMe diskdziņi, tad droÅ”i vien mums bÅ«tu daudz vieglāk. Un varbÅ«t mēs no tā neapgultos.

Ja jums ir mākoņi, jaunināŔanu tur var viegli veikt. Izveidotas jaunas kopijas jaunajā aparatÅ«rā. Pārslēgties. Un viss ir labi. Diezgan viegli.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Vai ir iespējams kaut kā pieskarties mazākajiem diskiem? Un Å”eit, tikai ar DBA palÄ«dzÄ«bu, mēs iedziļināmies noteiktā tēmā, ko sauc par kontrolpunktu regulÄ“Å”anu. Izrādās, ka mums nebija kontrolpunktu tÅ«ninga.

Kas ir kontrolpunkts? Tas ir jebkurā DBVS. Ja jÅ«su atmiņā ir dati, kas mainās, tie netiek uzreiz ierakstÄ«ti diskā. Informācija, ka dati ir mainÄ«ti, vispirms tiek ierakstÄ«ta priekÅ”rakstÄ«Å”anas žurnālā. Un kādā brÄ«dÄ« DBVS nolemj, ka ir pienācis laiks reālas lapas izmest diskā, lai, ja rodas kļūme, mēs varētu mazāk veikt REDO. Tā ir kā rotaļlieta. Ja mÅ«s nogalina, tad spēli sāksim no pēdējā kontrolpunkta. Un visas DBVS to Ä«steno.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Postgres iestatījumi atpaliek. Tie ir paredzēti 10-15 gadus veciem datu un darījumu apjomiem. Un kontrolpunkts nav izņēmums.

Å eit ir informācija no mÅ«su Postgres pārbaudes ziņojuma, t.i., automātiskās veselÄ«bas pārbaudes. Un Å”eit ir datubāze ar vairākiem terabaitiem. Un labi redzams, ka piespiedu kontrolpunkti gandrÄ«z 90% gadÄ«jumu.

Ko tas nozīmē? Tur ir divi iestatījumi. Kontrolpunkts var nākt pēc taimauta, piemēram, 10 minūtēs. Vai arī tas var notikt, kad ir aizpildīts diezgan daudz datu.

Un pēc noklusējuma max_wal_saze ir iestatÄ«ts uz 1 gigabaitu. Faktiski tas patieŔām notiek Postgresā pēc 300ā€“400 megabaitiem. JÅ«s esat mainÄ«jis tik daudz datu, un jÅ«su kontrolpunkts notiek.

Un, ja neviens to neregulēja, un pakalpojums auga, un uzņēmums nopelna daudz naudas, tajā ir daudz darījumu, tad kontrolpunkts nāk reizi minūtē, dažreiz ik pēc 30 sekundēm un dažreiz pat pārklājas. Tas ir diezgan slikti.

Un mums ir jāpārliecinās, ka tas notiek retāk. Tas ir, mēs varam palielināt max_wal_size. Un tas nāks retāk.

Bet mēs esam izstrādājuÅ”i veselu metodiku, kā to izdarÄ«t pareizāk, tas ir, kā pieņemt lēmumu par iestatÄ«jumu izvēli, skaidri balstoties uz konkrētiem datiem.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Attiecīgi mēs veicam divas eksperimentu sērijas datu bāzēs.

Pirmā sērija - mainām max_wal_size. Un mēs veicam apjomÄ«gu operāciju. Pirmkārt, mēs to darām pēc noklusējuma 1 gigabaita. Un mēs veicam milzÄ«gu daudzu miljonu rindu DELETE.

JÅ«s varat redzēt, cik mums tas ir grÅ«ti. Mēs redzam, ka diska IO ir ļoti slikts. Mēs skatāmies, cik WAL esam Ä£enerējuÅ”i, jo tas ir ļoti svarÄ«gi. PaskatÄ«simies, cik reizes kontrolpunkts notika. Un mēs redzam, ka tas nav labi.

Tālāk mēs palielinām max_wal_size. Mēs atkārtojam. Mēs palielinām, mēs atkārtojam. Un tik daudzas reizes. Principā 10 punkti ir labi, kur 1, 2, 4, 8 gigabaiti. Un mēs skatāmies uz konkrētas sistēmas uzvedÄ«bu. Skaidrs, ka Å”eit aprÄ«kojumam jābÅ«t kā uz prod. Jums ir jābÅ«t vienādiem diskiem, vienādam atmiņas apjomam un tiem paÅ”iem Postgres iestatÄ«jumiem.

Un tādā veidā mēs apmainīsimies ar savu sistēmu, un mēs zinām, kā DBVS uzvedīsies sliktas masas DELETE gadījumā, kā tā veiks kontrolpunktu.

Kontrolpunkts krievu valodā ir kontrolpunkti.

Piemērs: DZĒST vairākus miljonus rindu pēc indeksa, rindas ir "izkaisītas" pa lapām.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Å eit ir piemērs. Å Ä« ir kaut kāda bāze. Un ar noklusējuma iestatÄ«jumu 1 gigabaits vienumam max_wal_size, ir ļoti skaidrs, ka mÅ«su diski nonāk plauktā ierakstÄ«Å”anai. Å is attēls ir tipisks simptoms ļoti slimam pacientam, tas ir, viņŔ patieŔām jutās slikti. Un bija viena operācija, bija tikai vairāku miljonu rindu DELETE.

Ja prod ir atļauta Ŕāda darbÄ«ba, tad mēs vienkārÅ”i gulēsim, jo ā€‹ā€‹skaidrs, ka viens DELETE mÅ«s nogalina plauktā.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Tālāk, kur 16 gigabaiti, skaidrs, ka zobi jau aizgājuÅ”i. Zobi jau ir labāki, proti, klauvējam pie griestiem, bet ne tik slikti. Tur bija zināma brÄ«vÄ«ba. Labajā pusē ir ieraksts. Un operāciju skaits - otrais grafiks. Un skaidrs, ka mēs jau nedaudz vieglāk elpojam, kad 16 gigabaiti.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Un kur 64 gigabaiti var redzēt, ka tas ir kļuvis pilnīgi labāks. Jau zobi ir izteikti, ir lielākas iespējas pārdzīvot citas operācijas un kaut ko darīt ar disku.

Kāpēc tā?

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Es nedaudz iedziļināŔos detaļās, bet Ŕī tēma, kā veikt kontrolpunktu noskaņoÅ”anu, var radÄ«t veselu ziņojumu, tāpēc es neielādÄ“Å”u daudz, bet es nedaudz ieskicētu, kādas grÅ«tÄ«bas ir.

Ja kontrolpunkts notiek pārāk bieži, un mēs atjaunojam savas rindas nevis secÄ«gi, bet atrodam pēc indeksa, kas ir labi, jo mēs neizdzÄ“Å”am visu tabulu, tad var gadÄ«ties, ka sākumā pieskārāmies pirmajai lapai, tad tÅ«kstoÅ”ajai, un pēc tam atgriezās pie pirmās . Un, ja starp Å”iem pirmās lapas apmeklējumiem kontrolpunkts to jau ir saglabājis diskā, tad tas to saglabās vēlreiz, jo mēs to sasmērējām otrreiz.

Un mēs piespiedīsim kontrolpunktu to saglabāt daudzas reizes. Kā viņam būtu liekas operācijas.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Bet tas vēl nav viss. Lapas ir 8 kilobaiti programmā Postgres un 4 kilobaiti operētājsistēmā Linux. Un ir iestatījums full_page_writes. Tas ir iespējots pēc noklusējuma. Un tas ir pareizi, jo, ja mēs to izslēdzam, tad pastāv risks, ka, ja tā avarē, tiks saglabāta tikai puse no lapas.

PārsÅ«tÄ«Å”anas žurnāla WAL rakstÄ«Å”anas darbÄ«ba ir tāda, ka tad, kad mums ir kontrolpunkts un mēs pirmo reizi mainām lapu, visa lapa, t.i., visi 8 kilobaiti, nonāk pārsÅ«tÄ«Å”anas žurnālā, lai gan mēs mainÄ«jām tikai rinda, kas sver 100 baitus . Un mums ir jāpieraksta visa lapa.

Turpmākajās izmaiņās būs tikai konkrēts kortežs, bet pirmo reizi mēs pierakstām visu.

Un attiecÄ«gi, ja kontrolpunkts atkārtojās, tad atkal jāsāk viss no nulles un jāspiež visa lapa. Ar biežu kontrolpunktu palÄ«dzÄ«bu, kad mēs ejam cauri vienām un tām paŔām lapām, full_page_writes = on bÅ«s vairāk nekā tas varētu bÅ«t, t.i., mēs Ä£enerējam vairāk WAL. Vairāk tiek nosÅ«tÄ«ts uz replikām, arhÄ«vu, disku.

Un attiecīgi mums ir divas atlaiŔanas.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Ja mēs palielinām max_wal_size, izrādās, ka mēs to atvieglosim gan kontrolpunktam, gan wal rakstniekam. Un tas ir lieliski.

Ieliksim terabaitu un dzÄ«vosim ar to. Kas tur slikts? Tas ir slikti, jo neveiksmes gadÄ«jumā kāpsim stundām, jo ā€‹ā€‹kontrolpunkts bija sen un daudz kas jau ir mainÄ«jies. Un mums tas viss ir jādara REDO. Un tā mēs veicam otro eksperimentu sēriju.

Mēs veicam operāciju un redzam, kad kontrolpunkts drīz beigsies, mēs ar nolūku nogalinām -9 Postgres.

Un pēc tam mēs to iedarbinām no jauna, un skatāmies, cik ilgi tas uz Ŕīs iekārtas celsies, t.i., cik daudz tas PĀRSKĀS Å”ajā sliktajā situācijā.

Divas reizes atzÄ«mÄ“Å”u, ka situācija ir slikta. Pirmkārt, mēs avarējām tieÅ”i pirms kontrolpunkta beigām, tāpēc mums ir daudz ko zaudēt. Un, otrkārt, mums bija masveida operācija. Un, ja kontrolpunkti bÅ«tu noildze, tad, visticamāk, kopÅ” pēdējā kontrolpunkta tiktu Ä£enerēts mazāk WAL. Tas ir, tas ir dubults zaudētājs.

Mēs izmērām Ŕādu situāciju dažādiem max_wal_size izmēriem un saprotam, ja max_wal_size ir 64 gigabaiti, tad dubultā sliktākajā gadÄ«jumā uzkāpsim 10 minÅ«tes. Un mēs domājam, vai tas mums der vai nē. Å is ir biznesa jautājums. Mums ir jāparāda Å”is attēls tiem, kas ir atbildÄ«gi par biznesa lēmumiem, un jājautā: ā€œCik ilgi mēs varam nogulēt ilgākais, ja rodas problēma? Vai sliktākajā situācijā varam nogulēt 3-5 minÅ«tes? Un jÅ«s pieņemat lēmumu.

Un Å”eit ir interesants punkts. Mums konferencē ir pāris referāti par Patroni. Un varbÅ«t jÅ«s to izmantojat. Å is ir Postgres automātiskais failover. Par to runāja GitLab un Data Egret.

Un, ja jums ir autofailover, kas notiek 30 sekundēs, tad varbÅ«t varam nogulēt uz 10 minÅ«tēm? Jo mēs lÄ«dz Å”im pāriesim uz repliku, un viss bÅ«s kārtÄ«bā. Tas ir strÄ«dÄ«gs jautājums. Es nezinu skaidru atbildi. Es tikai jÅ«tu, ka Ŕī tēma nav saistÄ«ta tikai ar avārijas atkopÅ”anu.

Ja mums ir ilga atveseļoÅ”anās pēc neveiksmes, tad mums bÅ«s neērti daudzās citās situācijās. Piemēram, tajos paÅ”os eksperimentos, kad mēs kaut ko darām un dažreiz ir jāgaida 10 minÅ«tes.

Es tik un tā neietu pārāk tālu, pat ja mums ir automātiska pārslēgÅ”anās. Parasti tādas vērtÄ«bas kā 64, 100 gigabaiti ir labas vērtÄ«bas. Dažreiz pat ir vērts izvēlēties mazāk. Kopumā Ŕī ir smalka zinātne.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Lai veiktu iterācijas, piemēram, max_wal_size =1, 8, masu darbÄ«ba ir jāatkārto daudzas reizes. Tu to izdarÄ«ji. Un uz tās paÅ”as bāzes jÅ«s vēlaties to darÄ«t vēlreiz, bet jÅ«s jau esat visu izdzēsis. Ko darÄ«t?

Par mÅ«su risinājumu, ko mēs darām, lai atkārtotos Ŕādās situācijās, pastāstÄ«Å”u vēlāk. Un Ŕī ir vispareizākā pieeja.

Bet Å”ajā gadÄ«jumā mums paveicās. Ja, kā Å”eit teikts "BEGIN, DELETE, ROLLBACK", tad mēs varam atkārtot DELETE. Tas ir, ja mēs paÅ”i to atcēlām, tad varam atkārtot. Un fiziski pie jums dati atradÄ«sies tajā paŔā vietā. JÅ«s pat nesaņemat vēdera uzpÅ«Å”anos. Varat atkārtot Ŕādus DELETE vienumus.

Å is DELETE ar ROLLBACK ir ideāli piemērots kontrolpunktu regulÄ“Å”anai, pat ja jums nav pareizi izvietotas datu bāzes laboratorijas.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Izgatavojām plāksni ar vienu kolonnu "i". Postgres ir lietderības kolonnas. Tie ir neredzami, ja vien nav īpaŔi lūgts. Tie ir: ctid, xmid, xmax.

Ctid ir fiziska adrese. Nulle lapa, pirmais kortežs lapā.

Var redzēt, ka pēc ROOLBACK korte palika tajā paŔā vietā. Tas ir, mēs varam mēģināt vēlreiz, tas rÄ«kosies tāpat. Tas ir galvenais.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Xmax ir kortedža nāves laiks. Tas tika apzīmogots, bet Postgres zina, ka darījums tika atsaukts, tāpēc nav svarīgi, vai tas ir 0 vai atsaukts darījums. Tas liek domāt, ka ir iespējams atkārtot DELETE un pārbaudīt sistēmas darbības lielapjoma darbības. Jūs varat izveidot datubāzes laboratorijas nabadzīgajiem.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Šeit ir runa par programmētājiem. Arī par DBA viņi vienmēr aizrāda programmētājus par to: "Kāpēc jūs veicat tik ilgas un sarežģītas darbības?". Šī ir pavisam cita perpendikulāra tēma. Kādreiz bija administrācija, tagad būs attīstība.

AcÄ«mredzot mēs neesam sadalÄ«juÅ”ies gabalos. Tas ir skaidrs. Nav iespējams Ŕādu DELETE miljoniem rindu nesadalÄ«t daļās. Tas tiks darÄ«ts 20 minÅ«tes, un viss gulēs. Bet diemžēl pat pieredzējuÅ”i izstrādātāji pieļauj kļūdas pat ļoti lielos uzņēmumos.

Kāpēc ir svarīgi lauzt?

  • Ja redzam, ka disks ir ciets, tad palēnināsim. Un, ja esam salauzti, tad varam pievienot pauzes, varam palēnināt droseles darbÄ«bu.

  • Un citus ilgi nebloķēsim. Dažos gadÄ«jumos nav nozÄ«mes, ja jÅ«s izdzÄ“Å”at Ä«stus atkritumus, ar kuriem neviens nestrādā, tad, visticamāk, jÅ«s nebloķēsit nevienu, izņemot autovakuuma darbu, jo tas gaidÄ«s darÄ«juma pabeigÅ”anu. Bet, ja jÅ«s noņemat kaut ko, ko kāds cits var pieprasÄ«t, tad tas tiks bloķēts, bÅ«s sava veida ķēdes reakcija. Jāizvairās no ilgstoÅ”iem darÄ«jumiem vietnēs un mobilajās lietojumprogrammās.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://postgres.ai/products/joe/

Tas ir interesanti. Es bieži redzu, ka izstrādātāji jautā: "Kādu iepakojuma izmēru man izvēlēties?".

Ir skaidrs, ka jo lielāks ir paketes lielums, jo mazākas ir darījumu pieskaitāmās izmaksas, t.i., papildu pieskaitāmās izmaksas no darījumiem. Bet tajā paŔā laikā Ŕim darījumam laiks palielinās.

Man ir ļoti vienkārÅ”s noteikums: ņemiet tik daudz, cik varat, bet nepārsniedziet izpildāmos failus sekundē.

Kāpēc sekunde? Izskaidrojums ir ļoti vienkārÅ”s un saprotams visiem, arÄ« netehniskiem cilvēkiem. Mēs redzam reakciju. Paņemsim 50 milisekundes. Ja kaut kas ir mainÄ«jies, tad mÅ«su acs reaģēs. Ja mazāk, tad grÅ«tāk. Ja kaut kas atbild pēc 100 milisekundēm, piemēram, jÅ«s noklikŔķinājāt ar peli un tā jums atbildēja pēc 100 milisekundēm, jÅ«s jau jÅ«tat Å”o nelielo aizkavi. Sekunde jau tiek uztverta kā bremzes.

AttiecÄ«gi, ja mēs sadalÄ«sim savas masveida operācijas 10 sekunžu sērijās, tad pastāv risks, ka mēs kādu bloķēsim. Un tas darbosies dažas sekundes, un cilvēki to jau pamanÄ«s. Tāpēc es nevēlos darÄ«t vairāk par sekundi. Bet tajā paŔā laikā nesajauciet to ļoti smalki, jo darÄ«juma izmaksas bÅ«s manāmas. Pamatne bÅ«s cietāka, un var rasties citas dažādas problēmas.

Mēs izvēlamies iepakojuma izmēru. Katrā gadījumā mēs to varam darīt savādāk. Var automatizēt. Un mēs esam pārliecināti par viena iepakojuma apstrādes efektivitāti. Tas nozīmē, ka mēs IZDZĒM vienu iepakojumu vai ATJAUNINĀM.

Starp citu, viss, par ko es runāju, nav tikai par DELETE. Kā jÅ«s uzminējāt, Ŕīs ir jebkuras lielapjoma darbÄ«bas ar datiem.

Un mēs redzam, ka plāns ir lielisks. JÅ«s varat redzēt indeksa skenÄ“Å”anu, tikai indeksa skenÄ“Å”ana ir vēl labāka. Un mums ir iesaistÄ«ts neliels datu apjoms. Un nepilna sekunde piepildās. Super.

Un mums joprojām ir jāpārliecinās, ka nenotiek degradācija. Gadās, ka pirmie iepakojumi ātri izdodas, un pēc tam kļūst arvien sliktāk un sliktāk. Process ir tāds, ka jums ir daudz jāpārbauda. TieÅ”i tam ir paredzētas datu bāzes laboratorijas.

Un mums vēl kaut kas ir jāsagatavo, lai tas ļautu mums to pareizi ievērot ražoÅ”anā. Piemēram, mēs varam ierakstÄ«t laiku žurnālā, mēs varam ierakstÄ«t, kur mēs Å”obrÄ«d atrodamies un kurus mēs tagad esam izdzēsuÅ”i. Un tas ļaus vēlāk saprast, kas notiek. Un, ja kaut kas noiet greizi, ātri atrodiet problēmu.

Ja mums ir jāpārbauda pieprasÄ«jumu efektivitāte un tas ir jāatkārto daudzas reizes, tad ir tāda lieta kā kolēģis bot. ViņŔ jau ir gatavs. To katru dienu izmanto desmitiem izstrādātāju. Un viņŔ zina, kā pēc pieprasÄ«juma 30 sekundēs pieŔķirt milzÄ«gu terabaitu datubāzi, savu kopiju. Un jÅ«s varat kaut ko izdzēst un pateikt RESET un dzēst vēlreiz. JÅ«s varat eksperimentēt ar to Ŕādā veidā. Es redzu Å”ai lietai nākotni. Un mēs to jau darām.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://docs.gitlab.com/ee/development/background_migrations.html

Kas ir sadalÄ«Å”anas stratēģijas? Es redzu 3 dažādas sadalÄ«Å”anas stratēģijas, kuras izmanto pakotnes izstrādātāji.

Pirmais ir ļoti vienkārÅ”s. Mums ir ciparu ID. SadalÄ«sim to dažādos intervālos un strādāsim ar to. NegatÄ«vā puse ir skaidra. Pirmajā segmentā mums var bÅ«t 100 Ä«stu atkritumu rindas, otrajā 5 rindas vai vispār nav, vai arÄ« visas 1 rindas izrādÄ«sies atkritumi. Ä»oti nevienmērÄ«gs darbs, bet viegli saplÄ«st. Viņi paņēma maksimālo ID un to sadauzÄ«ja. Tā ir naiva pieeja.

Otrā stratēģija ir lÄ«dzsvarota pieeja. To izmanto Gitlab. Viņi paņēma un skenēja galdu. Mēs atradām ID pakotņu robežas tā, ka katrā iepakojumā bija tieÅ”i 10 000 ierakstu. Un ielieciet tos rindā. Un tad apstrādājam. To var izdarÄ«t vairākos pavedienos.

Starp citu, arī pirmajā stratēģijā to var izdarīt vairākos pavedienos. Tas nav grūti.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

https://medium.com/@samokhvalov/how-partial-indexes-affect-update-performance-in-postgres-d05e0052abc

Bet ir vēsāka un labāka pieeja. Å Ä« ir treŔā stratēģija. Un, kad iespējams, labāk to izvēlēties. Mēs to darām, pamatojoties uz Ä«paÅ”u indeksu. Å ajā gadÄ«jumā tas, visticamāk, bÅ«s indekss atbilstoÅ”i mÅ«su atkritumu stāvoklim un ID. Mēs iekļausim ID, lai tā bÅ«tu tikai indeksa skenÄ“Å”ana, lai mēs nepārietu uz kaudzi.

Parasti tikai indeksa skenÄ“Å”ana ir ātrāka nekā indeksa skenÄ“Å”ana.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Un mēs ātri atrodam savus ID, kurus vēlamies noņemt. BATCH_SIZE mēs atlasām iepriekÅ”. Un mēs tos ne tikai iegÅ«stam, bet arÄ« iegÅ«stam Ä«paŔā veidā un nekavējoties uzlaužam. Bet mēs slēdzam, lai ja jau ir aizslēgti, tad neslēdzam, bet ejam tālāk un ņemam nākamos. Tas ir bloķēts atjauninājumu izlaiÅ”anai. Å Ä« lieliskā Postgres funkcija ļauj mums strādāt vairākos pavedienos, ja vēlamies. Tas ir iespējams vienā plÅ«smā. Un Å”eit ir CTE - tas ir viens pieprasÄ«jums. Un Ŕī CTE otrajā stāvā notiek reāla dzÄ“Å”ana - returning *. JÅ«s varat atgriezt ID, bet tas ir labāk *ja jums nav daudz datu par katru rindiņu.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Kāpēc mums tas ir vajadzÄ«gs? Tas ir tas, par ko mums ir jāziņo. Tagad esam dzēsuÅ”i tik daudz rindu. Un mums ir apmales pēc ID vai Create_at, piemēram, Å”is. JÅ«s varat veikt min, max. Var darÄ«t kaut ko citu. Å eit jÅ«s varat ievietot daudz lietu. Un tas ir ļoti ērti uzraudzÄ«bai.

Ir vēl viena piezÄ«me par indeksu. Ja mēs nolemjam, ka Å”im uzdevumam ir nepiecieÅ”ams Ä«paÅ”s indekss, mums ir jāpārliecinās, ka tas nesabojā tikai kaudzes atjauninājumus. Tas ir, Postgres ir Ŕāda statistika. To var redzēt jÅ«su tabulas sadaļā pg_stat_user_tables. Varat redzēt, vai tiek izmantoti karstie atjauninājumi.

Ir situācijas, kad jÅ«su jaunais indekss var tos vienkārÅ”i nogriezt. Un jums ir visi pārējie atjauninājumi, kas jau darbojas, palēniniet. Ne tikai tāpēc, ka parādÄ«jās indekss (katrs indekss nedaudz palēnina atjauninājumus, bet nedaudz), bet Å”eit tas joprojām to sabojā. Un Å”ai tabulai nav iespējams veikt Ä«paÅ”u optimizāciju. Tas notiek dažreiz. Tas ir tik smalks, ka daži cilvēki atceras. Un uz Ŕī grābekļa ir viegli uzkāpt. Reizēm gadās, ka jāatrod pieeja no otras puses un tomēr jāiztiek bez Ŕī jaunā indeksa, vai jāuztaisa cits indekss, vai kā citādi, piemēram, var izmantot otro metodi.

Bet Ŕī ir optimālākā stratēģija, kā sadalÄ«t pa partijām un Å”aut pa partijām ar vienu pieprasÄ«jumu, mazliet izdzēst utt.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Ilgi darījumi https://gitlab.com/snippets/1890447

Bloķēts autovakuums - https://gitlab.com/snippets/1889668

bloÄ·Ä“Å”anas problēma - https://gitlab.com/snippets/1890428

Kļūda #5 ir liela. Nikolajs no Okmetra stāstīja par Postgres monitoringu. Ideāls Postgres monitorings diemžēl nepastāv. Daži atrodas tuvāk, daži ir tālāk. Okmeter ir pietiekami tuvu tam, lai būtu ideāls, bet daudz kas pietrūkst un ir jāpievieno. Tam jābūt gatavam.

Piemēram, miruÅ”os koreÅ”us vislabāk uzraudzÄ«t. Ja tabulā ir daudz miruÅ”u lietu, tad kaut kas nav kārtÄ«bā. Labāk ir reaģēt tagad, pretējā gadÄ«jumā var bÅ«t degradācija, un mēs varam apgulties. Tas notiek.

Ja ir liels IO, tad skaidrs, ka tas nav labi.

ArÄ« ilgi darÄ«jumi. Ilgus darÄ«jumus nevajadzētu atļaut OLTP. Un Å”eit ir saite uz fragmentu, kas ļauj ņemt Å”o fragmentu un jau izsekot gariem darÄ«jumiem.

Kāpēc ilgi darÄ«jumi ir slikti? Jo visas slēdzenes tiks atbrÄ«votas tikai beigās. Un mēs visus apgrÅ«tinām. Turklāt mēs bloķējam autovakuumu visiem galdiem. Tas nemaz nav labi. Pat ja replikā ir iespējots karstais gaidÄ«Å”anas režīms, tas joprojām ir slikti. Kopumā nekur nav labāk izvairÄ«ties no ilgstoÅ”iem darÄ«jumiem.

Ja mums ir daudz galdu, kas nav izsÅ«knētas, tad mums ir jābÅ«t brÄ«dinājumam. Å eit Ŕāda situācija ir iespējama. Mēs varam netieÅ”i ietekmēt autovakuuma darbÄ«bu. Å is ir fragments no Avito, kuru es nedaudz uzlaboju. Un tas izrādÄ«jās interesants instruments, lai redzētu, kas mums ir ar autovakuumu. Piemēram, daži galdi tur gaida un nesagaidÄ«s savu kārtu. Jums arÄ« jāievieto uzraudzÄ«bā un jābÅ«t brÄ«dinājumam.

Un izdod blokus. Bloku koku mežs. Man patÄ«k no kāda kaut ko paņemt un uzlabot. Å eit es paņēmu forÅ”u rekursÄ«vo CTE no Data Egret, kurā redzams slūžu koku mežs. Tas ir labs diagnostikas rÄ«ks. Un uz tā pamata jÅ«s varat arÄ« izveidot uzraudzÄ«bu. Bet tas jādara uzmanÄ«gi. Jums ir jāiesniedz neliels paziņojums_taimauts. Un lock_timeout ir vēlams.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Dažreiz visas Ŕīs kļūdas rodas kopā.

Manuprāt, galvenā kļūda Å”eit ir organizatoriskā. Tas ir organizatoriski, jo tehnika nevelk. Tas ir 2. numurs ā€“ viņi pārbaudÄ«ja nepareizā vietā.

Mēs pārbaudÄ«jām nepareizā vietā, jo mums nebija ražoÅ”anas klona, ā€‹ā€‹kuru ir viegli pārbaudÄ«t. Izstrādātājam var nebÅ«t piekļuves produkcijai.

Un mēs pārbaudÄ«jām ne tur. Ja mēs bÅ«tu tur pārbaudÄ«juÅ”i, mēs paÅ”i to redzētu. Izstrādātājs to visu redzēja pat bez DBA, ja viņŔ to pārbaudÄ«ja labā vidē, kur ir vienāds datu apjoms un identiska atraÅ”anās vieta. ViņŔ bÅ«tu redzējis visu Å”o degradāciju un viņam bÅ«tu kauns.

Vairāk par autovakuumu. Pēc tam, kad esam veikuÅ”i masveida slaucÄ«Å”anu vairāku miljonu rindu garumā, mums joprojām ir jāveic PĀRPAKOÅ ANA. Tas ir Ä«paÅ”i svarÄ«gi indeksiem. Viņi jutÄ«sies slikti pēc tam, kad mēs tur visu iztÄ«rÄ«sim.

Un ja vēlies atgriezt ikdienas uzkopÅ”anas darbus, tad ieteiktu to darÄ«t biežāk, bet mazāk. Tas var bÅ«t reizi minÅ«tē vai pat biežāk mazliet. Un jums ir jāuzrauga divas lietas: lai Å”ai lietai nebÅ«tu kļūdu un lai tā neatpaliktu. Triks, ko es parādÄ«ju, to vienkārÅ”i atrisinās.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Tas, ko mēs darām, ir atvērtais avots. Tas ir ievietots GitLab. Un mēs to darām tā, lai cilvēki varētu pārbaudÄ«t pat bez DBA. Mēs veicam datu bāzes laboratoriju, tas ir, mēs izsaucam bāzes komponentu, pie kura Džo paÅ”laik strādā. Un jÅ«s varat paÄ·ert produkcijas kopiju. Tagad ir Joe for slack ievieÅ”ana, tur varat teikt: ā€œizskaidrojiet Ŕādu un tādu pieprasÄ«jumuā€ un nekavējoties iegÅ«stiet rezultātu savai datu bāzes kopijai. Tur pat varat DZĒST, un neviens to nepamanÄ«s.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

Pieņemsim, ka jums ir 10 terabaiti, mēs izveidojam datu bāzes laboratoriju arī 10 terabaitus. Un ar vienlaicīgām 10 terabaitu datu bāzēm vienlaikus var strādāt 10 izstrādātāji. Katrs var darīt, ko vēlas. Var izdzēst, nomest utt. Tā ir tāda fantāzija. Par to mēs runāsim rīt.

Cien. DZĒST. Nikolajs Samohvalovs (Postgres.ai)

To sauc par plānoÅ”anu. Tas ir smalks nodroÅ”inājums. Å Ä« ir sava veida fantāzija, kas ievērojami novērÅ” kavÄ“Å”anos attÄ«stÄ«bā, testÄ“Å”anā un padara pasauli par labāku vietu Å”ajā ziņā. Tas nozÄ«mē, ka tas tikai ļauj izvairÄ«ties no problēmām ar lielapjoma operācijām.

Piemērs: 5 terabaitu datubāze, kopijas iegÅ«Å”ana mazāk nekā 30 sekundēs. Un tas pat nav atkarÄ«gs no izmēra, tas ir, nav svarÄ«gi, cik terabaitu.

Å odien jÅ«s varat doties uz postgres.ai un iedziļināties mÅ«su rÄ«kos. JÅ«s varat reÄ£istrēties, lai redzētu, kas tur ir. JÅ«s varat instalēt Å”o robotu. Tas ir par brÄ«vu. Rakstiet.

jautājumi

Ä»oti bieži reālās situācijās izrādās, ka datu, kam jāpaliek tabulā, ir daudz mazāk nekā dzÄ“Å”amo. RespektÄ«vi, Ŕādā situācijā nereti ir vieglāk Ä«stenot Ŕādu pieeju, kad vienkārŔāk ir izveidot jaunu objektu, kopēt tur tikai nepiecieÅ”amos datus un izdalÄ«t veco tabulu. Ir skaidrs, ka Å”im brÄ«dim, kamēr jÅ«s pārslēgsit, ir nepiecieÅ”ama programmatiska pieeja. Kā ir Ŕī pieeja?

Tā ir ļoti laba pieeja un ļoti labs uzdevums. Tas ir ļoti lÄ«dzÄ«gs tam, ko dara pg_repack, tas ir ļoti lÄ«dzÄ«gs tam, kas jums jādara, veidojot ID 4 baitus. Daudzi ietvari to izdarÄ«ja pirms dažiem gadiem, un tikai plāksnes ir izauguÅ”as, un tās ir jāpārvērÅ” uz 8 baitiem.

Å is uzdevums ir diezgan grÅ«ts. Mēs to izdarÄ«jām. Un jums ir jābÅ«t ļoti uzmanÄ«giem. Ir slēdzenes utt. Bet tas tiek darÄ«ts. Tas ir, standarta pieeja ir izmantot pg_repack. JÅ«s deklarējat Ŕādu etiÄ·eti. Un pirms sākat tajā augÅ”upielādēt momentuzņēmuma datus, jÅ«s arÄ« deklarējat vienu plāksnÄ«ti, kas izseko visas izmaiņas. Ir triks, ka jÅ«s pat nevarat izsekot dažām izmaiņām. Ir smalkumi. Un tad jÅ«s pārslēdzaties, veicot izmaiņas. BÅ«s neliela pauze, kad visus slēgsim, bet kopumā tas tiek darÄ«ts.

Ja paskatās uz pg_repack uz GitHub, tad tur, kad bija uzdevums konvertēt ID no int 4 uz int 8, tad radās doma izmantot paÅ”u pg_repack. Tas ir arÄ« iespējams, taču tas ir nedaudz uzlauzts, taču tas darbosies arÄ« Å”ajā gadÄ«jumā. Varat iejaukties trigerā, ko izmanto pg_repack, un teikt: "Mums Å”ie dati nav vajadzÄ«gi", t.i., mēs pārsÅ«tām tikai to, kas mums nepiecieÅ”ams. Un tad viņŔ vienkārÅ”i pārslēdzas un viss.

Izmantojot Å”o pieeju, mēs joprojām iegÅ«stam otro tabulas kopiju, kurā dati jau ir indeksēti un salikti ļoti vienmērÄ«gi ar skaistiem indeksiem.

UzpÅ«Å”anās nav klāt, tā ir laba pieeja. Bet es zinu, ka Å”im nolÅ«kam tiek mēģināts izstrādāt automatizāciju, t.i., izveidot universālu risinājumu. Es varu jÅ«s sazināties ar Å”o automatizāciju. Tas ir rakstÄ«ts Python valodā, kas ir laba lieta.

Esmu tikai nedaudz no MySQL pasaules, tāpēc atnācu klausÄ«ties. Un mēs izmantojam Å”o pieeju.

Bet tas ir tikai tad, ja mums ir 90%. Ja mums ir 5%, tad nav īpaŔi labi tos izmantot.

Paldies par ziņojumu! Ja nav resursu, lai izveidotu pilnīgu prod kopiju, vai ir kāds algoritms vai formula, lai aprēķinātu slodzi vai izmēru?

Labs jautājums. Pagaidām mēs varam atrast vairāku terabaitu datu bāzes. Pat ja aparatūra tur nav vienāda, piemēram, mazāk atmiņas, mazāk procesora un diski nav gluži vienādi, bet tomēr mēs to darām. Ja pilnīgi nekur nav, tad jādomā. Ļaujiet man padomāt līdz rītdienai, jūs atnācāt, mēs parunāsim, tas ir labs jautājums.

Paldies par ziņojumu! JÅ«s vispirms sākāt par to, ka ir forÅ”s Postgres, kuram ir tādi un tādi ierobežojumi, bet tas attÄ«stās. Un tas viss kopumā ir kruÄ·is. Vai tas viss nav pretrunā ar paÅ”u Postgres attÄ«stÄ«bu, kurā parādÄ«sies kaut kāds DELETE deferents vai kas cits, kam vajadzētu noturēt zemā lÄ«menÄ« to, ko mēs te cenÅ”amies iesmērēt ar kaut kādiem mÅ«su dÄ«vainajiem lÄ«dzekļiem?

Ja mēs SQL teicām dzēst vai atjaunināt daudzus ierakstus vienā darÄ«jumā, tad kā Postgres to var izplatÄ«t tur? Mēs esam fiziski ierobežoti darbÄ«bās. Mēs to darÄ«sim vēl ilgi. Un mēs Å”ajā laikā bloķēsim utt.

Pabeigts ar indeksiem.

Varu pieņemt, ka Å”o paÅ”u kontrolpunktu regulÄ“Å”anu varētu automatizēt. Kādreiz tā varētu bÅ«t. Bet tad es Ä«sti nesaprotu jautājumu.

Jautājums, vai ir tāds attÄ«stÄ«bas vektors, kas iet Å”ur tur, un te tavējais iet paralēli? Tie. Vai viņi vēl nav par to domājuÅ”i?

Es runāju par principiem, kurus var izmantot tagad. Ir vēl viens bots homoseksuālists, ar to jÅ«s varat veikt automatizētu kontrolpunktu regulÄ“Å”anu. Vai tas kādreiz bÅ«s Postgresā? Nezinu, tas vēl nav pat apspriests. Mēs vēl esam tālu no tā. Bet ir zinātnieki, kas veido jaunas sistēmas. Un viņi mÅ«s iegrūž automātiskajos indeksos. Ir notikumi. Piemēram, varat apskatÄ«t automātisko regulÄ“Å”anu. Tas automātiski atlasa parametrus. Bet viņŔ vēl neveiks kontrolpunktu regulÄ“Å”anu jÅ«su vietā. Tas ir, tas tiks uzņemts veiktspējai, čaulas buferim utt.

Un kontrolpunktu regulÄ“Å”anai varat rÄ«koties Ŕādi: ja jums ir tÅ«kstoÅ” klasteru un dažādas aparatÅ«ras, dažādas virtuālās maŔīnas mākonÄ«, varat izmantot mÅ«su robotu. homoseksuālists veikt automatizāciju. Un max_wal_size tiks automātiski atlasÄ«ts atbilstoÅ”i jÅ«su mērÄ·a iestatÄ«jumiem. Bet pagaidām tas nav pat tuvu kodolam, diemžēl.

Labdien JÅ«s runājāt par ilgu darÄ«jumu bÄ«stamÄ«bu. JÅ«s teicāt, ka autovakuums tiek bloķēts dzÄ“Å”anas gadÄ«jumā. Kā vēl tas mums kaitē? Jo mēs vairāk runājam par vietas atbrÄ«voÅ”anu un iespēju to izmantot. Kas vēl mums trÅ«kst?

Autovakuums Å”eit varbÅ«t nav lielākā problēma. Un tas, ka ilgstoÅ”s darÄ«jums var bloķēt citus darÄ«jumus, Ŕī iespēja ir daudz bÄ«stamāka. Viņa var satikties vai nesatikties. Ja viņa satikās, tad var bÅ«t ļoti slikti. Un ar autovakuumu - arÄ« tā ir problēma. Ar ilgstoÅ”iem darÄ«jumiem OLTP ir divas problēmas: slēdzenes un autovakuums. Un, ja replikā ir iespējota karstā gaidstāves atgriezeniskā saite, jÅ«s joprojām saņemsit automātisko vakuuma bloÄ·Ä“Å”anu uz galvenās ierÄ«ces, tā tiks saņemta no kopijas. Bet vismaz slēdzenes nebÅ«s. Un bÅ«s loks. Mēs runājam par datu izmaiņām, tāpēc slēdzenes Å”eit ir svarÄ«gs punkts. Un, ja tas viss ir uz ilgu, ilgu laiku, tad arvien vairāk darÄ«jumu tiek bloķēti. Viņi var nozagt citus. Un parādās lok koki. Es sniedzu saiti uz fragmentu. Un Ŕī problēma kļūst pamanāmāka ātrāk nekā problēma ar autovakuumu, kas var tikai uzkrāties.

Paldies par ziņojumu! JÅ«s sākāt savu ziņojumu, sakot, ka pārbaudÄ«jāt nepareizi. Turpinājām domu, ka jāņem tas pats aprÄ«kojums, ar bāzi tāpat. Pieņemsim, ka mēs sniedzām izstrādātājam bāzi. Un viņŔ lÅ«gumu izpildÄ«ja. Un Ŕķiet, ka viņam viss ir kārtÄ«bā. Bet viņŔ nepārbauda uz dzÄ«vu, bet uz dzÄ«vu, piemēram, mums slodze ir 60-70%. Un pat ja mēs izmantojam Å”o skaņoÅ”anu, tas nedarbojas ļoti labi.

Ir svarÄ«gi, lai komandā bÅ«tu eksperts un jāizmanto DBA eksperti, kas var paredzēt, kas notiks ar reālu fona slodzi. Kad mēs tikko veicām savas tÄ«rās izmaiņas, mēs redzam attēlu. Bet progresÄ«vāka pieeja, kad mēs darÄ«jām to paÅ”u vēlreiz, bet ar slodzi, kas simulēta ar ražoÅ”anu. Tas ir diezgan forÅ”i. LÄ«dz tam laikam jāpaaug. Tas ir kā pieauguÅ”ais. Mēs vienkārÅ”i skatÄ«jāmies, kas mums ir, un arÄ« paskatÄ«jāmies, vai mums ir pietiekami daudz resursu. Tas ir labs jautājums.

Kad mēs jau veicam atkritumu atlasi un mums ir, piemēram, dzēsts karogs

Tas ir tas, ko autovacuum automātiski dara Postgres.

Ak, vai viņŔ to dara?

Autovakuums ir atkritumu savācējs.

Paldies!

Paldies par ziņojumu! Vai ir iespēja uzreiz noformēt datu bāzi ar sadalÄ«Å”anu tā, lai visi atkritumi no galvenās tabulas sasmērētos kaut kur malā?

Protams, ir.

Vai tad ir iespējams sevi pasargāt, ja esam aizslēguÅ”i galdu, kuru nedrÄ«kst lietot?

Protams, ir. Bet tas ir kā jautājums par vistu un olu. Ja mēs visi zinām, kas notiks turpmāk, tad, protams, visu darÄ«sim forÅ”i. Bet bizness mainās, ir jaunas slejas, jauni pieprasÄ«jumi. Un tad - ak, mēs vēlamies to noņemt. Bet Ŕī ideālā situācija dzÄ«vē notiek, bet ne vienmēr. Bet kopumā tā ir laba ideja. VienkārÅ”i saÄ«si un viss.

Avots: www.habr.com

Pievieno komentāru