Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Manaʻo wau e heluhelu ʻoe i ka transcript o ka hōʻike mai ka hoʻomaka ʻana o 2016 e Andrey Salnikov "Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql"

Ma kēia hōʻike, e kālailai au i nā hewa nui i nā noi e kū mai ana ma ke kahua o ka hoʻolālā ʻana a me ke kākau ʻana i nā code noi. A e lawe wale wau i kēlā mau hewa e alakaʻi i ka bloat ma Postgresql. E like me ke kānāwai, ʻo kēia ka hoʻomaka o ka hopena o ka hana o kāu ʻōnaehana holoʻokoʻa, ʻoiai ʻaʻole i ʻike mua ʻia nā koi no kēia.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Hauʻoli e hoʻokipa i nā mea a pau! ʻAʻole like kēia hōʻike e like me ka mea ma mua mai kaʻu hoa hana. Kuhi nui ʻia kēia hōʻike i nā mea hoʻomohala ʻōnaehana backend no ka mea he nui mākou o nā mea kūʻai aku. A hana like lākou a pau. E haʻi wau iā ʻoe e pili ana iā lākou. E wehewehe au i nā mea make a maikaʻi ʻole e alakaʻi ai kēia mau hewa.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

No ke aha i hana ʻia ai nā hewa? Hana ʻia lākou no nā kumu ʻelua: ma ke ʻano maʻamau, malia paha e hana ʻia a ma muli o ka ʻike ʻole o kekahi mau hana e kū nei ma ka pae ma waena o ka waihona a me ka noi, a me ka ʻikepili ponoʻī.

E hāʻawi wau iā ʻoe i ʻekolu mau hiʻohiʻona me nā kiʻi weliweli o ka loaʻa ʻana o nā mea ʻino. E haʻi pōkole wau iā ʻoe e pili ana i ke ʻano hana i laila. A pehea e hana ai me lākou, i ka wā i hiki mai ai, a me nā ʻano pale e hoʻohana ai e pale aku i nā hewa. E haʻi wau iā ʻoe e pili ana i nā mea hana kōkua a hāʻawi i nā loulou pono.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Ua hoʻohana au i kahi waihona hoʻāʻo kahi i loaʻa iaʻu nā papa ʻelua. Hoʻokahi pā me nā moʻokāki mea kūʻai aku, ʻo kekahi me nā kālepa ma kēia mau moʻokāki. A me kekahi manawa pinepine mākou e hoʻonui i nā koena ma kēia mau moʻokāki.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

ʻO ka ʻikepili mua o ka pā: liʻiliʻi loa, 2 MB. ʻO ka manawa pane no ka waihona a me ka kikoʻī no ka hōʻailona maikaʻi loa. A he ukana maikaʻi loa - 2 mau hana i kēlā me kēia kekona e like me ka pā.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A ma o kēia hōʻike e hōʻike wau iā ʻoe i nā kiʻi i hiki iā ʻoe ke hoʻomaopopo pono i ka mea e hana nei. Loaʻa mau 2 paheʻe me nā kiʻi. ʻO ka paheʻe mua ka mea e hana maʻamau ma ke kikowaena.

A ma kēia kūlana, ʻike mākou he hōʻailona liʻiliʻi kā mākou. He liʻiliʻi ka index ma 2 MB. ʻO kēia ka pakuhi mua ma ka hema.

Paʻa a pōkole ka manawa pane maʻamau ma ke kikowaena. ʻO kēia ka pakuhi ʻākau ma luna.

Hōʻike ka pakuhi hema i nā hana lōʻihi loa. ʻIke mākou ua hoʻopau koke nā kālepa. A ʻaʻole hana ka autovacuum ma ʻaneʻi, no ka mea, he hoʻomaka ia. E hoʻomau ka hana a pono iā mākou.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

E hoʻolaʻa mau ʻia ka paheʻe lua i ka pā e hoʻāʻo ʻia. Ma kēia kūlana, hoʻololi mau mākou i nā koena moʻokāki o ka mea kūʻai aku. A ʻike mākou he maikaʻi loa ka manawa pane awelika no kahi hana hoʻohou, ʻoi aku ka liʻiliʻi ma mua o ka millisecond. ʻIke mākou i ka hoʻopau ʻia ʻana o nā kumuwaiwai (ʻo ia ka pakuhi ʻākau i luna) me ka liʻiliʻi.

Hōʻike ka pakuhi ʻākau haʻahaʻa i ka nui o ka hana a me ka hoʻomanaʻo disk a mākou e ʻimi ai i kā mākou laina makemake ma mua o ka hoʻonui ʻana. A ʻo ka helu o nā hana e like me ka hōʻailona he 2 i kēlā me kēia kekona, e like me kaʻu i ʻōlelo ai i ka hoʻomaka.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A i kēia manawa he pōʻino ko mākou. No kekahi kumu he hana poina lōʻihi. ʻO nā kumu maʻamau he banal:

  • ʻO kekahi o nā mea maʻamau, ua hoʻomaka mākou e komo i kahi lawelawe waho ma ke code noi. ʻAʻole pane kēia lawelawe iā mākou. ʻO ia hoʻi, ua wehe mākou i kahi kālepa, hoʻololi i ka waihona a hele mai ka palapala noi e heluhelu i ka leka uila a i ʻole lawelawe ʻē aʻe i loko o kā mākou ʻoihana, a no kekahi kumu ʻaʻole ia e pane mai iā mākou. A paʻa kā mākou kau i kahi mokuʻāina kahi i ʻike ʻole ʻia i ka wā e hoʻoholo ai.
  • ʻO ke kūlana ʻelua i ka wā i loaʻa ai kahi ʻokoʻa i kā mākou code no kekahi kumu. A ʻaʻole mākou i hana i ka pani ʻana o ke kālepa. A ua hoʻopau mākou i kahi kau kau ʻana me kahi kālepa wehe.
  • A ʻo ka mea hope loa he hihia maʻamau. He code haʻahaʻa kēia. Ke wehe nei kekahi mau frameworks i kahi kālepa. Ke kau nei ia, a ʻaʻole paha ʻoe i ʻike ma ka noi ua kau ʻia ʻoe.

Ma hea e alakaʻi ai ia mau mea?

A hiki i ka hoʻomaka ʻana o kā mākou papa ʻaina a me nā indexes e pehu nui. ʻO kēia ka hopena bloat like. No ka waihona, ʻo ia ka manaʻo e piʻi nui ka manawa pane ʻikepili a piʻi aʻe ka ukana ma ka kikowaena waihona. A ʻo ka hopena, e pilikia kā mākou noi. No ka mea, inā ua hoʻohana ʻoe i 10 milliseconds i kāu code ma kahi noi i ka waihona, 10 milliseconds ma kāu loiloi, a laila ua lawe kāu hana i 20 milliseconds e hoʻopau. A i kēia manawa e kaumaha loa kou kūlana.

A e ʻike kāua i ka hana. Hōʻike ka pakuhi hema hema he lōʻihi lōʻihi kā mākou kālepa. A inā mākou e nānā i ka pakuhi hema o luna, ʻike mākou ua lele koke ka nui o kā mākou papaʻaina mai ʻelua megabytes a i 300 megabytes. I ka manawa like, ʻaʻole i loli ka nui o ka ʻikepili i ka papaʻaina, ʻo ia hoʻi, aia ka nui o ka ʻōpala ma laila.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Ua hoʻololi pū ʻia ke kūlana maʻamau e pili ana i ka manawa pane kikowaena kikowaena e kekahi mau kauoha o ka nui. ʻO ia hoʻi, ua hoʻomaka nā noi a pau ma ke kikowaena e hāʻule loa. A i ka manawa like, ua hoʻokumu ʻia nā kaʻina Postgres kūloko ma ke ʻano o ka autovacuum, e hoʻāʻo nei e hana i kekahi mea a hoʻopau i nā kumuwaiwai.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

He aha ka hana me kā mākou hōʻailona? Ka mea like. ʻO kā mākou manawa pane maʻamau e like me ka hōʻailona ua lele i kekahi mau kauoha o ka nui. Ma ke ʻano o nā kumuwaiwai i hoʻopau ʻia, ʻike mākou ua piʻi nui ka ukana ma ka processor. ʻO kēia ka pakuhi ʻākau ma luna. A ua hoʻonui ʻia no ka mea pono e hoʻokaʻawale ka mea hana i kahi pūʻulu o nā laina pono ʻole e ʻimi i ka mea e pono ai. ʻO kēia ka pakuhi ʻākau lalo. A ʻo ka hopena, ua hoʻomaka kā mākou helu kelepona i kēlā me kēia kekona e hāʻule nui loa, no ka mea ʻaʻole i loaʻa i ka waihona ka manawa e hana ai i ka helu like o nā noi.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Pono kākou e hoʻi i ke ola. Hele mākou ma ka pūnaewele a ʻike i nā hana lōʻihi e alakaʻi i nā pilikia. Loaʻa mākou a pepehi i kēia kālepa. A ke lilo nei nā mea a pau i mea maʻamau no mākou. Hana nā mea a pau e like me ka mea e pono ai.

Ua ʻoluʻolu mākou, akā ma hope o kekahi manawa hoʻomaka mākou e ʻike ʻaʻole e hana like ka noi ma mua o ka pilikia. Hoʻomaʻamaʻa ʻia nā noi me ka lohi, a ʻoi aku ka lohi. Hoʻokahi a me ka hapalua a ʻelua mau manawa lohi i kaʻu hiʻohiʻona. ʻOi aku ka kiʻekiʻe o ka ukana ma ke kikowaena ma mua o ka ulia pōpilikia.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A ʻo ka nīnau: "He aha ka mea e hana nei i ke kahua i kēia manawa?" A ʻo ke kūlana e hiki mai ana me ke kumu. Ma ka pakuhi kālepa hiki iā ʻoe ke ʻike ua pau ia a ʻaʻohe maoli nā hana lōʻihi. Akā ua hoʻonui nui ʻia ka nui o ka hōʻailona i ka wā o ka pōpilikia. A mai ia manawa ʻaʻole lākou i emi iho. Ua kūpaʻa ka manawa maʻamau ma ke kumu. A me he mea lā e hiki mai ana nā pane i ka wikiwiki e ʻae ʻia e mākou. Ua lilo ka autovacuum i mea ikaika a hoʻomaka e hana i kekahi mea me ka hōʻailona, ​​​​no ka mea pono e kānana i nā ʻikepili hou aʻe.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Ma ke kiko'ī, e like me ka papa ho'āʻo me nā moʻolelo, kahi e hoʻololi ai mākou i nā koena: ʻo ka manawa pane no kahi noi me he mea lā ua hoʻi i ka maʻamau. Akā ʻo ka ʻoiaʻiʻo he hoʻokahi a me ka hapa ke kiʻekiʻe.

A mai ka ukana ma luna o ke kaʻina hana, ʻike mākou ʻaʻole i hoʻi ka ukana ma luna o ka mea hana i ka waiwai i koi ʻia ma mua o ka hāʻule ʻana. A aia nā kumu ma ka pakuhi ʻākau haʻahaʻa. Hiki ke ʻike ʻia ke ʻimi ʻia nei kekahi mau mea hoʻomanaʻo ma laila. ʻO ia hoʻi, no ka loaʻa ʻana o ka laina i koi ʻia, hoʻopau mākou i nā kumuwaiwai o ke kikowaena waihona i ka wā e hoʻokaʻawale ana i nā ʻikepili pono ʻole. Ua kūpaʻa ka helu o nā hana i kēlā me kēia kekona.

Maikaʻi ka holoʻokoʻa, akā ʻoi aku ka ʻino o ke kūlana ma mua. Hoʻomaʻemaʻe i ka hōʻino ʻana i ka waihona ma muli o kā mākou noi e hana pū me kēia waihona.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A no ka hoʻomaopopo ʻana i ka mea e hana nei ma laila, inā ʻaʻole ʻoe ma ka hōʻike mua, i kēia manawa e kiʻi i kahi manaʻo liʻiliʻi. Manao e pili ana i ka hana o loko. No ke aha ke kaʻa kaʻa a he aha kāna hana?

He pōkole no ka hoʻomaopopo ʻana. I kekahi manawa he papaʻaina kā mākou. Loaʻa iā mākou nā lālani i ka papaʻaina. Hiki i kēia mau laina ke hana, ola, a me nā mea e pono ai mākou i kēia manawa. Hōʻailona ʻia lākou i ka ʻōmaʻomaʻo ma ke kiʻi. A aia nā laina make i hana mua ʻia, ua hōʻano hou ʻia, a ua ʻike ʻia nā mea hou ma luna o lākou. A hōʻailona ʻia lākou ʻaʻole hoihoi hou i ka waihona. Akā aia lākou i ka papaʻaina ma muli o kahi hiʻohiʻona Postgres.

No ke aha ʻoe e pono ai i kahi kaʻa kaʻa? I kekahi manawa, hele mai ka autovacuum, komo i ka waihona a nīnau iā ia: "E ʻoluʻolu e hāʻawi mai iaʻu i ka id o ka hana kahiko loa e wehe nei i ka waihona." Hoʻihoʻi ka waihona i kēia id. A ʻo ka autovacuum, e hilinaʻi ana iā ia, e hoʻokaʻawale i nā laina i ka papaʻaina. A inā ʻike ʻo ia ua hoʻololi ʻia kekahi mau laina e nā kālepa kahiko loa, a laila aia iā ia ke kuleana e kaha iā lākou i mau laina e hiki ai iā mākou ke hoʻohana hou i ka wā e hiki mai ana ma ke kākau ʻana i nā ʻikepili hou ma laila. He kaʻina hana hope kēia.

I kēia manawa, hoʻomau mākou i ka hana me ka waihona a hoʻomau i ka hoʻololi ʻana i ka papaʻaina. A ma kēia mau laina, hiki iā mākou ke hoʻohana hou, kākau mākou i nā ʻikepili hou. A pēlā mākou e loaʻa ai i kahi pōʻai, ʻo ia hoʻi i nā manawa āpau e ʻike ʻia ai kekahi mau laina kahiko make ma laila, ma kahi o lākou e kākau mākou i nā laina hou e pono ai mākou. A he kūlana maʻamau kēia no PostgreSQL e hana.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

He aha ka mea i hana ʻia i ka wā o ka ulia pōpilikia? Pehea i hana ʻia ai kēia hana ma laila?

Ua loaʻa iā mākou kahi hōʻailona ma kekahi kūlana, ola kekahi, mau laina make. Ua hiki mai ke kaʻa kaʻa. Nīnau ʻo ia i ka ʻikepili he aha kā mākou hana mua loa a he aha kāna id. Ua loaʻa iaʻu kēia id, he mau hola i hala aku nei, he ʻumi paha mau minuke aku nei. Ma muli o ke kaumaha o kāu ukana ma kāu waihona. A hele ʻo ia e ʻimi i nā laina i hiki iā ia ke hōʻailona i hoʻohana hou ʻia. A ʻaʻole i loaʻa iaʻu nā laina like ʻole ma kā mākou papaʻaina.

Akā i kēia manawa hoʻomau mākou e hana me ka papaʻaina. Hana mākou i kekahi mea i loko, hoʻololi, hoʻololi i ka ʻikepili. He aha ka mea e hana ai ka waihona i kēia manawa? ʻAʻohe ona koho akā e hoʻohui i nā laina hou i ka hope o ka papaʻaina e kū nei. A pēlā e hoʻomaka ai ka nui o kā mākou papaʻaina e pehu.

I ka ʻoiaʻiʻo, pono mākou i nā laina ʻōmaʻomaʻo e hana. Akā i loko o ia pilikia, ʻike ʻia he haʻahaʻa loa ka pākēneka o nā laina ʻōmaʻomaʻo ma ka papaʻaina holoʻokoʻa.

A ke hoʻokō mākou i kahi nīnau, pono e hele ka ʻikepili i nā laina āpau: ʻulaʻula a me ka ʻōmaʻomaʻo, e ʻike i ka laina i makemake ʻia. Aʻo ka hopena o ka hoʻouluʻana i kahi papaʻaina me kaʻikepili waiwaiʻole i kapaʻiaʻo "bloat", kahi eʻai ai i kā mākou wahi disk. E hoʻomanaʻo, he 2 MB, ua lilo ia i 300 MB? I kēia manawa e hoʻololi i nā megabytes i gigabytes a e nalowale koke ʻoe i kāu mau kumuwaiwai disk.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

He aha nā hopena e loaʻa iā mākou?

  • I kaʻu laʻana, ua ulu ka papaʻaina a me ka index 150 mau manawa. Ua loaʻa i kekahi o kā mākou mea kūʻai aku nā hihia make i ka wā i hoʻomaka wale ai lākou e holo i waho o ka hakahaka disk.
  • ʻAʻole e emi iho ka nui o nā pākaukau ponoʻī. Hiki i ka Autovacuum i kekahi mau hihia ke ʻoki i ka huelo o ka papaʻaina inā he mau laina make wale nō. Akā, no ka hoʻololi mau ʻana, hiki i kahi laina ʻōmaʻomaʻo ke maloʻo ma ka hopena a ʻaʻole e hoʻonui ʻia, aʻo nā mea ʻē aʻe a pau e kākau ʻia ma kahi o ka hoʻomaka o ka pā. Akā he mea hiki ʻole kēia i ka nui o kāu papaʻaina, no laila ʻaʻole pono ʻoe e manaʻolana.
  • Pono ka ʻikepili e hoʻokaʻawale i kahi hui o nā laina pono ʻole. A hoʻopau mākou i nā kumuwaiwai disk, hoʻopau mākou i nā kumuwaiwai a me ka uila.
  • A pili pono kēia i kā mākou noi, no ka mea, inā i ka hoʻomaka ʻana ua hoʻohana mākou i 10 milliseconds ma ke noi, 10 milliseconds ma kā mākou code, a laila i ka wā o ka ulia ua hoʻomaka mākou e hoʻolilo i kekona ma ke noi a me 10 milliseconds ma ke code, ʻo ia hoʻi he kauoha o ua emi ka nui o ka hana noi. A i ka wā i hoʻoholo ʻia ai ka pōʻino, hoʻomaka mākou e hoʻolilo i 20 milliseconds ma kahi noi, 10 milliseconds ma kahi code. ʻO ia ke ʻano o ka hāʻule ʻana o hoʻokahi manawa a me ka hapa i ka huahana. A ʻo kēia wale nō ma muli o kahi hana i hoʻomaloʻo, ma muli paha o kā mākou hewa.
  • Aʻo ka nīnau: "Pehea e hiki ai iā mākou ke hoʻihoʻi i nā mea a pau?" No laila ua maikaʻi nā mea a pau me mākou a hiki koke mai nā noi ma mua o ka ulia pōpilikia.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

No kēia kumu aia kekahi pōʻaiapuni o ka hana i hana ʻia.

ʻO ka mea mua pono mākou e ʻimi i nā papa pilikia i hoʻopā ʻia. Hoʻomaopopo mākou aia ma kekahi mau papa ʻoi aku ka ikaika o ka hoʻopaʻa ʻana, ma nā papa ʻē aʻe ʻaʻole ikaika. A no kēia hoʻohana mākou i ka hoʻonui pgstattuple. Ma ka hoʻokomo ʻana i kēia hoʻonui, hiki iā ʻoe ke kākau i nā nīnau e kōkua iā ʻoe e ʻike i nā papa ʻaina i hoʻohālua loa.

Ke loaʻa iā ʻoe kēia mau papa, pono ʻoe e kaomi iā lākou. Aia nā mea hana no kēia. Ma kā mākou hui hoʻohana mākou i ʻekolu mau mea hana. ʻO ka mea mua ka VACUUM FULL i kūkulu ʻia. He lokoino, ʻoʻoleʻa a me ke aloha ʻole, akā i kekahi manawa he mea pono loa ia. Pg_repack и pgcompacttable - ʻO kēia nā mea pono ʻaoʻao ʻekolu no ke kaomi ʻana i nā papa. A mālama pono lākou i ka waihona.

Hoʻohana ʻia lākou ma muli o ka mea maʻalahi iā ʻoe. Akā, e haʻi wau iā ʻoe e pili ana i kēia ma ka hope loa. ʻO ka mea nui he ʻekolu mau mea hana. Nui nā mea e koho ai.

Ma hope o ka hoʻoponopono ʻana i nā mea āpau a hōʻoia i ka maikaʻi o nā mea āpau, pono mākou e ʻike pehea e pale ai i kēia kūlana i ka wā e hiki mai ana:

  • Hiki ke pale maʻalahi. Pono ʻoe e nānā i ka lōʻihi o nā kau ma ke kikowaena Master. ʻOi aku ka pōʻino o nā kau i ka palaualelo ma ke kūlana kālepa. ʻO kēia ka poʻe i wehe wale i kahi kālepa, hana i kekahi mea a haʻalele, a i ʻole kau wale ʻia, nalowale i ke code.
  • A iā ʻoe, ma ke ʻano he mea hoʻomohala, he mea nui e hoʻāʻo i kāu code ke kū mai kēia mau kūlana. ʻAʻole paʻakikī ke hana. He māka pono kēia. E pale akuʻoe i ka nui o nā pilikia "keiki" e pili ana i nā hana lōʻihi.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Ma kēia mau pakuhi, makemake au e hōʻike iā ʻoe pehea i loli ai ka hōʻailona a me ke ʻano o ka waihona ma hope o koʻu hele ʻana i ka hōʻailona me VACUUM FULL i kēia hihia. ʻAʻole kēia he hana noʻu.

Ua hoʻi koke ka nui papa i kona kūlana hana maʻamau o ʻelua mau megabytes. ʻAʻole i pili nui kēia i ka manawa pane maʻamau no ke kikowaena.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Akā, kūikawā no kā mākou hōʻailona hōʻoia, kahi i hōʻano hou ai mākou i nā koena moʻokāki, ʻike mākou ua hoʻemi ʻia ka manawa pane awelika no kahi noi e hoʻonui i ka ʻikepili i ka hōʻailona i nā pae mua. Ua hāʻule pū nā kumuwaiwai i hoʻopau ʻia e ka mea hana e hoʻopau ai i kēia noi i nā pae ma mua o ka hāʻule ʻana. A ʻo ka pakuhi ʻākau haʻahaʻa e hōʻike ana i kēia manawa ua ʻike mākou i ka laina e pono ai mākou i kēia manawa, me ka hele ʻole ʻana i nā puʻu o nā laina make i laila ma mua o ka hoʻopili ʻia ʻana o ka papaʻaina. A ua mau ka awelika o ka manawa noi ma kahi o ka pae like. Akā, eia kaʻu, he hewa i kaʻu lako.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

ʻO kēia kahi i pau ai ka moʻolelo mua. ʻO ia ka mea maʻamau. A hiki i kēlā me kēia mea, me ka nānā ʻole i ka ʻike o ka mea kūʻai aku a me ke ʻano o ka mākaukau o nā mea polokalamu. Ma hope a ma hope paha hiki mai kēia.

ʻO ka moʻolelo ʻelua, kahi mākou e puʻunaue ai i ka ukana a hoʻopaʻa i nā kumuwaiwai kikowaena

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

  • Ua ulu a lilo mākou i poʻe koʻikoʻi. A maopopo iā mākou he kope kā mākou a he mea maikaʻi ia no mākou e kaulike i ka ukana: e kākau i ka Haku, a heluhelu mai ka kope. A ʻo ka maʻamau e kū mai kēia kūlana inā makemake mākou e hoʻomākaukau i kekahi mau hōʻike a i ʻole ETL. A hauʻoli loa ka ʻoihana i kēia. Makemake ʻo ia i nā hōʻike like ʻole me ka nui o nā ʻikepili paʻakikī.
  • He mau hola ka lōʻihi o nā hōʻike, no ka mea, ʻaʻole hiki ke helu ʻia nā ʻikepili paʻakikī i nā milliseconds. ʻO mākou, e like me nā kānaka koa, kākau i nā code. Ma ka noi hoʻokomo mākou e hana i ka hoʻopaʻa ʻana ma luna o ka Haku, a hoʻokō i nā hōʻike ma ka replica.
  • Ka puana ana i ka ukana.
  • Hana maikaʻi nā mea a pau. Nui mākou.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A pehea ke ʻano o kēia kūlana? Ma kahi kikoʻī ma kēia mau pakuhi, ua hoʻohui pū au i ka lōʻihi o nā kālepa mai ka replica no ka lōʻihi o ke kālepa. ʻO nā kiʻi ʻē aʻe a pau e pili wale ana i ke kikowaena Master.

I kēia manawa, ua ulu kaʻu papa hōʻike. He nui aku o lakou. ʻIke mākou i ka paʻa o ka manawa pane kikowaena kikowaena. ʻIke mākou ma ka replica loaʻa iā mākou kahi kālepa lōʻihi e holo ana no 2 mau hola. ʻIke mākou i ka hana mālie o ka autovacuum, e hana ana i nā laina make. A maikaʻi nā mea a pau iā mākou.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

ʻO ke kikoʻī, e like me ka pā i hoʻāʻo ʻia, hoʻomau mākou i ka hoʻonui ʻana i nā koena moʻokāki ma laila. A loaʻa iā mākou kahi manawa pane paʻa no nā noi, hoʻohana waiwai paʻa. Ua maikaʻi nā mea a pau iā mākou.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Maikaʻi nā mea a pau a hiki i ka manawa e hoʻomaka ai kēia mau hōʻike e hoʻi i ke ahi ma muli o ka paio me ka hana hou ʻana. A puhi hou lākou i nā manawa maʻamau.

Hele mākou ma ka pūnaewele a hoʻomaka e heluhelu i ke kumu o kēia. A loaʻa iā mākou kahi hopena.

ʻO ka hopena mua e hoʻonui i ka latency replication. ʻIke mākou e holo ana kā mākou hōʻike no 3 mau hola. Hoʻonoho mākou i ka hoʻopaneʻe hou ʻana i 3 mau hola. Ke hoʻomaka nei mākou i nā mea āpau, akā ke hoʻomau nei mākou i nā pilikia me nā hōʻike i hoʻopau ʻia i kekahi manawa.

Makemake mākou e hemolele nā ​​mea a pau. Piʻi mākou i mua. A loaʻa iā mākou kahi hoʻonohonoho ʻoluʻolu ma ka Pūnaewele - hot_standby_feedback. E ho'ā kāua. Hot_standby_feedback hiki iā mākou ke kāohi i ka autovacuum ma ka Haku. No laila, hoʻopau loa mākou i nā paio replication. A maikaʻi nā mea a pau no mākou me nā hōʻike.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A he aha ka mea e hana nei me ke kikowaena Master i kēia manawa? A pilikia mākou me ka Master server. I kēia manawa ke ʻike nei mākou i nā kiʻi i ka wā i hoʻohana ʻia ai kēia mau hoʻonohonoho ʻelua. A ʻike mākou ua hoʻomaka ka hālāwai ma kā mākou replica i ke ʻano o ke kūlana ma ke kikowaena Master. Loaʻa iā ia ka hopena no ka mea ua hoʻomaha ʻo ia i ka autovacuum, e hoʻomaʻemaʻe i nā laina make. Ua piʻi hou ka nui o kā mākou papaʻaina. Ua piʻi aʻe ka awelika o ka manawa hoʻokō nīnau ma ka ʻikepili holoʻokoʻa. Hoʻopili iki nā autovacuums.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

ʻOiaʻiʻo, mai kā mākou pā, ʻike mākou ua lele ka ʻikepili ma luna o ka lewa. Ua piʻi like ka hoʻohana ʻana i ka CPU. Ke hele hou nei mākou ma waena o nā laina make a make ʻole. A ua hāʻule ka manawa pane no kēia hōʻailona a me ka helu o nā kālepa.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

He aha ke ʻano inā ʻaʻole mākou ʻike i kaʻu e kamaʻilio nei ma mua?

  • Hoʻomaka mākou e ʻimi i nā pilikia. Inā loaʻa iā mākou nā pilikia ma ka ʻāpana mua, ʻike mākou ma muli paha o ke kālepa lōʻihi a hele i ka Haku. He pilikia ko makou ma ka Haku. Sausages iā ia. Ua wela, kona Load Average ma kahi o hoʻokahi haneli.
  • Ua lohi nā noi ma laila, akā ʻaʻole mākou e ʻike i nā kālepa lōʻihi ma laila. A ʻaʻole maopopo iā mākou he aha ka mea. ʻAʻole maopopo iā mākou kahi e nānā ai.
  • Nānā mākou i nā lako kikowaena. Ua hāʻule paha kā mākou hoʻouka kaua. Ua pau paha kā mākou lāʻau hoʻomanaʻo. ʻAe, hiki i kekahi mea ke hana. Akā ʻaʻole, he mea hou nā kikowaena, hana maikaʻi nā mea a pau.
  • Ke holo nei nā mea a pau: nā luna hoʻomalu, nā mea hoʻomohala a me ke alakaʻi. ʻAʻohe mea kōkua.
  • A i kekahi manawa hoʻomaka koke nā mea a pau e hoʻoponopono iā ia iho.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

I kēia manawa, ua hana ʻia ka noi ma kā mākou kope a waiho ʻia. Ua loaʻa iā mākou ka hōʻike. Hauʻoli mau ka ʻoihana. E like me kāu e ʻike ai, ua ulu hou kā mākou hōʻailona a ʻaʻole e emi. Ma ka pakuhi me nā kau, ua waiho wau i kahi ʻāpana o kēia kālepa lōʻihi mai kahi kope i hiki iā ʻoe ke koho i ka lōʻihi o ka lōʻihi a hiki i ke kūlana paʻa.

Ua pau ke kau. A ma hope wale nō o kekahi manawa, hele mai ke kikowaena ma ka hoʻonohonoho. A ʻo ka manawa pane maʻamau no nā noi ma ke kikowaena Master e hoʻi i ka maʻamau. No ka mea, ʻo ka hope loa, loaʻa i ka autovacuum ka manawa e hoʻomaʻemaʻe a hōʻailona i kēia mau laina make. A hoʻomaka ʻo ia e hana i kāna hana. A pehea ka wikiwiki o kāna hana ʻana, pēlā mākou e hoʻonohonoho ai.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Wahi a ka papa i hoʻāʻo ʻia, kahi e hoʻonui ai mākou i nā kaulike moʻokāki, ʻike mākou i ke kiʻi like. Hoʻomaʻamaʻa mālie ʻia ka manawa hoʻonui moʻokāki maʻamau. Hoʻemi pū ʻia nā kumuwaiwai i hoʻopau ʻia e ka mea hana. A hoʻi ka helu o nā hana i kēlā me kēia kekona i ka maʻamau. Akā, ua hoʻi hou mākou i ka maʻamau, ʻaʻole like me mākou ma mua o ka ulia.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

I kekahi hihia, loaʻa iā mākou kahi drawdown hana, e like me ka hihia mua, e hoʻokahi a me ka hapa i ʻelua manawa, a i kekahi manawa ʻoi aku.

Me he mea lā ua hana pono mākou i nā mea a pau. E puunaue i ka ukana. ʻAʻole hana ʻia nā mea hana. Ua māhele mākou i nā noi e like me ko mākou manaʻo, akā naʻe, ua hewa nā mea a pau.

  • Mai ho'ā i hot_standby_feedback? ʻAe, ʻaʻole ʻōlelo ʻia e hoʻāla iā ia me ke kumu ikaika ʻole. No ka mea e pili pono ana kēia wili i ke kikowaena Master a hoʻokuʻu i ka hana o ka autovacuum ma laila. Ma ka ʻae ʻana iā ia ma kekahi kope a poina iā ia, hiki iā ʻoe ke pepehi i ka Haku a loaʻa nā pilikia nui me ka noi.
  • E hoʻonui i ka max_standby_streaming_delay? ʻAe, no nā hōʻike he ʻoiaʻiʻo kēia. Inā loaʻa iā ʻoe kahi hōʻike ʻekolu hola a ʻaʻole makemake ʻoe e hāʻule ma muli o nā paio replication, a laila e hoʻonui i ka lohi. ʻAʻole pono kahi hōʻike lōʻihi i ka ʻikepili i hiki mai i ka waihona i kēia manawa. Inā loaʻa iā ʻoe no ʻekolu hola, a laila ke holo nei ʻoe no kekahi manawa ʻikepili kahiko. A iā ʻoe, inā he lohi ʻekolu hola a i ʻole he lohi ʻeono hola ʻaʻole ia e hoʻololi, akā e loaʻa iā ʻoe nā hōʻike mau a ʻaʻohe pilikia me ka hāʻule ʻana.
  • Pono, pono ʻoe e hoʻomalu i nā kau lōʻihi ma nā replicas, ʻoi aku ka nui inā hoʻoholo ʻoe e hiki iā hot_standby_feedback ma kahi kope. No ka mea hiki i kekahi mea ke hiki. Hāʻawi mākou i kēia kope i ka mea hoʻomohala i hiki iā ia ke hoʻāʻo i nā nīnau. Ua kākau ʻo ia i kahi noi pupule. Ua hoʻokuʻu ʻo ia a hele aku e inu kī, a loaʻa iā mākou ke Kumu i hoʻokumu ʻia. A i ʻole, hoʻokomo mākou i ka noi hewa i laila. He ʻokoʻa nā kūlana. Pono e nānā pono ʻia nā kau ma nā kope e like me ka Haku.
  • A inā loaʻa iā ʻoe nā nīnau wikiwiki a lōʻihi ma nā replicas, a laila ma kēia hihia ʻoi aku ka maikaʻi e hoʻokaʻawale iā lākou e puʻunaue i ka ukana. He loulou kēia i streaming_delay. No nā mea wikiwiki, e loaʻa i hoʻokahi kope me ka hoʻopaneʻe liʻiliʻi. No nā noi hōʻike lōʻihi, e loaʻa i kahi kope i hiki ke lohi i nā hola 6 a i ʻole ka lā. He kūlana maʻamau loa kēia.

Hoʻopau mākou i nā hopena ma ke ʻano like:

  • Loaʻa iā mākou nā papaʻaina puʻupuʻu.
  • A hoʻopaʻa mākou iā ia me ka mea hana maʻalahi e kūpono iā mākou.

Pau ka moʻolelo ʻelua ma ʻaneʻi. E neʻe kākou i ka moʻolelo ʻekolu.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

He mea maʻamau nō hoʻi iā mākou kahi e neʻe ai mākou.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

  • Ke ulu nei kekahi huahana lako polokalamu. Ke loli nei nā koi no ia. I kekahi hihia, makemake mākou e hoʻomohala. A pono mākou e hoʻonui i ka ʻikepili i ka papaʻaina, ʻo ia hoʻi e holo i kahi mea hou e pili ana i kā mākou neʻe ʻana no ka hana hou a mākou e hoʻolauna nei ma ke ʻano o kā mākou hoʻomohala ʻana.
  • ʻAʻole ʻoluʻolu ka ʻano ʻikepili kahiko. E ʻōlelo mākou e huli mākou i ka papa ʻelua, kahi aʻu i hana ai i kēia mau moʻokāki. A e'ōlelo mākou aia lākou i loko o nā rubles, a ua hoʻoholo mākou e hoʻonui i ka pololei a hana i nā kopecks. A no kēia pono mākou e hana i kahi mea hou: hoʻonui i ka mahina me ka nui o ke kālepa i hoʻokahi haneli.
  • I kēia ao, hoʻohana mākou i nā mea hana hoʻokele ʻikepili ʻokoʻa. E ʻōlelo kākou Liquibase. Hoʻopaʻa inoa mākou i ko mākou neʻe ʻana ma laila. Hoʻāʻo mākou iā ia ma kā mākou kumu hoʻāʻo. Ua maikaʻi nā mea a pau. Ke hele nei ka mea hou. Hoʻopaʻa ia i ka hana no kekahi manawa, akā loaʻa iā mākou ka ʻikepili hou. A hiki iā mākou ke hoʻomaka i nā hana hou ma kēia. Ua ho'āʻo a nānāʻia nā mea a pau. Ua hoʻokūpaʻaʻia nā mea a pau.
  • Ua hana mākou i ka hana i hoʻolālā ʻia a lawe i ka neʻe ʻana.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Eia ka neʻe ʻana me ka hōʻano hou i hōʻike ʻia i mua ou. No ka mea ʻo kēia kaʻu mau kālepa moʻokāki, ʻo 15 GB ka pā. A ma muli o ko mākou hōʻano hou ʻana i kēlā me kēia laina, ua pāpālua mākou i ka nui o ka papaʻaina me ka hōʻano hou, no ka mea ua kākau hou mākou i kēlā me kēia laina.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

I ka wā o ka neʻe ʻana, ʻaʻole hiki iā mākou ke hana i kekahi mea me kēia pā, no ka mea, ua kau ʻia nā noi āpau iā ia a kali a hiki i ka pau ʻana o kēia mea hou. Eia naʻe, makemake wau e huki i kou manaʻo i nā helu ma ka axis vertical. ʻO ia hoʻi, loaʻa iā mākou kahi manawa noi ma mua o ka neʻe ʻana ma kahi o 5 milliseconds a me ka hoʻouka ʻana o ka mea hana, ʻo ka helu o nā hana poloka no ka heluhelu ʻana i ka hoʻomanaʻo disk ma lalo o 7,5.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Ua hoʻokō mākou i ka neʻe ʻana a loaʻa hou nā pilikia.

Ua holomua ka neʻe ʻana, akā:

  • ʻOi aku ka lōʻihi o ka hoʻopau ʻana i ka hana kahiko.
  • Ua ulu hou ka papaʻaina i ka nui.
  • Ua ʻoi aku ka nui o ka ukana ma ke kikowaena ma mua o ka wā ma mua.
  • A, ʻoiaʻiʻo, ke hoʻomau nei mākou i ka hana i hana maikaʻi, ua hoʻomaikaʻi iki mākou.

A he bloat hou keia, e hoopau hou ana i ko kakou ola.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Eia wau e hōʻike nei i ka papaʻaina, e like me nā hihia ʻelua ma mua, ʻaʻole e hoʻi i kona nui mua. Me he mea lā ua lawa ka ukana kikowaena kikowaena.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A inā e huli mākou i ka papa me nā moʻolelo, e ʻike mākou ua pālua ka manawa noi no kēia papa. Ua lele ka ukana ma ka papa hana a me ka helu o nā laina i hoʻomanaʻo ʻia ma luna o 7,5, akā haʻahaʻa. A lele ʻo ia i 2 mau manawa i ka hihia o nā kaʻina hana, 1,5 mau manawa i ka hihia o nā hana poloka, ʻo ia hoʻi ua loaʻa iā mākou kahi degradation i ka hana kikowaena. A ma muli o ka hopena - degradation o ka hana o kā mākou noi. I ka manawa like, ua mau ka helu o nā kelepona i ka pae like.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

A ʻo ka mea nui ma aneʻi ʻo ka hoʻomaopopo ʻana pehea e hana pono ai ia mau neʻe. A pono lākou e hana. Hana mau mākou i kēia mau neʻe ʻana.

  • ʻAʻole hiki wale ia mau neʻe nui. Pono lākou e mālama mau.
  • Pono ke kiaʻi ʻia e ke kanaka ʻike. Inā he DBA kāu ma kāu hui, a laila e hana ka DBA. 'O kāna 'oihana. Inā ʻaʻole, a laila e hana ka mea akamai loa, ʻo wai ka mea ʻike pehea e hana ai me nā ʻikepili.
  • ʻO kahi schema database hou, ʻoiai inā hoʻonui mākou i hoʻokahi kolamu, hoʻomākaukau mau mākou i nā pae, ʻo ia hoʻi ma mua ma mua o ka ʻōwili ʻia ʻana o ka mana hou o ka noi:
  • Hoʻohui ʻia nā kahua hou a mākou e hoʻopaʻa ai i ka ʻikepili hou.
  • Hoʻololi mākou i ka ʻikepili mai ka māla kahiko i ka māla hou i nā ʻāpana liʻiliʻi. No ke aha mākou e hana nei i kēia? ʻO ka mea mua, mālama mākou i ke kaʻina hana o kēia kaʻina hana. Ua ʻike mākou ua hoʻoili mua mākou i nā ʻāpana he nui a ua nui mākou i koe.
  • A ʻo ka hopena maikaʻi ʻelua, ʻo ia ma waena o kēlā me kēia pūʻulu e pani mākou i ke kālepa, wehe i kahi hou, a hiki i kēia ke hana i ka autovacuum e like me ka pā, e kaha i nā laina make no ka hoʻohana hou ʻana.
  • No nā laina e ʻike ʻia i ka wā e holo ana ka noi (ke holo nei mākou i ka palapala noi kahiko), hoʻohui mākou i kahi mea e kākau ai i nā waiwai hou i nā kahua hou. I ko mākou hihia, he hoʻonui kēia i hoʻokahi haneli o ka waiwai kahiko.
  • Inā paʻakikī loa mākou a makemake i ka māla hoʻokahi, a laila ma hope o ka pau ʻana o nā neʻe a ma mua o ka ʻōwili ʻana i kahi mana hou o ka noi, inoa hou mākou i nā kahua. Hāʻawi ʻia nā inoa kahiko i nā inoa i haku ʻia, a ua kapa hou ʻia nā māla hou i nā inoa kahiko.
  • A ma hope wale nō e hoʻomaka mākou i kahi mana hou o ka noi.

A i ka manawa like ʻaʻole e loaʻa iā mākou kahi puʻupuʻu a ʻaʻole e pilikia i ka hana.

ʻO kēia kahi i pau ai ka moʻolelo ʻekolu.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat.sql

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat_approx.sql

A i kēia manawa he kikoʻī hou aʻe e pili ana i nā mea hana aʻu i ʻōlelo ai ma ka moʻolelo mua loa.

Ma mua o ka ʻimi ʻana i ka bloat, pono ʻoe e hoʻokomo i ka extension pgstattuple.

No laila ʻaʻole pono ʻoe e hele mai me nā nīnau, ua kākau mākou i kēia mau nīnau i kā mākou hana. Hiki iā ʻoe ke hoʻohana iā lākou. ʻElua mau noi ma ʻaneʻi.

  • ʻO ka mea mua e lōʻihi ka manawa e hana ai, akā e hōʻike iā ʻoe i nā waiwai bloat pololei mai ka papaʻaina.
  • ʻOi aku ka wikiwiki o ka hana ʻelua a ʻoi aku ka maikaʻi inā pono ʻoe e loiloi wikiwiki inā he bloat a ʻaʻole paha e like me ka papaʻaina. A e hoʻomaopopo hoʻi ʻoe aia mau ka bloat i kahi papa Postgres. He hiʻohiʻona kēia o kāna kumu hoʻohālike MVCC.
  • A ʻo 20% bloat ka mea maʻamau no nā papa i ka nui o nā hihia. ʻO ia hoʻi, ʻaʻole ʻoe e hopohopo a hoʻopaʻa i kēia pākaukau.

Ua noʻonoʻo mākou pehea e ʻike ai i nā papa i pehu ʻia me ka ʻikepili pono ʻole.

I kēia manawa pehea e hoʻoponopono ai i ka bloat:

  • Inā loaʻa iā mākou kahi papa liʻiliʻi a me nā disks maikaʻi, ʻo ia hoʻi, ma kahi papa a hiki i kahi gigabyte, hiki ke hoʻohana i ka VACUUM FULL. Lawe ʻo ia i kahi laka kūʻokoʻa mai iā ʻoe ma ka papaʻaina no kekahi mau kekona a maikaʻi, akā e hana ʻo ia i nā mea āpau me ka wikiwiki a me ke koʻikoʻi. He aha ka hana a VACUUM FULL? Lawe ia i kahi laka kūʻokoʻa ma ka papaʻaina a kākau hou i nā lālani ola mai nā papa kahiko i ka papaʻaina hou. A i ka hopena, hoʻololi ʻo ia iā lākou. Holoi ia i nā faila kahiko a hoʻololi i nā mea kahiko me nā mea hou. Akā no ka lōʻihi o kāna hana, lawe ia i kahi laka kūʻokoʻa ma ka papaʻaina. ʻO ia hoʻi, ʻaʻole hiki iā ʻoe ke hana i kekahi mea me kēia papa ʻaina: mai kākau iā ia, ʻaʻole heluhelu i loko, ʻaʻole hoʻi e hoʻololi. A koi ʻo VACUUM FULL i kahi wahi disk hou e kākau i ka ʻikepili.
  • Mea hana aʻe pg_repack. I kona kumu, ua like loa ia me VACUUM FULL, no ka mea, kākau hou ia i ka ʻikepili mai nā faila kahiko i nā mea hou a hoʻololi iā lākou i ka papaʻaina. Akā i ka manawa like, ʻaʻole ia e lawe i kahi laka kūʻokoʻa ma ka papaʻaina i ka hoʻomaka ʻana o kāna hana, akā lawe wale ia i ka manawa i loaʻa iā ia ka ʻikepili mākaukau i mea e pani ai i nā faila. Ua like kona koina punawai disk me ko VACUUM FULL. Pono ʻoe i kahi kikowaena disk hou, a he mea koʻikoʻi kēia i kekahi manawa inā loaʻa iā ʻoe nā papa terabyte. A pololi loa ia no ka mea e hana ikaika ana me I/O.
  • ʻO ke kolu o ka pono pgcompacttable. ʻOi aku ka akahele me nā kumuwaiwai no ka mea e hana ana ia e like me nā kumu ʻokoʻa iki. ʻO ka manaʻo nui o ka pgcompacttable ʻo ia ka neʻe ʻana i nā lālani ola āpau i ka hoʻomaka o ka papaʻaina e hoʻohana ana i nā mea hou i ka papaʻaina. A laila holo ia i kahi hakahaka ma luna o kēia pākaukau, no ka mea, ʻike mākou he mau lālani ola ma ka hoʻomaka a me nā lālani make ma ka hope. A ʻo ka vacuum ponoʻī e ʻoki i kēia huelo, ʻo ia hoʻi, ʻaʻole ia e koi nui i kahi diski hou. A i ka manawa like, hiki ke ʻoki ʻia ma ke ʻano o nā kumuwaiwai.

ʻO nā mea a pau me nā mea hana.

Nā hewa maʻamau i nā noi e alakaʻi i ka bloat ma postgresql. Andrey Salnikov

Inā ʻike ʻoe i ke kumuhana bloat hoihoi i ka ʻōlelo o ka delving hou i loko, eia kekahi mau loulou pono:

Ua ho'āʻo hou au e hōʻike i kahi moʻolelo weliweli no nā mea hoʻomohala, no ka mea, ʻo lākou kā mākou mau mea kūʻai pololei o nā ʻikepili a pono e hoʻomaopopo i ka mea a me nā hana e alakaʻi ai. Manaʻo wau ua lanakila wau. Mahalo i kou nānā ʻana!

ʻO kāu mau nīnau

Mahalo no ka hōʻike! Ua kamaʻilio ʻoe pehea e ʻike ai i nā pilikia. Pehea e ao aku ai? ʻO ia hoʻi, loaʻa iaʻu kahi kūlana kahi i kau ʻia ai nā noi ʻaʻole wale no ka mea ua komo lākou i kekahi mau lawelawe waho. He mau hui hihiu wale keia. Aia kekahi mau noi liʻiliʻi a maikaʻi ʻole i kau ʻia no hoʻokahi lā, a laila hoʻomaka e hana i kekahi mau mea lapuwale. ʻO ia hoʻi, like loa me ka mea āu i wehewehe ai. Pehea e hahai ai i kēia? Noho a nānā mau i ke noi i paʻa? Pehea e pale ʻia ai kēia?

I kēia hihia, he hana kēia no nā luna hoʻomalu o kāu hui, ʻaʻole pono no ka DBA.

He luna hoʻoponopono au.

He ʻike ko PostgreSQL i kapa ʻia ʻo pg_stat_activity e hōʻike ana i nā nīnau pili. A ʻike ʻoe i ka lōʻihi o ke kau ʻana ma laila.

Pono au e komo a nānā i kēlā me kēia 5 minuke?

E hoʻonohonoho i ka cron a nānā. Inā he noi lōʻihi kāu, e kākau i leka a ʻo ia nō. ʻO ia hoʻi, ʻaʻole pono ʻoe e nānā me kou mau maka, hiki ke hana ʻia. E loaʻa iā ʻoe kahi leka, pane ʻoe iā ia. A i ʻole hiki iā ʻoe ke pana aunoa.

Aia kekahi mau kumu maopopo e hiki mai ai kēia?

Ua helu au i kekahi. Nā laʻana paʻakikī ʻē aʻe. A hiki ke kamaʻilio no ka manawa lōʻihi.

Mahalo no ka hōʻike! Makemake wau e wehewehe e pili ana i ka pono pg_repack. Inā ʻaʻole ʻo ia e hana i kahi laka kūʻokoʻa, a laila...

Hana ʻo ia i kahi laka kūʻokoʻa.

... a laila hiki iaʻu ke nalowale i ka ʻikepili. ʻAʻole anei e hoʻopaʻa kaʻu noi i kekahi mea i kēia manawa?

ʻAʻole, hana maʻalahi ia me ka papaʻaina, ʻo ia hoʻi, hoʻoili mua ʻo pg_repack i nā laina ola a pau. ʻO ka mea maʻamau, aia kekahi ʻano komo i ka papaʻaina ma laila. Ke kiola wale nei ʻo ia i kēia huelo pony.

ʻO ia, hana maoli ʻo ia i ka hopena?

I ka hopena, lawe ʻo ia i kahi laka kūʻokoʻa e hoʻololi i kēia mau faila.

E ʻoi aku ka wikiwiki ma mua o VACUUM FULL?

VACUUM FULL, i ka wā i hoʻomaka ai, lawe koke i kahi laka kūʻokoʻa. A hiki i kāna hana ʻana i nā mea a pau, ʻaʻole ʻo ia e hoʻokuʻu iā ia. A lawe ʻo pg_repack i kahi laka kūʻokoʻa i ka manawa o ka hoʻololi ʻana i ka faila. I kēia manawa ʻaʻole ʻoe e kākau ma laila, akā ʻaʻole e nalowale ka ʻikepili, e maikaʻi nā mea āpau.

Aloha! Ua kamaʻilio ʻoe e pili ana i ka hana ʻana o kahi pahu kaʻa. Aia kekahi pakuhi me ka ʻulaʻula, melemele a me ka ʻōmaʻomaʻo. ʻO ia hoʻi, nā melemele - hōʻailona ʻo ia iā lākou i holoi ʻia. A ʻo ka hopena, hiki ke kākau ʻia kahi mea hou i loko o lākou?

ʻAe. ʻAʻole holoi ʻo Postgres i nā laina. Loaʻa iā ia kēlā ʻano kikoʻī. Inā hōʻano hou mākou i kahi laina, hōʻailona mākou i ka laina kahiko i holoi ʻia. ʻIke ʻia ka id o ke kālepa i hoʻololi i kēia laina, a kākau mākou i kahi laina hou. A loaʻa iā mākou nā kau e hiki ke heluhelu iā lākou. I kekahi manawa ua ʻelemakule loa lākou. A ʻo ke kumu o ka hana ʻana o ka autovacuum ʻo ia ka hele ʻana i kēia mau laina a hōʻailona iā lākou he mea pono ʻole. A hiki iā ʻoe ke kākau i ka ʻikepili ma laila.

Maopopo iaʻu. Akā ʻaʻole ia ka nīnau e pili ana. ʻAʻole wau i hoʻopau. E manaʻo mākou he papaʻaina kā mākou. Loaʻa iā ia nā māla o ka nui like ʻole. A inā e hoʻāʻo wau e hoʻokomo i kahi mea hou, ʻaʻole kūpono paha ia i loko o ka cell kahiko.

ʻAʻole, i kēlā me kēia hihia ua hōʻano hou ʻia ka laina holoʻokoʻa ma laila. Loaʻa iā Postgres nā hiʻohiʻona mālama ʻikepili ʻelua. Koho ia mai ke ʻano ʻikepili. Aia ka ʻikepili i mālama pono ʻia i ka papaʻaina, a aia pū kekahi ʻikepili tos. He nui kēia o ka ʻikepili: kikokikona, json. Mālama ʻia lākou i nā papa ʻokoʻa. A e like me kēia mau papa, ʻo ka moʻolelo like me ka bloat e puka mai ana, ʻo ia hoʻi, ua like nā mea a pau. Hoʻokaʻawale ʻia lākou.

Mahalo no ka hōʻike! Ua ʻae ʻia ka hoʻohana ʻana i nā nīnau manawa manawa e hoʻopaʻa i ka lōʻihi?

Apono loa. Hoʻohana mākou i kēia ma nā wahi āpau. A no ka loaʻa ʻole o kā mākou lawelawe ponoʻī, hāʻawi mākou i ke kākoʻo mamao, loaʻa iā mākou nā ʻano mea kūʻai aku. A ua māʻona loa nā kānaka a pau i kēia. ʻO ia hoʻi, loaʻa iā mākou nā hana cron e nānā. Ua ʻae wale ʻia ka lōʻihi o nā kau me ka mea kūʻai aku, ma mua ʻaʻole mākou e ʻae. He minuke paha, he 10 minuke paha. Pili ia i ka ukana ma ke kumu a me kona kumu. Akā hoʻohana mākou a pau i ka pg_stat_activity.

Mahalo no ka hōʻike! Ke hoʻāʻo nei au e hoʻopili i kāu hōʻike i kaʻu mau noi. A me he mea lā e hoʻomaka mākou i kahi kālepa ma nā wahi a pau, a hoʻopau maopopo i nā wahi āpau. Inā loaʻa kekahi ʻokoʻa, a laila hiki mau ka rollback. A laila hoʻomaka wau e noʻonoʻo. Ma hope o nā mea a pau, ʻaʻole hiki ke hoʻomaka me ka maopopo. He hōʻailona paha kēia i ke kaikamahine. Inā hōʻano hou wau i kahi moʻolelo, e hoʻomaka anei ke kālepa ma PostgreSQL a hoʻopau wale i ka wā e hemo ai ka pilina?

Inā ʻoe e kamaʻilio nei e pili ana i ka pae noi, a laila pili ia i ka mea hoʻokele āu e hoʻohana nei, ma ka ORM e hoʻohana ʻia nei. Nui nā hoʻonohonoho ma laila. Inā hiki iā ʻoe ke hoʻopaʻa i ka auto, a laila hoʻomaka kahi kālepa ma laila a pani koke.

ʻO ia hoʻi, pani koke ia ma hope o ka hōʻano hou?

Pili ia i nā hoʻonohonoho. Ua kapa wau i kahi hoʻonohonoho. ʻO kēia ka hoʻopaʻa ʻokoʻa. He mea maʻamau. Inā ʻae ʻia, ua wehe a pani ʻia ke kālepa. Inā ʻaʻole ʻoe i ʻōlelo "hoʻomaka i ke kālepa" a me "ka hoʻopau ʻana i ke kālepa", akā ua hoʻomaka wale i kahi noi i loko o ke kau.

Aloha! Mahalo no ka hōʻike! E noʻonoʻo kākou he waihona kā mākou e pehu a pehu nei a laila pau ka hakahaka ma ke kikowaena. Aia kekahi mau mea hana e hoʻoponopono ai i kēia kūlana?

Pono e nānā pono ʻia ka hakahaka ma ke kikowaena.

No ka laʻana, hele ka DBA i ke kī, aia ma kahi hōkele, etc.

Ke hana ʻia kahi ʻōnaehana faila, hana ʻia kekahi ʻano wahi hoʻihoʻi kahi i kākau ʻole ʻia ai ka ʻikepili.

He aha inā ma lalo o ka ʻole?

Ma laila ua kapa ʻia ʻo ia he wahi i hoʻopaʻa ʻia, ʻo ia hoʻi, hiki ke hoʻokuʻu ʻia a ma muli o ka nui o ka hana ʻana, loaʻa iā ʻoe kahi kaʻawale. ʻAʻole maopopo iaʻu ka nui o lākou. A ma kekahi hihia ʻē aʻe, e hāʻawi i nā disks i loaʻa iā ʻoe kahi lumi e hana ai i kahi hana hou. Hiki iā ʻoe ke holoi i kekahi papa ʻaʻole pono ʻoe.

Aia kekahi mau mea hana ʻē aʻe?

Hana lima mau ia. A ʻike ʻia ka mea maikaʻi loa ma laila, no ka mea he koʻikoʻi kekahi ʻikepili a ʻaʻole koʻikoʻi kekahi. A no kēlā me kēia waihona a me ka noi e hana pū me ia, pili ia i ka ʻoihana. Hoʻoholo mau ʻia ma ka ʻāina.

Mahalo no ka hōʻike! ʻElua aʻu nīnau. ʻO ka mea mua, ua hōʻike ʻoe i nā kiʻi paheʻe e hōʻike ana i ka wā e paʻa ai nā kālepa, e ulu ana ka nui o ka papaʻaina a me ka nui kuhikuhi. A ʻoi aku ma luna o ka hōʻike aia kahi pūʻulu o nā pono hana e hoʻopili ai i ka papa. Pehea ka index?

Hoʻopili pū lākou iā lākou.

Akā ʻaʻole pili ka vacuum i ka index?

Hana kekahi me kahi index. No ka laʻana, pg_rapack, pgcompacttable. Hoʻokumu hou ka vacuum i nā kuhikuhi a pili iā lākou. Me ka VACUUM FULL ka manaʻo e hoʻopau i nā mea āpau, ʻo ia hoʻi.

A ʻo ka nīnau ʻelua. ʻAʻole maopopo iaʻu ke kumu i hilinaʻi nui ʻia ai nā hōʻike e pili ana i nā replicas i ka replication ponoʻī. Me he mea lā ua heluhelu ʻia nā hōʻike, a ua kākau ʻia ke kope.

He aha ke kumu o ka paio kope? Loaʻa iā mākou kahi Haku ma nā kaʻina hana. Loaʻa iā mākou kahi pahu kaʻa e hele nei. He aha ka hana a ka autovacuum? Ke ʻoki nei ʻo ia i kekahi mau laina kahiko. Inā i kēia manawa he noi mākou ma ka replica e heluhelu ana i kēia mau laina kahiko, a ma luna o ka Haku kahi kūlana i hōʻailona ʻia e ka autovacuum i kēia mau laina i hiki ke kākau ʻia, a laila ua hoʻopau mākou iā lākou. A ua loaʻa iā mākou kahi ʻikepili, i ka wā e pono ai mākou e kākau hou i kēlā mau laina e pono ai ka noi ma ka replica, e kali ke kaʻina hana replication no ka manawa pau āu i hoʻonohonoho ai. A laila e hoʻoholo ʻo PostgreSQL i ka mea nui aku iā ia. A ʻoi aku ka mea nui iā ia ma mua o ka noi, a e pana ʻo ia i ka noi i mea e hana ai i kēia mau hoʻololi i ke kope.

Andrey, he nīnau kaʻu. ʻO kēia mau kiʻi nani āu i hōʻike ai i ka wā o ka hōʻike ʻana, ʻo ia ka hopena o ka hana a kekahi ʻano pono o kāu? Pehea i hana ʻia ai nā pakuhi?

He lawelawe kēia Okmeter.

He huahana kālepa kēia?

ʻAe. He huahana kalepa keia.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka