Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Рӯзе дар ояндаи дур, нест кардани автоматии маълумоти нолозим яке аз вазифаҳои муҳими МДМ хоҳад буд [1]. Дар ҳамин ҳол, мо худамон бояд дар бораи нест кардан ё интиқол додани маълумоти нолозим ба системаҳои нигаҳдории арзонтар ғамхорӣ кунем. Фарз мекунем, ки шумо қарор додед, ки якчанд миллион сатрҳоро нест кунед. Вазифаи хеле содда, хусусан агар вазъият маълум бошад ва нишондиҳандаи мувофиқ мавҷуд бошад. "ХОЗ КАРДАН АЗ ҷадвали1 КУҶО col1 = :value" - чӣ метавонад соддатар бошад, дуруст?

Видео:

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

  • Ман аз соли аввал, яъне аз соли 2007 дар кумитаи барномаи Highload мебошам.

  • Ва ман аз соли 2005 бо Postgres будам. Онро дар бисёр лоиҳаҳо истифода бурд.

  • Ин гурӯҳ инчунин аз соли 2007 бо RuPostges кор мекунад.

  • Мо дар Meetup ба 2100+ иштирокчӣ расидем. Ин ҷои дуюм дар ҷаҳон пас аз Ню-Йорк аст, ки муддати тӯлонӣ аз Сан-Франсиско пеш гузашт.

  • Ман чанд сол боз дар Калифорния зиндагӣ мекунам. Ман бештар бо ширкатҳои амрикоӣ, аз ҷумла бо ширкатҳои бузург кор мекунам. Онҳо корбарони фаъоли Postgres мебошанд. Ва дар он ҷо ҳама чизҳои ҷолиб ба миён меоянд.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

https://postgres.ai/ — Ин ширкати ман аст. Мо дар кори автоматикунонии вазифаҳо ҳастем, ки сустшавии рушдро бартараф мекунанд.

Агар шумо коре кунед, баъзан дар атрофи Postgres хатогиҳо мавҷуданд. Биёед бигӯем, ки шумо бояд интизор шавед, ки администратор ба шумо курси санҷишӣ диҳад, ё шумо бояд интизор шавед, ки DBA ба шумо посух диҳад. Ва мо дар раванди таҳия, озмоиш ва идоракунӣ чунин монеаҳо пайдо мекунем ва кӯшиш мекунем, ки онҳоро бо истифода аз автоматизатсия ва равишҳои нав бартараф кунем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Ман ба наздикӣ дар VLDB дар Лос-Анҷелес будам. Ин бузургтарин конфронси пойгоҳи додаҳост. Ва гузорише буд, ки дар оянда DBMS на танҳо маълумотро нигоҳ медорад, балки ба таври худкор маълумотро нест мекунад. Ин мавзӯи нав аст.

Дар чахон маълумотхо торафт зиёд шуда истодаанд Зетабайт 1 петабайт аст. Ва ҳоло ҳисоб карда мешавад, ки мо дар ҷаҳон зиёда аз 000 зеттабайт маълумот дорем. Ва шумораи онҳо бештар ва бештар аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Ва бо он чӣ бояд кард? Маълум аст, ки онро нест кардан лозим аст. Ин аст истиноди ин гузориши ҷолиб. Аммо то хол ин дар ДБМ чорй карда нашудааст.

Онҳое, ки пул ҳисоб карданро медонанд, ду чизро мехоҳанд. Онҳо мехоҳанд, ки мо нест кунем, бинобар ин мо бояд аз ҷиҳати техникӣ ин корро карда тавонем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Он чизе ки ман дар оянда мегӯям, як ҳолати абстрактӣ аст, ки як қатор ҳолатҳои воқеиро дар бар мегирад, яъне маҷмӯи муайяни он чизе, ки воқеан бо ман ва базаҳои атрофи он борҳо ва солҳои зиёд рӯй дода буд. Ракҳо дар ҳама ҷо ҳастанд ва ҳама ҳамеша ба онҳо қадам мезананд.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Фарз мекунем, ки мо як база ё якчанд база дорем, ки афзоиш меёбанд. Ва баъзе аз сабтҳо партовҳои аён мебошанд. Масалан, корбар дар он ҷо кореро оғоз кард, аммо ба охир нарасид. Ва баъди чанд вакт мо медонем, ки ин кори нотамомро дигар нигох доштан мумкин нест. Яъне, мо мехоҳем баъзе чизҳои номатлубро тоза кунем, то ҷойро сарфа кунем, фаъолиятро беҳтар кунем ва ғайра.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Умуман, вазифа аз он иборат аст, ки автоматикунонии нест кардани чизҳои мушаххас, сатрҳои мушаххас дар ҷадвал.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ва мо як дархост дорем, ки имрӯз дар бораи он, яъне дар бораи хориҷ кардани партовҳо сӯҳбат мекунем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Мо аз як таҳиягари ботаҷриба хоҳиш кардем, ки ин корро анҷом диҳад. Вай ин дархостро гирифт, худаш тафтиш кард - ҳамааш кор мекунад. Ман онро дар саҳна санҷидам - ​​ҳама чиз хуб аст. Онро паҳн кард - ҳама чиз кор мекунад. Дар як рӯз як маротиба мо инро иҷро мекунем - ҳама чиз хуб аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Базаи база торафт меафзояд. DELETE ҳаррӯза каме сусттар кор мекунад.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Он гоҳ мо дарк мекунем, ки мо ҳоло як ширкати маркетинг ҳастем ва трафик чанд маротиба зиёдтар мешавад, аз ин рӯ мо тасмим гирифтем, ки корҳои нодаркорро муваққатан таваққуф кунем. Ва мо баргардонидани онро фаромӯш мекунем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Баъди чанд мох ба ёдаш омад. Ва он таҳиякунанда тарк кард ё бо чизи дигар банд буд, онҳо ба дигаре таъин карданд, ки онро баргардонад.

Вай таҳиягарро тафтиш кард, саҳнасозӣ - ҳама чиз хуб аст. Табиист, ки шумо ба ҳар ҳол бояд чизҳои ҷамъшударо тоза кунед. Вай тафтиш кард, ҳама чиз кор мекунад.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Баъд чӣ мешавад? Он гоҳ ҳама чиз барои мо вайрон мешавад. Он чунон меафтад, ки дар як лаҳза ҳама чиз ба поён меафтад. Ҳама дар шок аст, ҳеҷ кас намефаҳмад, ки чӣ рӯй дода истодааст. Ва он гоҳ маълум мешавад, ки ин DELETE масъала буд.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Чизе хато кард? Ин аст рӯйхати чизҳое, ки метавонанд хато кунанд. Кадоме аз инҳо муҳимтар аст?

  • Масалан, ҳеҷ гуна барраси вуҷуд надошт, яъне коршиноси DBA нигоҳ накардааст. Бо чашми ботаҷриба, ӯ дарҳол мушкилотро пайдо мекард ва илова бар ин, ӯ ба маҳсулоте, ки дар он якчанд миллион хатҳо ҷамъ шудааст, дастрасӣ дорад.

  • Шояд онҳо ягон чизи нодурустро тафтиш карданд.

  • Шояд сахтафзор кӯҳна бошад ва ба шумо лозим аст, ки ин базаро навсозӣ кунед.

  • Ё дар худи пойгоҳи додаҳо чизе нодуруст аст ва мо бояд аз Postgres ба MySQL гузарем.

  • Ё шояд дар амалиёт ягон хатогӣ вуҷуд дорад.

  • Шояд дар ташкили кор ягон хатой руй дода бошад ва касеро аз кор холй кардан, одамони хубтарро ба кор кабул кардан лозим аст?

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Санҷиши DBA вуҷуд надошт. Агар DBA мебуд, вай ин чанд миллион сатрро медид ва ҳатто бидуни ягон озмоиш мегуфт: "Онҳо ин корро намекунанд." Биёед бигӯем, ки агар ин код дар GitLab, GitHub бошад ва раванди баррасии код вуҷуд дошта бошад ва ҳеҷ чиз вуҷуд надошта бошад, ки бидуни тасдиқи DBA ин амалиёт дар маҳсулот сурат гирад, пас баръало DBA мегӯяд: "Шумо ин корро карда наметавонед. »

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ва ӯ мегуфт, ки шумо бо диски IO мушкилот хоҳед дошт ва ҳама равандҳо девона мешаванд, шояд қуфлҳо пайдо шаванд ва шумо инчунин автовакуумро барои якчанд дақиқа маҳкам мекунед, бинобар ин ин хуб нест.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Хатои дуюм дар он аст, ки онхо дар чои нодуруст тафтиш кардаанд. Мо пас аз он дидем, ки маълумоти зиёди партовҳо дар маҳсулот ҷамъ шудаанд, аммо таҳиякунанда дар ин пойгоҳи додаҳо маълумот ҷамъ накардааст ва ҳеҷ кас воқеан ин партовро дар саҳна эҷод накардааст. Мувофики он 1 хат мавчуд буд, ки онхо зуд анчом ёфтанд.

Мо мефаҳмем, ки санҷишҳои мо заифанд, яъне раванде, ки сохта шудааст, мушкилотро ба бор намеорад. Таҷрибаи мувофиқи DB гузаронида нашуд.

Таҷрибаи беҳтарин бояд дар ҳамон таҷҳизот гузаронида шавад. Ин корро дар як сахтафзор иҷро кардан на ҳамеша имконпазир аст, аммо хеле муҳим аст, ки он нусхаи пурраи пойгоҳи додаҳо бошад. Ин аст он чизе ки ман чанд сол боз мавъиза мекунам. Ва як сол пеш ман дар ин бора гуфта будам, шумо метавонед ҳамаашро дар YouTube тамошо кунед.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Шояд техникаи мо бад бошад? Агар шумо назар кунед, таъхири он ҷаҳиш кардааст. Мо дидем, ки коркарди дубора 100% буд. Албатта, агар инҳо драйвҳои муосири NVMe мебуданд, он гоҳ эҳтимол барои мо хеле осонтар мебуд. Ва шояд аз ин сабаб мо хобида намешудем.

Агар шумо абрҳо дошта бошед, пас навсозӣ осон аст. Мо нусхаҳои навро дар сахтафзори нав оғоз кардем. Гузариш. Ва ҳамааш хуб аст. Хеле осон.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Оё имкон дорад, ки ба дискҳои хурдтар даст занед? Ва дар ин ҷо, бо ёрии DBA, мо ба мавзӯи муайяне ворид мешавем, ки танзими нуқтаи назорат номида мешавад. Маълум мешавад, ки мо танзими пунктро нагузарондаем.

Нуқтаи назоратӣ чист? Ин дар ҳама гуна DBMS дастрас аст. Вақте ки маълумот дар хотираи шумо тағир меёбад, онҳо фавран ба дискҳо навишта намешаванд. Маълумоте, ки маълумот тағир ёфтааст, аввал ба гузориши пешакӣ, дар сабти пешнавис навишта мешавад. Ва дар баъзе мавридҳо, DBMS қарор мекунад, ки вақти он расидааст, ки саҳифаҳои воқеиро ба диск партоем, то агар мо нокомӣ дошта бошем, мо REDO-ро камтар кунем. Он мисли бозича аст. Агар мо кушта шавем, мо бозиро аз гузаргоҳи охирин оғоз мекунем. Ва ҳама DBMS инро амалӣ мекунанд.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Танзимот дар Postgres ақиб мондаанд. Онҳо барои ҳаҷми маълумот ва амалиётҳои 10-15 сола пешбинӣ шудаанд. Ва гузаргоҳ низ истисно нест.

Ин маълумот аз гузориши мо бо санҷиши Postgres, яъне санҷиши автоматии саломатӣ мебошад. Ва дар ин ҷо як пойгоҳи додаҳои якчанд терабайт мавҷуд аст. Ва маълум аст, ки гузаргоҳҳо қариб дар 90% ҳолатҳо маҷбур мешаванд.

Ин чӣ маъно дорад? Дар он ҷо ду танзимот мавҷуданд. Нуқтаи гузаргоҳ метавонад дар вақти танаффус, масалан, дар 10 дақиқа рух диҳад. Ё ин метавонад ҳангоми пур кардани миқдори зиёди маълумот рӯй диҳад.

Ва бо нобаёнӣ, max_wal_saze ба 1 гигабайт муқаррар карда шудааст. Дар асл, ин воқеан дар Postgres пас аз 300-400 мегабайт рух медиҳад. Шумо ин қадар маълумотро иваз кардаед ва шумо нуқтаи назорат доред.

Ва агар касе онро танзим накунад, аммо хизматрасонӣ афзоиш ёфтааст ва ширкат даромади зиёд ба даст меорад, он транзаксияҳои зиёд дорад, пас гузаргоҳ дар як дақиқа, баъзан дар 30 сония як маротиба рӯй медиҳад ва баъзан онҳо ҳатто бо ҳам мепайвандад. . Ин дар ҳақиқат бад аст.

Ва мо бояд боварӣ ҳосил кунем, ки он камтар меояд. Яъне, мо метавонем max_wal_size -ро боло барем. Ва ӯ камтар ҳамла хоҳад кард.

Аммо мо як методологияи томро дар бораи чӣ гуна дурусттар иҷро кардан, яъне чӣ гуна қабул кардани қарорҳо дар бораи интихоби танзимот, ба таври возеҳ дар асоси маълумоти мушаххас таҳия кардем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Мувофиқи он, мо ду силсила таҷрибаҳои пойгоҳи додаҳоро иҷро мекунем.

Силсилаи аввал - мо max_wal_size -ро тағир медиҳем. Ва мо амалиёти азим мегузаронем. Аввалан мо онро дар танзимоти пешфарзи 1 гигабайт иҷро мекунем. Ва мо миллионҳо сатрҳоро НАЗЪИ калон мекунем.

Шумо мебинед, ки ин барои мо чӣ гуна душвор аст. Мо мебинем, ки диски IO хеле бад аст. Биёед бубинем, ки мо чӣ қадар WAL тавлид кардем, зеро ин хеле муҳим аст. Биёед бубинем, ки гузаргоҳ чанд маротиба рӯй дод. Ва мо мебинем, ки ин хуб нест.

Минбаъд мо max_wal_size -ро зиёд мекунем. Мо такрор мекунем. Зиёд кунед, такрор кунед. Ва бисёр маротиба. Аслан, 10 хол хуб аст, ки дар он 1, 2, 4, 8 гигабайт. Ва мо ба рафтори системаи мушаххас назар мекунем. Маълум аст, ки таҷҳизот дар ин ҷо бояд мисли истеҳсолот бошад. Шумо бояд ҳамон дискҳо, ҳамон миқдори хотира ва ҳамон танзимоти Postgres дошта бошед.

Ва бо ин роҳ мо системаи худро мубодила хоҳем кард ва мо медонем, ки DBMS дар ҳолати бади DELETE оммавӣ чӣ гуна рафтор хоҳад кард, он чӣ гуна нуқтаи гузаргоҳ хоҳад дошт.

Пункти назоратӣ ба забони русӣ маънои нуқтаҳои назоратиро дорад.

Мисол: Чанд миллион сатрро аз рӯи индекс ТОҶИК КУНЕД, сатрҳо дар саросари саҳифаҳо "пароканда шудаанд".

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ана як мисол. Ин як асос аст. Ва бо муқаррароти пешфарз 1 гигабайт барои max_wal_size, хеле равшан аст, ки дискҳои мо барои сабт ба раф мераванд. Ин расм як аломати хоси як бемори хеле бемор аст, яъне ӯ воқеан худро бад ҳис мекард. Ва танҳо як амалиёт буд, дар ин ҷо танҳо DELETE аз чанд миллион сатр буд.

Агар ба ин гуна амалиёт дар истехсолот ичозат дода шавад, пас мо танхо меафтем, зеро маълум аст, ки як DELETE моро дар раф мекушад.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ғайр аз он, дар он ҷое, ки 16 гигабайт мавҷуд аст, шумо мебинед, ки дандонҳо аллакай пайдо шудаанд. Дандонҳо аллакай беҳтаранд, яъне мо ба шифт мезанем, аммо он қадар бад нест. Дар он чо андаке озодй пайдо шуд. Дар тарафи рост сабт аст. Ва шумораи амалиётҳо диаграммаи дуюм аст. Ва маълум аст, ки мо аллакай бо 16 гигабайт каме осонтар нафас мекашем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ва дар он ҷое, ки 64 гигабайт намоён аст, он комилан беҳтар шудааст. Аллакай дандонҳо ба таври равшан намоёнанд, барои наҷот додани амалиётҳои дигар ва коре бо диск имкони бештар вуҷуд дорад.

Чаро ин тавр аст?

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ман каме ба тафсилот ғарқ мешавам, аммо ин мавзӯъ дар бораи чӣ гуна анҷом додани танзими нуқтаи назорат метавонад ба як гузориши пурра оварда расонад, аз ин рӯ ман ба тафсилоти зиёд намеравам, аммо ман каме шарҳ медиҳам, ки кадом мушкилот вуҷуд доранд.

Агар гузаргоҳ зуд-зуд рух диҳад ва мо сатрҳои худро пайдарпай навсозӣ накунем, балки онҳоро аз рӯи индекс пайдо кунем, ки ин хуб аст, зеро мо тамоми ҷадвалро нест намекунем, пас чунин рӯй дода метавонад, ки мо аввал ба саҳифаи аввал, баъд ҳазорум, ва баъд ба аввал баргашт. Ва агар дар байни ин боздидҳо ба саҳифаи аввал гузаргоҳ онро аллакай дар диск захира карда бошад, пас онро дубора захира мекунад, зеро мо бори дуюм ифлос кардаем.

Ва мо пункти назоратиро борхо мачбур мекунем, ки онро захира кунад. Гӯё барои он амалиёти зиёдатӣ вуҷуд дорад.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Аммо ин ҳама нест. Дар Postgres саҳифаҳо 8 килобайт вазн доранд ва дар Linux 4 килобайт. Ва танзими full_page_writes мавҷуд аст. Он бо нобаёнӣ фаъол аст. Ва ин дуруст аст, зеро агар мо онро хомӯш кунем, хатари он вуҷуд дорад, ки дар сурати нокомӣ танҳо нисфи саҳифа захира карда мешавад.

Рафтори вуруд дар WAL журнали пешравӣ чунин аст, ки вақте ки мо нуқтаи гузаргоҳ дорем ва мо саҳифаро бори аввал иваз мекунем, тамоми саҳифа, яъне ҳама 8 килобайт дар гузориши пешин ба охир мерасад, гарчанде ки мо танҳо сатрро иваз кард, ки вазнаш 100 байт аст. Ва мо мачбур мешавем, ки тамоми сахифаро нависем.

Дар тағйироти минбаъда танҳо як банди мушаххас хоҳад буд, аммо бори аввал мо ҳама чизро менависем.

Ва, мувофиқан, агар нуқтаи гузаргоҳ дубора рӯй диҳад, мо бояд ҳама чизро аз сифр оғоз кунем ва тамоми саҳифаро пур кунем. Бо гузаргоҳҳои зуд-зуд, вақте ки мо дар ҳамон саҳифаҳо мегузарем, full_page_writes = дар назар ба он бузургтар хоҳад буд, яъне мо бештар WAL тавлид мекунем. Бештар ба нусхаҳо, ба архив, ба диск фиристода мешавад.

Ва, мутаносибан, мо ду ихтисор дорем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Агар мо max_wal_size-ро зиёд кунем, маълум мешавад, ки мо кори ҳам нуқтаи назоратӣ ва ҳам вал нависандаро осон мегардонем. Ва ин бузург аст.

Биёед терабайтро насб кунем ва бо он зиндагӣ кунем. Дар ин чӣ бад аст? Ин бад аст, зеро дар сурати нобарорӣ мо соатҳо аз ҷой бармехезам, зеро гузаргоҳ кайҳо буд ва аллакай бисёр чиз тағйир ёфтааст. Ва мо бояд барои ҳамаи ин REDO кунем. Ва аз ин рӯ, мо силсилаи дуюми таҷрибаҳоро анҷом медиҳем.

Мо амалиётро анҷом медиҳем ва мебинем, ки вақте гузаргоҳ ба анҷом мерасад, мо қасдан куштори -9 Postgres мекунем.

Ва пас аз он, мо онро дубора оғоз мекунем ва бубинем, ки барои боло рафтани ин таҷҳизот чӣ қадар вақт лозим аст, яъне дар ин вазъияти бад чӣ қадар REDO кор хоҳад кард.

Ду бор кайд мекунам, ки вазъият бад аст. Аввалан, мо рост пеш аз ба охир расидани гузаргоҳ афтодем, бинобар ин мо бисёр чизро аз даст медиҳем. Ва дуюм, мо як амалиёти азим доштем. Ва агар гузаргоҳҳо мӯҳлат дошта бошанд, пас эҳтимолан аз гузаргоҳи охирин WAL камтар тавлид мешуд. Яъне ин ду маротиба зиёновар аст.

Мо ин вазъиятро барои max_wal_size гуногун чен мекунем ва мефаҳмем, ки агар max_wal_size 64 гигабайт бошад, пас дар вазъияти дучандон бадтарин мо барои 10 дақиқа боло хоҳем шуд. Ва мо фикр мекунем, ки оё ин ба мо мувофиқ аст ё не. Ин як масъалаи тиҷорат аст. Мо бояд ин расмро ба масъулони тасмимгириҳои тиҷоратӣ нишон диҳем ва бипурсем: “Дар сурати пайдо шудани мушкилот мо метавонем чанд вақт интизор шавем? Оё мо дар вазъияти бадтар 3—5 дакика хобида метавонем?». Ва шумо қарор қабул мекунед.

Ва дар ин ҷо як нуктаи ҷолиб вуҷуд дорад. Дар конференция дар бораи Патронй як-ду маъруза дорем. Ва шояд шумо онро истифода мебаред. Ин худкор барои Postgres аст. GitLab ва Data Egret дар ин бора сӯҳбат карданд.

Ва агар шумо ҳолати худкоре дошта бошед, ки пас аз 30 сония рух медиҳад, пас шояд мо метавонем 10 дақиқа хобида бошем? Зеро то ин дам мо ба реплика мегузарем ва ҳама чиз хуб мешавад. Ин як масъалаи баҳсбарангез аст. Ман ҷавоби аниқ намедонам. Ман танҳо ҳис мекунам, ки ин мавзӯъ танҳо дар бораи барқарорсозии офатҳои табиӣ нест.

Агар мо аз нокомӣ муддати тӯлонӣ барқарор шавем, пас дар бисёр ҳолатҳои дигар мо нороҳат хоҳем шуд. Масалан, дар ҳамон таҷрибаҳо, вақте ки мо кореро анҷом медиҳем ва баъзан бояд 10 дақиқа интизор шавем.

Ман ба ҳар ҳол аз ҳад дур намеравам, ҳатто агар мо худкоркуниро дошта бошем. Чун қоида, арзишҳо ба монанди 64, 100 гигабайт арзишҳои хубанд. Баъзан он ҳатто меарзад, ки камтар интихоб кунед. Умуман, ин як илми нозук аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Барои такрор кардан, масалан, max_wal_size = 1, 8, шумо бояд амалиёти оммавиро чанд маротиба такрор кунед. Шумо инро кардед. Ва шумо мехоҳед, ки онро дар ҳамон замина дубора иҷро кунед, аммо шумо аллакай ҳама чизро нест кардаед. Чӣ бояд кард?

Ман ба шумо баъдтар дар бораи ҳалли мо ва чӣ коре мекунем, ки дар чунин ҳолатҳо такрор хоҳам кард. Ва ин дурусттарин равиш аст.

Аммо дар ин маврид бахти мо омад. Агар, тавре ки дар ин ҷо гуфта шудааст, "БОЗГОР, НАЗОРАТ, БОЗГАРДОН", пас мо метавонем НАЗОРАТРО такрор кунем. Яъне, агар худамон онро бекор карда бошем, пас метавонем такрор кунем. Ва аз ҷиҳати ҷисмонӣ маълумоти шумо дар он ҷо хоҳад буд. Шумо ҳатто ягон варам надоред. Шумо метавонед дар чунин DELETE такрор кунед.

Ин DELETE бо ROLLBACK барои танзими нуқтаи гузаргоҳ беҳтарин аст, ҳатто агар шумо лабораторияи пойгоҳи додаҳои дуруст ҷойгиршуда надошта бошед.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Мо бо як сутуни «и» аломате сохтем. Postgres дорои сутунҳои хидматрасонӣ мебошад. Онҳо ноаёнанд, агар махсус талаб карда нашавад. Инҳоянд: ctid, xmid, xmax.

Ctid суроғаи ҷисмонӣ аст. Саҳифаи сифр, навори аввал дар саҳифа.

Дидан мумкин аст, ки пас аз ROOLBACK тупле дар ҳамон ҷо монд. Яъне, мо метавонем бори дигар кӯшиш кунем, ҳамон тавр рафтор хоҳад кард. Ин чизи асосй аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Xmax вақти марги tuple аст. Он ворид карда шудааст, аммо Postgres медонад, ки ин транзаксия баргардонида шудааст, бинобар ин муҳим нест, ки он 0 аст ё амалиёти баргардонидашуда. Ин нишон медиҳад, ки DELETE метавонад барои такрор ва санҷиши амалиёти азими рафтори система истифода шавад. Шумо метавонед барои камбизоатон лабораторияҳои базавӣ созед.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ин дар бораи барномасозон аст. Дар бораи DBA низ онҳо ҳамеша барномасозонро барои ин сарзаниш мекунанд: "Чаро шумо чунин амалиёти тӯлонӣ ва душворро мекунед?" Ин мавзӯи комилан дигар перпендикуляр аст. Пештар маъмурият буд, акнун обод мешавад.

Аён аст, ки мо онро ба қисмҳо тақсим накардаем. Он равшан аст. Чунин НАЗОРАТ-ро барои як хӯшаи миллионҳо сатр ба қисмҳо шикастан ғайриимкон аст. Барои анҷом додани он 20 дақиқа вақт лозим аст ва ҳама чиз хоб меравад. Аммо, мутаассифона, ҳатто таҳиягарони ботаҷриба ҳатто дар ширкатҳои хеле калон хато мекунанд.

Чаро шикастан муҳим аст?

  • Агар бинем, ки диск сахт аст, пас биёед онро суст кунем. Ва агар мо шикаста бошем, мо метавонем таваққуфҳоро илова кунем, мо метавонем дросселро суст кунем.

  • Ва мо дигаронро муддати тӯлонӣ манъ намекунем. Дар баъзе мавридҳо муҳим нест, агар шумо партовҳои воқеиро, ки ҳеҷ кас дар болои он кор намекунад, хориҷ кунед, пас шумо эҳтимолан ба ҷуз кори автовакуум касеро манъ намекунед, зеро он мунтазири анҷоми транзаксия мешавад. Аммо агар шумо чизеро, ки ягон каси дигар талаб карда метавонад, нест кунед, он гоҳ онҳо баста мешаванд, як навъ аксуламали занҷирӣ вуҷуд хоҳад дошт. Дар вебсайтҳо ва барномаҳои мобилӣ аз транзаксияҳои тӯлонӣ канорагирӣ кардан лозим аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Ин ҷолиб аст. Ман бисёр вақт мебинам, ки таҳиягарон мепурсанд: "Кадом андозаи бастаро бояд интихоб кунам?"

Маълум аст, ки андозаи партия ҳар қадар калон бошад, ҳамон қадар хароҷоти муомилот кам мешавад, яъне хароҷоти иловагии транзаксия. Аммо дар айни замон, вақти ин транзаксия зиёд мешавад.

Ман як қоидаи хеле содда дорам: ҳарчи бештар бигиред, аммо иҷрои онро дар як сония зиёд накунед.

Чаро як сония? Шарҳ барои ҳама, ҳатто одамони ғайритехникӣ хеле содда ва фаҳмо аст. Мо реаксияро мебинем. Биёед 50 миллисонияро гирем. Агар чизе тағир ёбад, чашми мо вокуниш нишон медиҳад. Агар он камтар бошад, мушкилтар аст. Агар чизе пас аз 100 миллисония ҷавоб диҳад, масалан, шумо бо муш клик кардед ва он пас аз 100 миллисония ба шумо посух дод, шумо аллакай ин таъхири ночизро эҳсос мекунед. Як сония аллакай ҳамчун тормоз қабул карда мешавад.

Мувофиқи он, агар мо амалиёти оммавии худро ба таркишҳои 10 сония тақсим кунем, пас мо хавфи онро дорем, ки касеро банд мекунем. Ва он чанд сония кор мекунад ва одамон аллакай онро пай мебаранд. Бинобар ин ман афзалтар медонам, ки ин корро аз як сония зиёд накунам. Аммо дар айни замон, онро хеле хурд накунед, зеро хароҷоти муомилот назаррас хоҳад буд. Он барои пойгоҳ вазнинтар мешавад ва мушкилоти мухталифи дигар метавонанд ба миён оянд.

Мо андозаи бастаро интихоб мекунем. Дар ҳар як ҳолат мо метавонем инро ба таври гуногун иҷро кунем. Автомат кардан мумкин аст. Ва мо ба самаранокии коркарди як баста боварӣ дорем. Ин аст, ки мо як бастаро НАЗО МЕКУНЕМ ё НАВОРӢ мекунем.

Дар омади гап, ҳар чизе ки ман ба шумо мегӯям, танҳо дар бораи DELETE нест. Тавре ки шумо тахмин кардед, инҳо ҳама гуна амалиёти оммавӣ оид ба маълумот мебошанд.

Ва мо мебинем, ки план аъло аст. Шумо метавонед сканкунии индексро бинед, ҳатто танҳо сканкунии индекси беҳтар. Ва мо миқдори ками маълумот дорем. Ва ҳама чиз дар камтар аз як сония кор мекунад. Супер.

Ва мо ҳанӯз бояд боварӣ ҳосил кунем, ки ягон таназзул вуҷуд надорад. Чунин мешавад, ки порчахои аввал зуд кор карда баромада мешаванд ва баъд хама чиз торафт бадтар ва бадтар мешавад. Раванд чунин аст, ки шумо бояд бисёр озмоиш кунед. Маҳз барои ҳамин лабораторияҳои базавӣ лозиманд.

Ва мо бояд хануз чизе тайёр кунем, ки он ба мо имкон медихад, ки инро дар истехсолот дуруст назорат кунем. Масалан, мо метавонем вақтро дар журнал нависем, мо метавонем нависем, ки мо ҳоло дар куҷо ҳастем ва киро нест кардаем. Ва ин ба мо имкон медиҳад, ки баъдтар фаҳмем, ки чӣ рӯй дода истодааст. Ва агар чизе хато кунад, зуд мушкилотро пайдо кунед.

Агар ба мо лозим ояд, ки самаранокии пурсишҳоро тафтиш кунем ва мо бояд борҳо такрор кунем, пас чунин чизе ба монанди боти ҳамимонон вуҷуд дорад. Вай аллакай тайёр аст. Онро ҳар рӯз даҳҳо таҳиягарон истифода мебаранд. Ва ӯ метавонад бо дархост дар 30 сония як пойгоҳи бузурги терабайтиро таъмин кунад, нусхаи шахсии шумо. Ва шумо метавонед чизеро дар он ҷо нест кунед ва RESET гӯед ва онро дубора нест кунед. Шумо метавонед бо ин роҳ таҷриба кунед. Ман дар ин кор ояндаро мебинам. Ва мо аллакай ин корро карда истодаем.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Стратегияҳои тақсимкунӣ кадомҳоянд? Ман 3 стратегияи гуногуни тақсимкуниро мебинам, ки таҳиягарон дар баста истифода мебаранд.

Якум хеле содда аст. Мо ID рақамӣ дорем. Ва биёед онро ба фосилаҳои гуногун тақсим кунем ва бо он кор кунем. Камбудиаш равшан аст. Дар сегменти аввал мо шояд 100 хати партови воқеӣ дошта бошем, дар 5 хати дуюм ё тамоман не, ё ҳама 1 хат ба ахлот табдил меёбанд. Кори хеле нобаробар, аммо шикастан осон. Онҳо ID-и максималиро гирифта, онро шикастанд. Ин як муносибати соддалавҳона аст.

Стратегияи дуюм равиши мутавозин аст. Он дар Gitlab истифода мешавад. Мо мизро гирифта скан кардем. Мо сарҳадҳои бастаҳои ID-ро пайдо кардем, то ки ҳар як баста маҳз 10 000 сабт дошта бошад. Ва онҳо маро дар як навъ навбат мемонданд. Ва мо минбаъд коркард мекунем. Шумо метавонед ин корро дар якчанд ришта иҷро кунед.

Дар стратегияи аввал, ба ҳар ҳол, шумо метавонед ин корро дар якчанд ришта иҷро кунед. Ин мушкил нест.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

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

Аммо равиши сардтар ва оптималӣ вуҷуд дорад. Ин стратегияи сеюм аст. Ва агар имконпазир бошад, онро интихоб кардан беҳтар аст. Мо ин корро дар асоси индекси махсус мекунем. Дар ин ҳолат, он эҳтимолан як шохис дар асоси ҳолати ахлот ва ID-и мо хоҳад буд. Мо ID-ро дохил хоҳем кард, то он танҳо скан кардани индекс бошад, то мо ба тӯда наравем.

Одатан, танҳо сканкунии индекс нисбат ба сканкунии индекс тезтар аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Ва мо зуд ID-ҳои худро пайдо мекунем, ки онҳоро нест кардан мехоҳем. Мо пешакӣ BATCH_SIZE-ро интихоб мекунем. Ва мо на танхо онхоро кабул мекунем, балки ба таври махсус кабул карда, фавран ислох мекунем. Аммо мо онҳоро тавре қуфл мекунем, ки агар онҳо аллакай баста бошанд, мо онҳоро қуфл намекунем, балки идома медиҳем ва дигарҳоро мегирем. Ин барои навсозии гузариш баста аст. Ин хусусияти супер Postgres ба мо имкон медиҳад, ки агар мо хоҳем, дар якчанд ришта кор кунем. Эҳтимол дар як ришта. Ва он гоҳ CTE вуҷуд дорад - ин як дархост аст. Ва мо дар ошёнаи дуюми ин CTE кӯчонидани воқеӣ дорем - returning *. Шумо метавонед ID-ро баргардонед, аммо ин беҳтар аст *, агар шумо дар ҳар сатр маълумоти кам дошта бошед.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Чаро ба мо ин лозим аст? Барои гузориш додан ба мо ин лозим аст. Мо ҳоло ин қадар сатрҳоро нест кардаем. Ва сарҳадҳои мо аз рӯи ID ё created_at чунинанд. Шумо метавонед ҳадди аққал, ҳадди аксар. Чизи дигаре хам кардан мумкин аст. Дар ин ҷо шумо метавонед бисёр чизҳоро ҷамъ кунед. Ва ин барои мониторинг хеле қулай аст.

Дар бораи индекс боз як ёддошт мавҷуд аст. Агар мо қарор кунем, ки барои ин вазифаи мушаххас ба мо индекси махсус лозим аст, пас мо бояд боварӣ ҳосил кунем, ки он танҳо навсозиҳои навсозиро вайрон намекунад. Яъне Postgres чунин омор дорад. Инро дар pg_stat_user_tables барои ҷадвали шумо дидан мумкин аст. Шумо метавонед бубинед, ки навсозиҳои гарм истифода мешаванд ё не.

Ҳолатҳое ҳастанд, ки шохиси нави шумо онҳоро танҳо бурида метавонад. Ва ҳамаи навсозиҳои дигар, ки аллакай иҷро мешаванд, суст мешаванд. На танҳо аз он сабаб, ки индекс пайдо шуд (ҳар як индекс навсозиро каме суст мекунад, балки танҳо каме), балки дар ин ҷо он ҳоло ҳам корҳоро халалдор мекунад. Ва барои ин ҷадвал оптимизатсияи махсус кардан ғайриимкон аст. Ин баъзан рӯй медиҳад. Ин як нозукист, ки кам одамон дар хотир доранд. Ва ба ин раке қадам задан осон аст. Баъзан чунин мешавад, ки ба шумо лозим меояд, ки равишро аз тарафи дигар пайдо кунед ва ҳоло ҳам бе ин индекси нав кор кунед ё индекси дигар созед ё кори дигаре кунед, масалан, шумо метавонед усули дуюмро истифода баред.

Аммо ин стратегияи беҳтарин аст, ки чӣ гуна онро ба гурӯҳҳо тақсим кардан ва бо як дархост тирандозӣ кардан, каме дар як вақт нест кардан ва ғайра.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Муомилоти дарозмуддат - https://gitlab.com/snippets/1890447

Автовакууми басташуда https://gitlab.com/snippets/1889668

Масъалаи басташавӣ https://gitlab.com/snippets/1890428

Хатогии №5 хатои бузург аст. Николай аз Окметр дар бораи мониторинги Postgres сӯҳбат кард. Мутаассифона, мониторинги комили Postgres вуҷуд надорад. Баъзеҳо наздиктаранд, баъзеҳо дуртаранд. Окметр ба қадри кофӣ наздик аст, ки комил бошад, аммо бисёр чизҳо намерасанд ва илова кардан лозим аст. Шумо бояд ба ин омода бошед.

Масалан, беҳтар аст, ки қуттиҳои мурдаро назорат кунед. Агар шумо дар мизи шумо чизҳои зиёди мурда дошта бошед, пас чизе нодуруст аст. Беҳтар аст, ки ҳозир вокуниш нишон диҳем, вагарна дар он ҷо таназзул вуҷуд дорад ва мо метавонем бихобем. Он рӯй медиҳад.

Агар IO калон бошад, пас маълум аст, ки ин хуб нест.

Муомилоти дароз низ. Дар OLTP амалиёти дарозмуддат набояд иҷозат дода шавад. Ва дар ин ҷо истиноди порчае ҳаст, ки ба шумо имкон медиҳад, ки ин порчаро бигиред ва аллакай пайгирии муомилоти дарозмуддатро анҷом диҳед.

Чаро муомилоти дарозмуддат бад аст? Зеро ҳама қуфлҳо танҳо дар охир озод карда мешаванд. Ва мо ҳамаро маҳкам мекунем. Илова бар ин, мо барои ҳама ҷадвалҳо автовакуумро маҳкам мекунем. Ин тамоман хуб нест. Ҳатто агар шумо интизории гармро дар реплика фаъол карда бошед ҳам, ин бад аст. Умуман, беҳтар аст, ки дар ҳама ҷо аз муомилоти тӯлонӣ канорагирӣ кунед.

Агар мо мизҳои зиёде дошта бошем, ки чангкашак нашудаанд, пас мо бояд огоҳӣ дошта бошем. Чунин вазъият дар ин чо имконпазир аст. Мо ба кори автовакуум бавосита таъсир расонда метавонем. Ин порае аз Avito аст, ки ман онро каме беҳтар кардам. Ва он як воситаи ҷолиб барои дидани он чизест, ки мо бо автовакуум дорем. Масалан, дар он ҷо якчанд мизҳо интизоранд ва онҳо навбати худро интизор намешаванд. Шумо инчунин бояд онро дар мониторинг гузоред ва огоҳӣ дошта бошед.

Ва блокҳоро мебарорад. Ҷангали дарахтони басташуда. Ман аз касе чизе гирифтан ва такмил додани онро дӯст медорам. Дар ин ҷо ман аз Data Egret як CTE-и рекурсивии сард гирифтам, ки ҷангали дарахтони бастаро нишон медиҳад. Ин як чизи хуб барои ташхис аст. Ва мониторинг низ метавонад дар асоси он сохта шавад. Аммо ин бояд бодиққат анҷом дода шавад. Ба шумо лозим аст, ки барои худ як баёнияи хурде_тайм. Ва lock_timeout матлуб аст.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Баъзан ҳамаи ин хатогиҳо якҷоя рӯй медиҳанд.

Ба фикрам, дар ин чо хатои аз хама мухим ташкилй аст. ташкилотчигй аст, зеро технология кор намекунад. Ин рақами 2 - онҳо дар ҷои нодуруст тафтиш кардаанд.

Мо дар ҷои нодуруст тафтиш кардем, зеро мо клони истеҳсолӣ надорем, ки тафтиш кардан осон бошад. Таҳиягар метавонад умуман ба истеҳсолот дастрасӣ надошта бошад.

Ва мо дар ҷои нодуруст тафтиш кардем. Агар онҷо тафтиш мекарданд, мо худамон медидем. Таҳиягар метавонад ҳамаи инро ҳатто бидуни DBA бубинад, агар вай онро дар муҳити хуб тафтиш кунад, ки дар он миқдори якхела маълумот ва сохтори якхела мавҷуд аст. Хамаи ин таназзулро медид ва шарм медошт.

Бештар дар бораи вакууми мошин. Пас аз он ки мо як чанд миллион хатҳоро тоза кардем, ба мо лозим аст, ки REPACK кунем. Ин махсусан барои индексҳо муҳим аст. Пас аз он ки мо ҳама чизро дар он ҷо тоза кардем, онҳо худро бад ҳис мекунанд.

Ва агар шумо хоҳед, ки кори ҳаррӯзаи рахнакуниро баргардонед, ман тавсия медиҳам, ки онро зуд-зуд иҷро кунед, аммо хурдтар. Он метавонад дар як дақиқа як маротиба ё ҳатто каме бештар бошад. Ва мо бояд ду чизро назорат кунем: ин чизе хато надошта бошад ва аз он ақиб намонад. Ҳилае, ки ман нишон додам, ба шумо имкон медиҳад, ки инро ҳал кунед.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Он чизе ки мо мекунем, манбаи кушода аст. Ин дар GitLab нашр шудааст. Ва мо онро тавре месозем, ки одамон ҳатто бидуни DBA тафтиш кунанд. Мо лабораторияи пойгоҳи додаҳо месозем, яъне мо ҷузъи асосиеро, ки Ҷо дар он ҳоло кор мекунад, меномем. Ва шумо метавонед як нусхаи истеҳсолотро гиред. Ҳоло татбиқи Ҷо барои сустшавӣ мавҷуд аст, шумо метавонед дар он ҷо бигӯед: "фалон дархостро фаҳмонед" ва фавран натиҷаро барои нусхаи пойгоҳи додаҳо ба даст оред. Шумо ҳатто метавонед дар он ҷо DELETE-ро анҷом диҳед ва ҳеҷ кас пай намебарад.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Фарз мекунем, ки шумо 10 терабайт доред, мо лабораторияи махзани маълумотро низ 10 терабайт сохта истодаем. Ва 10 таҳиягарон метавонанд ҳамзамон бо пойгоҳи додаҳои 10 терабайтӣ кор кунанд. Ҳар кас метавонад он чизеро, ки мехоҳад, кунад. Метавонед нест кунед, тарк кунед ва ғайра. Ин афсонавӣ аст. Мо пагоҳ дар ин бора сӯҳбат хоҳем кард.

Муҳтарам DELETE. Николай Самохвалов (Postgres.ai)

Инро таъминоти лоғар меноманд. Ин таъминоти нозук аст. Ин як навъ хаёлест, ки таъхирҳоро дар таҳия ва озмоиш хеле бартараф мекунад ва ҷаҳонро дар ин замина ҷои беҳтаре месозад. Яъне, он танҳо ба шумо имкон медиҳад, ки аз мушкилот бо амалиёти оммавӣ канорагирӣ кунед.

Мисол: пойгоҳи додаҳои 5 терабайт, ба даст овардани нусха дар камтар аз 30 сония. Ва он ҳатто аз андоза вобаста нест, яъне чанд терабайт муҳим нест.

Имрӯз шумо метавонед ба он равед postgres.ai ва асбобҳои моро кобед. Шумо метавонед сабти ном шавед ва бубинед, ки дар он ҷо чӣ ҳаст. Шумо метавонед ин ботро барои худ насб кунед. Ин ройгон аст. нависед.

Саволҳои шумо

Бисёр вақт дар ҳолатҳои воқеӣ маълум мешавад, ки маълумоте, ки бояд дар ҷадвал боқӣ монад, нисбат ба он чизе, ки бояд нест карда шавад, хеле камтар аст. Яъне, дар чунин вазъият аксар вақт татбиқи ин равиш осонтар аст, вақте ки сохтани объекти нав осонтар аст, танҳо маълумоти заруриро дар он ҷо нусхабардорӣ кунед ва ҷадвали кӯҳнаро транскрипсия кунед. Равшан аст, ки ҳангоми гузариш ба шумо барои ин лаҳза муносибати нармафзор лозим аст. Ин равиш чӣ гуна аст?

Ин муносибати хеле хуб ва вазифаи хеле хуб аст. Он ба он чизе, ки pg_repack мекунад, хеле монанд аст, он ба он чизе, ки шумо бояд анҷом диҳед, хеле монанд аст, вақте ки шумо одамон онро 4 байт сохтанд. Бисёре аз чаҳорчӯбаҳо ин корро чанд сол пеш карда буданд ва плитаҳо нав калонтар шуданд ва онҳо бояд ба 8 байт табдил дода шаванд.

Ин вазифа хеле душвор аст. Мо инро кардем. Ва шумо бояд хеле эҳтиёткор бошед. Қулфҳо вуҷуд доранд ва ғайра Аммо ин кор аст. Яъне равиши стандартӣ истифодаи pg_repack аст. Шумо чунин аломатро эълон мекунед. Ва пеш аз он ки шумо онро бо маълумоти фаврӣ пур кунед, шумо инчунин як ҷадвалро эълон мекунед, ки ҳама тағиротро пайгирӣ мекунад. Дар он ҷо ҳиллаест, ки шумо ҳатто баъзе тағиротҳоро пайгирӣ карда наметавонед. Нозукиҳо вуҷуд доранд. Ва он гоҳ шумо иваз карда, тағиротҳоро иҷро мекунед. Вақте ки мо ҳамаро маҳкам мекунем, як таваққуфи кӯтоҳе хоҳад буд, аммо дар маҷмӯъ ин иҷро шуда истодааст.

Агар шумо ба pg_repack дар GitHub нигаред, пас вақте ки вазифаи табдил додани ID аз int 4 ба int 8 вуҷуд дошт, пас идеяи истифодаи худи pg_repack пайдо шуд. Ин ҳам имконпазир аст, аммо ин як усули ҳакерӣ аст, аммо он инчунин барои ин кор хоҳад кард. Шумо метавонед ба триггере, ки pg_repack-ро истифода мебарад, дахолат кунед ва дар он ҷо бигӯед: "Ба мо ин маълумот лозим нест", яъне мо танҳо он чизеро, ки ба мо лозим аст, интиқол медиҳем. Ва он гоҳ ӯ танҳо иваз мекунад ва ҳамин аст.

Бо ин равиш, мо инчунин нусхаи дуюми ҷадвалро мегирем, ки дар он маълумот аллакай индексатсия карда шудааст ва бо индексҳои зебо хеле ҳамвор ҷойгир карда шудааст.

Блот не, ин равиши хуб аст. Аммо ман медонам, ки кӯшишҳо барои таҳияи автоматизатсия барои ин, яъне барои ҳалли универсалӣ вуҷуд доранд. Ман метавонам шуморо бо ин автоматизатсия шинос кунам. Он дар Python навишта шудааст, чизи хуб.

Ман каме аз ҷаҳони MySQL ҳастам, бинобар ин барои гӯш кардан омадам. Ва мо ин усулро истифода мебарем.

Аммо ин танҳо он вақт аст, ки мо 90% дошта бошем. Агар мо 5% дошта бошем, пас истифодаи он чандон хуб нест.

Ташаккур барои гузориш! Агар барои сохтани нусхаи пурраи маҳсулот захира мавҷуд набошад, оё ягон алгоритм ё формула барои ҳисоб кардани сарборӣ ё андоза вуҷуд дорад?

Саволи хуб. То ҳол мо метавонем базаҳои бисёртерабайтиро пайдо кунем. Ҳатто агар сахтафзор дар он ҷо якхела набошад ҳам, масалан, хотираи кам, протсессори кам ва дискҳо комилан якхела набошанд ҳам, мо ин корро мекунем. Агар комилан ягон ҷо вуҷуд надошта бошад, пас шумо бояд дар ин бора фикр кунед. Бигзор то пагоҳ дар ин бора фикр кунам, омадӣ, сӯҳбат мекунем, ин саволи хуб аст.

Ташаккур барои гузориш! Шумо аввал дар бораи он, ки Постгреси олиҷаноб вуҷуд дорад, ки фалон маҳдудиятҳо дорад, аммо дар ҳоли рушд аст. Ва ин ҳама як асобаробар аст. Оё ҳамаи ин ба рушди худи Postgres, ки дар он як навъи DELETE deferent пайдо мешавад ё чизи дигаре, ки бояд дар сатҳи паст нигоҳ доштани он чизеро, ки мо кӯшиш мекунем, ки бо баъзе воситаҳои аҷиби худамон пинҳон кунем, мухолифат намекунад?

Агар дар SQL мо гуфта будем, ки дар як транзаксия бисёр сабтҳоро нест кунем ё нав кунем, пас Postgres чӣ гуна онро паҳн карда метавонад? Мо дар амалиёт аз ҷиҳати ҷисмонӣ маҳдуд ҳастем. Мо дар муддати тӯлонӣ ин корро мекунем. Ва мо дар ин вақт қуфл хоҳем кард ва ғайра.

Онҳо бо индексатсияҳо низ ҳамин тавр карданд.

Ман тахмин карда метавонам, ки ҳамон танзими гузаргоҳро автоматӣ кардан мумкин аст. Як рӯз ин метавонад рӯй диҳад. Аммо баъд ман аслан саволро намефаҳмам.

Савол ин аст: оё як вектори рушд вуҷуд дорад, ки дар он ҷо меравад ва дар ин ҷо ба шумо параллел меравад? Онхое. Оё хануз дар ин бора фикр намекунанд?

Ман дар бораи принципхое сухан рондам, ки хозир онхоро истифода бурдан мумкин аст. Боз як боти дигар вуҷуд дорад Нэнси, бо ин шумо метавонед танзими автоматии нуқтаи назоратиро анҷом диҳед. Оё ин ягон вақт дар Postgres рӯй медиҳад? Ман намедонам, ин ҳоло ҳам баррасӣ нашудааст. Мо хануз аз ин дурем. Аммо олимоне ҳастанд, ки системаҳои нав месозанд. Ва онҳо моро ба индексҳои автоматӣ тела медиҳанд. Пешрафтҳо мавҷуданд. Масалан, шумо метавонед танзими автоматиро бубинед. Он параметрҳоро ба таври худкор интихоб мекунад. Аммо ӯ то ҳол барои шумо танзими нуқтаи назоратӣ намекунад. Яъне, он барои иҷроиш, буфери ҷилди ва ғайра интихоб хоҳад кард.

Ва барои танзими нуқтаи гузаргоҳ шумо метавонед кори зеринро иҷро кунед: агар шумо ҳазор кластер ва қисмҳои гуногуни сахтафзор, мошинҳои гуногуни виртуалӣ дар абр дошта бошед, шумо метавонед боти моро истифода баред Нэнси автоматикунонй созанд. Ва max_wal_size ба таври худкор мувофиқи танзимоти мақсадноки шумо интихоб карда мешавад. Аммо то ба ҳол ин, мутаассифона, ҳатто ба ҳастаӣ дар ядро ​​​​наздик нест.

Нимирӯзи ба хайр Шумо дар бораи хатари муомилоти дарозмуддат сӯҳбат кардед. Шумо гуфтед, ки дар сурати ҳазф кардан автовакуум баста мешавад. Ин ба мо боз чӣ гуна зарар мерасонад? Зеро мо бештар дар бораи озод кардани фазо ва тавони истифода бурдани он сухан меронем. Боз чиро аз даст доданамон лозим?

Автовакуум метавонад дар ин ҷо мушкилоти калонтарин набошад. Ва далели он, ки муомилоти тӯлонӣ метавонад транзаксияҳои дигарро боздорад, эҳтимолияти хатарноктар аст. Вай метавонад вохӯрад ё наояд. Агар вай вохӯрд, он гоҳ вазъ метавонад хеле бад шавад. Ва бо автовакуум ин низ мушкилот аст. Ду мушкилот бо транзаксияҳои тӯлонӣ дар OLTP вуҷуд доранд: қуфлҳо ва автовакуум. Ва агар шумо фикру мулоҳизаҳои гарми интизориро дар реплика фаъол карда бошед, он гоҳ бастани автовакуум низ ба усто мерасад, он аз реплика меояд. Аммо дар он ҷо ҳадди аққал қуфл нахоҳад буд. Ва дар ин ҷо қуфлҳо хоҳанд буд. Мо дар бораи тағир додани маълумот гап мезанем, бинобар ин қуфлҳо дар ин ҷо як нуқтаи муҳим мебошанд. Ва агар ин муддати тӯлонӣ ва тӯлонӣ идома ёбад, пас транзаксияҳои бештар ва бештар баста мешаванд. Онҳо метавонанд дигаронро ба дом афтонанд. Ва дарахтони қуфл пайдо мешаванд. Ман пайвандеро ба порча пешниҳод кардам. Ва ин мушкилот назар ба мушкилоти автовакуум, ки танҳо ҷамъ шуда метавонад, зуд намоёнтар мешавад.

Ташаккур барои гузориш! Шумо гузориши худро аз он оғоз кардед, ки шумо нодуруст санҷидаед. Мо фикри худро идома додем, ки мо бояд ҳамон таҷҳизотро бо базаи якхела гирем. Фарз мекунем, ки мо ба таҳиякунанда замина додем. Ва ӯ дархостро иҷро кард. Ва ба назар чунин мерасад, ки ӯ хуб кор мекунад. Аммо он дар зинда тафтиш намекунад, аммо дар зинда, масалан, бори мо 60-70% аст. Ва ҳатто агар мо ин танзимро истифода барем, он чандон хуб нест

Доштани коршинос дар дастаи шумо ва истифодаи коршиносони DBA, ки метавонанд дар зери бори воқеии замина чӣ рӯй хоҳад дод, муҳим аст. Вақте ки мо танҳо тавассути тағироти поки худ гузаштаем, мо расмро мебинем. Аммо як равиши пешрафтатаре буд, ки мо боз ҳамон кореро анҷом додем, аммо бо сарбории истеҳсолӣ. Ин комилан олӣ аст. Мо ҳанӯз бояд то ин дараҷа рушд кунем. Баркамол аст. Мо сирф ба он чизе ки дорем, назар кардем ва инчунин дидем, ки оё мо захираҳои кофӣ дорем. Ин саволи хуб аст.

Вақте ки мо аллакай партовро интихоб мекунем ва мо, масалан, парчами ҳазфшуда дорем

Ин аст он чизе ки автовакуум дар Postgres ба таври худкор мекунад.

Оҳ, ӯ ин корро мекунад?

Автовакуум - ҷамъоварии партовҳо.

Ташаккур!

Ташаккур барои гузориш! Оё имкони фавран тарҳрезии пойгоҳи додаҳо бо тақсимкунӣ вуҷуд дорад, то тамоми партовҳо аз ҷадвали асосӣ дар ҷое ба паҳлӯ тоза карда шаванд?

Албатта доранд.

Пас оё мо метавонем худро муҳофизат кунем, агар мо мизеро қулф карда бошем, ки набояд истифода шавад?

Албатта доранд. Аммо ин саволи мурғ ва тухм аст. Агар хамаи мо донем, ки дар оянда чй ходиса руй медихад, пас, албатта, хамаи корхоро ба чо меорем. Аммо тиҷорат тағйир меёбад, сутунҳои нав ва дархостҳои нав пайдо мешаванд. Ва он гоҳ - оҳ, мо мехоҳем онро нест кунем. Аммо ин як ҳолати идеалист; он дар ҳаёт рӯй медиҳад, аммо на ҳамеша. Аммо дар маҷмӯъ ин як идеяи хуб аст. Танҳо буред ва ҳамин аст.

Манбаъ: will.com

Илова Эзоҳ