Hoʻonui no ka palaualelo: pehea e hoʻomaikaʻi ai ʻo PostgreSQL 12 i ka hana

Hoʻonui no ka palaualelo: pehea e hoʻomaikaʻi ai ʻo PostgreSQL 12 i ka hana

ʻO PostgreSQL 12, ʻO ka mana hou loa o "ka punaewele punaewele relational open source maikaʻi loa o ka honua," e puka mai ana i loko oʻelua pule (inā hele nā ​​mea a pau e like me ka hoʻolālā). Hoʻopili kēia i ka papa hana maʻamau o ka hoʻokuʻu ʻana i kahi mana hou me kahi ton o nā hiʻohiʻona hou i hoʻokahi manawa i ka makahiki, a ʻoiaʻiʻo, he mea kupanaha. ʻO ia ke kumu i lilo ai au i lālā ikaika o ke kaiāulu PostgreSQL.

I koʻu manaʻo, ʻaʻole e like me nā hoʻokuʻu mua, ʻaʻole i loaʻa i ka PostgreSQL 12 hoʻokahi a ʻelua mau hiʻohiʻona kipi (e like me ka partitioning a i ʻole ka huli ʻana i ka parallelism). Ua ʻakaʻaka wau i ka hiʻohiʻona nui o PostgreSQL 12 ʻoi aku ka paʻa. ʻAʻole anei ʻo ia kāu mea e pono ai ke mālama ʻoe i ka ʻikepili koʻikoʻi o kāu ʻoihana?

Akā ʻaʻole pau ʻo PostgreSQL 12 ma laila: me nā hiʻohiʻona hou a me ka hoʻomaikaʻi ʻana, ʻoi aku ka maikaʻi o nā noi. a ʻo nā mea a pau āu e hana ai ʻo ka hoʻomaikaʻi ʻana!

(ʻAe, kūkulu hou paha i nā kuhikuhi, akā i kēia hoʻokuʻu ʻana ʻaʻole ia he mea weliweli e like me kā mākou maʻamau.)

He mea maikaʻi loa ka hoʻomaikaʻi ʻana i ka PostgreSQL a hauʻoli koke i nā hoʻomaikaʻi koʻikoʻi me ka ʻole o ka haunaele pono ʻole. I kekahi mau makahiki i hala aku nei, ua nānā au i ka hoʻonui ʻana mai PostgreSQL 9.4 a i PostgreSQL 10 a ʻike i ke ʻano o ka wikiwiki ʻana o ka noi no ka hoʻomaikaʻi ʻana i ka hulina hulina ma PostgreSQL 10. A ʻo ka mea nui loa, ʻaʻohe mea i koi ʻia mai iaʻu (e hoʻonohonoho wale i kahi hoʻonohonoho hoʻonohonoho. max_parallel_workers).

ʻAe, ʻoi aku ka maikaʻi o ka hana ʻana o nā noi ma hope koke o ka hoʻonui ʻana. A ke hoʻāʻo nui nei mākou e ʻoluʻolu i nā mea hoʻohana, no ka mea, ʻoi aku ka nui o ka PostgreSQL.

No laila pehea e hiki ai i kahi hoʻonui maʻalahi iā PostgreSQL 12 ke hauʻoli iā ʻoe? E haʻi aku wau iā ʻoe i kēia manawa.

ʻO nā hoʻomaikaʻi helu helu nui

Me ka ʻole o ka indexing, ʻaʻole e hele mamao kahi waihona. Pehea e hiki ai iā ʻoe ke loaʻa koke ka ʻike? Kāhea ʻia ka ʻōnaehana kuhikuhi kumu o PostgreSQL B-lāʻau. Hoʻolālā ʻia kēia ʻano index no nā ʻōnaehana mālama.

Hoʻohana wale mākou i ka mea hoʻohana CREATE INDEX ON some_table (some_column), a he nui nā hana a PostgreSQL no ka mālama ʻana i ka index i kēia lā ʻoiai mākou e hoʻokomo mau, hoʻonui, a holoi i nā waiwai. Hana nā mea a pau iā ia iho, me he mea lā ma ke kilokilo.

Akā, hoʻokahi pilikia nā index PostgreSQL - lākou ua hoonuiia a e hoʻonui i kahi diski a hoʻemi i ka hana o ka ʻikepili a me ka hoʻonui ʻana. ʻO ka "bloat" ke ʻōlelo nei au i ka mālama pono ʻole ʻana i ka hoʻolālā kuhikuhi. Hiki paha kēia - a ʻaʻole paha - pili i nā ʻōpala ʻōpala e wehe ai MAHELE (mahalo iā Peter Gaghan no ka ʻike)Peter Geoghegan)). ʻIke nui ʻia ka bloat index i nā haʻahaʻa hana kahi e loli ikaika ai ka index.

Hoʻomaikaʻi maikaʻi ʻo PostgreSQL 12 i ka hana ʻana o nā huaʻōlelo B-lāʻau, a ua hōʻike ʻia nā hoʻokolohua me nā benchmarks e like me TPC-C ma ka awelika he 40% ka liʻiliʻi i hoʻohana ʻia i kēia manawa. I kēia manawa, hoʻemi mākou i ka manawa ʻaʻole wale ma ka mālama ʻana i nā indexes B-tree (ʻo ia hoʻi, ma nā hana kākau), akā no ka lawe ʻana i ka ʻikepili, no ka mea ʻoi aku ka liʻiliʻi o nā kuhikuhi.

Nā noi e hoʻopou hou i kā lākou mau papa - maʻamau nā noi OLTP (ka hoʻoili kūʻai manawa maoli) - e hoʻohana ʻoi aku ka maikaʻi o ka disk a me nā noi noi. ʻOi aku ka nui o ka diski, ʻoi aku ka nui o ka nui o ka ʻikepili e ulu me ka ʻole o ka hoʻomaikaʻi ʻana i ka ʻōnaehana.

Pono kekahi mau hoʻolālā hoʻomaikaʻi e kūkulu hou i nā index B-tree no ka hoʻohana ʻana i kēia mau pono (e.g. pg_upgrade ʻaʻole e kūkulu hou i nā kuhikuhi. Ma nā mana mua o PostgreSQL, ʻo ke kūkulu hou ʻana i nā indexes nui ma nā papa i hopena i ka downtime nui no ka mea ʻaʻole hiki ke hoʻololi ʻia i kēia manawa. Akā ʻo PostgreSQL 12 kekahi hiʻohiʻona ʻē aʻe: i kēia manawa hiki iā ʻoe ke kūkulu hou i nā indexes e like me ke kauoha REINDEX I KA HOIKEe pale loa i ka wā hoʻomaha.

Aia kekahi mau hoʻomaikaʻi ʻē aʻe i ka ʻōnaehana indexing ma PostgreSQL 12. ʻO kahi mea ʻē aʻe kahi i loaʻa ai kahi kilokilo - kākau-mua log, aka WAL (kakau-ahead log). Hoʻopaʻa ʻia kahi log kākau mua i kēlā me kēia hana ma PostgreSQL i ka hihia o ka hāʻule ʻole a me ka hana hou ʻana. Hoʻohana nā noi no ka waihona a me hoʻihoʻi kiko-i-manawa. ʻOiaʻiʻo, kākau ʻia ka log kākau mua i ka disk, hiki ke hoʻopilikia i ka hana.

Ua hōʻemi ʻo PostgreSQL 12 i ke poʻo o nā moʻolelo WAL i hana ʻia e nā kuhikuhina GiST, GIN, a me SP-GIST i ka wā o ke kūkulu ʻana i ka papa kuhikuhi. Hāʻawi kēia i nā pōmaikaʻi ʻike ʻia: ʻoi aku ka liʻiliʻi o nā moʻolelo WAL, a ʻoi aku ka wikiwiki o ka hoʻihoʻi ʻana o ka ʻikepili, e like me ka wā o ka pōʻino a i ʻole ka hoʻihoʻi ʻana i ka manawa. Inā hoʻohana ʻoe i ia mau kuhikuhi i kāu mau noi (e like me ka PostGIS-based geospatial applications e hoʻohana nui i ka GiST index), ʻo ia kekahi hiʻohiʻona e hoʻomaikaʻi nui i ka ʻike me ka ʻole o kāu hoʻoikaika ʻana.

Hoʻokaʻawale - ʻoi aku ka nui, ʻoi aku ka maikaʻi, ʻoi aku ka wikiwiki

Hoʻokomo ʻia ʻo PostgreSQL 10 hoʻokaʻawale ʻōlelo. Ma PostgreSQL 11 ua maʻalahi ka hoʻohana. Ma PostgreSQL 12 hiki iā ʻoe ke hoʻololi i ka nui o nā ʻāpana.

Ma PostgreSQL 12, ua ʻoi aku ka maikaʻi o ka hana o ka ʻōnaehana hoʻokaʻawale, ʻoi aku ka nui inā he mau kaukani ʻāpana i ka papaʻaina. No ka laʻana, inā pili ka nīnau i nā ʻāpana liʻiliʻi i loko o kahi pākaukau me nā tausani o lākou, e hoʻokō ʻoi aku ka wikiwiki. ʻAʻole hoʻomaikaʻi wale ʻia ka hana no kēia mau ʻano nīnau. E ʻike ʻoe i ka wikiwiki o nā hana INSERT ma nā papa me nā ʻāpana he nui.

Hoʻopaʻa ʻikepili me ka hoʻohana ʻana kope - ma ke ala, he ala maikaʻi kēia hoʻoili ʻikepili nui a eia kekahi laʻana loaʻa iā JSON - ua ʻoi aku ka maikaʻi o nā papa ʻaina ma PostgreSQL 12. Me COPY ua wikiwiki nā mea a pau, akā ma PostgreSQL 12 lele loa ia.

Mahalo i kēia mau pōmaikaʻi, ʻae ʻo PostgreSQL iā ʻoe e mālama i nā pūʻulu ʻikepili nui aʻe a maʻalahi iā lākou ke kiʻi. A ʻaʻohe hoʻoikaika ma kāu ʻaoʻao. Inā he nui nā ʻāpana o ka noi, e like me ka hoʻopaʻa ʻana i ka ʻikepili manawa, e hoʻomaikaʻi nui ka hoʻonui maʻalahi i kāna hana.

ʻOiai ʻaʻole kēia he "hoʻomaikaʻi a hauʻoli" i ka hoʻomaikaʻi ʻana, ʻae ʻo PostgreSQL 12 iā ʻoe e hana i nā kī ʻē aʻe e kuhikuhi ana i nā papa ʻāpana, e ʻoliʻoli i ka hana ʻana me ka partitioning.

ME nā nīnau i ʻoi aku ka maikaʻi

Inā ua hoʻohana ʻia kahi ʻāpana no nā hōʻike papa maʻamau i kūkulu ʻia (aka CTE, aka WITH nīnau), ʻaʻole hiki iaʻu ke kali e kākau i kahi ʻatikala e pili ana hauʻoli nā mea hoʻomohala noi me PostgreSQL. ʻO kēia kekahi o kēlā mau hiʻohiʻona e wikiwiki i ka noi. Inā ʻaʻole, ʻoiaʻiʻo, hoʻohana ʻoe iā CTE.

ʻIke pinepine au i nā mea hou i SQL makemake e hoʻohana i nā CTE; inā ʻoe e kākau iā lākou i kekahi ala, manaʻo maoli ʻoe e kākau nei i kahi papahana koʻikoʻi. ʻO wau iho, makemake wau e kākau hou i kēia mau nīnau e hele a puni me kaʻole CTE a hoʻonui i ka huahana. I kēia manawa,ʻokoʻa nā mea a pau.

Hiki iā PostgreSQL 12 ke hoʻokomo i kahi ʻano kikoʻī o CTE me ka ʻole o nā hopena ʻaoʻao (SELECT), i hoʻohana ʻia hoʻokahi wale nō ma kahi kokoke i ka hopena o ke noi. Inā mālama au i nā nīnau CTE aʻu i kākau hou ai, e hāʻule ka hapa nui o lākou i kēia māhele. Kōkua kēia i nā mea hoʻomohala e kākau i nā code maopopo e holo wikiwiki ana i kēia manawa.

Eia kekahi, hoʻomaikaʻi ʻo PostgreSQL 12 i ka hoʻokō SQL iā ia iho, me ka ʻole o ʻoe e hana i kekahi mea. A ʻoiai ʻaʻole pono wau e hoʻopaʻa i kēia mau nīnau i kēia manawa, maikaʻi loa ka hoʻomau ʻana o PostgreSQL i ka hana ʻana i ka huli ʻana.

Just-in-Time (JIT) - i kēia manawa paʻamau

Ma nā ʻōnaehana PostgreSQL 12 me ke kākoʻo LLVM Hiki ke hoʻopili ʻia ʻo JIT ma ka paʻamau. ʻO ka mea mua, loaʻa iā ʻoe ke kākoʻo ʻO JIT no kekahi mau hana i loko, a ʻo ka lua, nā nīnau me nā hōʻike (ʻo ka laʻana maʻalahi loa ʻo x + y) i nā papa inoa koho (i loaʻa iā ʻoe ma hope o SELECT), nā aggregates, nā ʻōlelo me nā māhele WHERE a me nā mea ʻē aʻe e hoʻohana iā JIT e hoʻomaikaʻi i ka hana.

Ma muli o ka hiki ʻana o JIT ma ka paʻamau ma PostgreSQL 12, e hoʻomaikaʻi ka hana ma kāna iho, akā paipai wau e hoʻāʻo i ka noi ma PostgreSQL 11, ka mea i hoʻokomo iā JIT, e ana i ka hana nīnau a ʻike inā pono ʻoe e hoʻolohe i kekahi mea.

Pehea e pili ana i ke koena o nā hiʻohiʻona hou ma PostgreSQL 12?

Loaʻa i ka PostgreSQL 12 kahi ton o nā hiʻohiʻona hou, mai ka hiki ke nānā i ka ʻikepili JSON me ka hoʻohana ʻana i nā hōʻike ala SQL/JSON maʻamau i ka hōʻoia ʻana i nā mea he nui me kahi ʻāpana. clientcert=verify-full, hana i nā kolamu a me nā mea hou aku. Ua lawa no ka pou kaawale.

E like me PostgreSQL 10, PostgreSQL 12 e hoʻomaikaʻi i ka hana holoʻokoʻa ma hope koke o ka hoʻonui. ʻO ʻoe, ʻoiaʻiʻo, hiki iā ʻoe ke loaʻa i kou ala ponoʻī - e hoʻāʻo i ka noi ma lalo o nā kūlana like ma ka ʻōnaehana hana ma mua o ka hiki ʻana i nā hoʻomaikaʻi, e like me kaʻu i hana ai me PostgreSQL 10. ʻOiai inā ʻoi aku ka paʻa o PostgreSQL 12 ma mua o kaʻu i manaʻo ai, mai palaualelo i ka hoʻāʻo. nā noi, ma mua o ka hoʻokuʻu ʻana iā lākou i ka hana.

Source: www.habr.com

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