Whakapai ake mo te hunga mangere: me pehea te whakapai ake a PostgreSQL 12 i nga mahi

Whakapai ake mo te hunga mangere: me pehea te whakapai ake a PostgreSQL 12 i nga mahi

PostgreSQL 12, Ko te putanga hou o "te papaarangi hononga puna tuwhera pai rawa atu o te ao," ka puta i roto i nga wiki e rua (mehemea ka rite nga mea katoa ki te mahere). Ka whai tenei i te waarangi o mua mo te tuku i tetahi putanga hou me te maha o nga ahuatanga hou kotahi i te tau, me te pono, he mea whakamiharo. Koia ahau i noho hei mema kaha ki te hapori PostgreSQL.

Ki taku whakaaro, kaore i rite ki nga putanga o mua, ko PostgreSQL 12 kaore i roto i te kotahi, e rua ranei nga ahuatanga hurihuri (penei i te wehewehenga, i te whakarara patai ranei). I korero ahau i tetahi wa ko te waahanga nui o PostgreSQL 12 he nui ake te pumau. Ehara i te mea e hiahia ana koe ina whakahaere koe i nga raraunga whakahirahira o to pakihi?

Engari kaore a PostgreSQL 12 e mutu i reira: me nga ahuatanga hou me nga whakapainga, ka pai ake te mahi o nga tono, a ko nga mea katoa e hiahia ana koe ki te whakapai ake!

(Ae, tera pea ka hanga ano i nga taurangi, engari i tenei tukunga kaore i te mataku penei i mua.)

He rawe ki te whakahou i te PostgreSQL me te pai tonu ki nga whakapainga nui me te kore ngangau. I etahi tau kua pahure ake nei, i arotakehia e ahau tetahi whakahoutanga mai i te PostgreSQL 9.4 ki te PostgreSQL 10 me te kite i te tere o te tono na te pai ake o te whakarara uiui i roto i te PostgreSQL 10. A, ko te mea tino nui, tata kaore he mea i hiahiatia mai i ahau (whakaturia he tawhā whirihoranga. max_parallel_workers).

Whakaae, he watea ka pai ake te mahi o nga tono i muri tonu i te whakahoutanga. A ka whakapau kaha matou ki te pai ki nga kaiwhakamahi, na te mea he maha ake a PostgreSQL.

Na me pehea e taea ai e te whakahoutanga ngawari ki te PostgreSQL 12 te koa koe? Ka korerotia e ahau ki a koe inaianei.

Nga whakapainga taupū nui

Ki te kore he tohu tohu, karekau he papaaarangi e haere tawhiti. Me pehea e taea ai e koe te rapu tere i nga korero? Ka karangahia te punaha taupū taketake a PostgreSQL B-rakau. Ko tenei momo taurangi kua arotauhia mo nga punaha rokiroki.

Ka whakamahi noa matou i te kaiwhakahaere CREATE INDEX ON some_table (some_column), a he maha nga mahi a PostgreSQL kia mau tonu ai te taurangi i te wa e whakauru tonu ana, e whakahou ana, e whakakore ana i nga uara. Ka mahi nga mea katoa i a ia ano, me te mea he makutu.

Engari ko nga tohu tohu PostgreSQL kotahi te raru - ko ratou kei te piki haere me te tango ake mokowā kōpae me te whakaiti i te mahi o te tiki raraunga me te whakahou. Ma te "bloat" ko taku tikanga he koretake te pupuri i te hanganga taurangi. Ko tenei pea - kaore ranei - he hononga ki nga tuple paru ka tangohia e ia VACUUM (nga mihi ki a Peter Gaghan mo nga korero)Peter Geoghegan)). Ka tino kitea te pupuhi taurangi i roto i nga kawenga mahi kei te huri kaha te taurangi.

Ko te PostgreSQL 12 he tino whakapai ake i nga mahi o nga tohu-rakau B, a ko nga whakamatautau me nga tohu tohu penei i te TPC-C kua whakaatu ko te toharite 40% iti ake te waahi kua whakamahia inaianei. Inaianei ka iti ake te wa e noho ana matou ki te pupuri i nga tohu tohu B-rakau (ara, ki nga mahi tuhi), engari ki te tiki raraunga, na te mea he iti ake nga tohu.

Nga tono e whakahōu kaha ana i o raatau ripanga - te nuinga o nga tono OLTP (te tukatuka tauwhitinga mo te wa-tūturu) - ka pai ake te whakamahi i te kōpae me te tukatuka i nga tono. Ko te nui ake o te mokowā kōpae, ka nui ake te mokowā ka tipu te pātengi raraunga me te kore e whakahou ake i te hanganga.

Ko etahi o nga rautaki whakamohoatanga e hiahia ana ki te hanga ano i nga tohu tohu B-rakau hei painga ki enei painga (hei tauira. pg_whakahou e kore e hanga aunoa i nga tohu tohu). I nga putanga o mua o PostgreSQL, ko te hanga ano i nga taurangi nui i runga i nga ripanga ka puta he wa heke nui na te mea kaore e taea te whakarereke i tenei wa. Engari ko PostgreSQL 12 tetahi atu waahanga pai: inaianei ka taea e koe te hanga i nga tohu tohu kia rite ki te whakahau. REINDEX I TE WHAKAMAHIki te karo rawa i te wa heke.

He whakapai ake ano ki te hanganga taupū i PostgreSQL 12. Ko tetahi atu mea i reira he makutu - tuhi-i mua rangitaki, aka WAL (rakau tuhi-i mua). Ko te raarangi tuhi-i mua ka tuhi i nga tauwhitinga katoa i roto i te PostgreSQL mena ka rahua me te tukurua. Ka whakamahia e nga tono mo te penapena me te whakaora i roto i te wa. Ae ra, ka tuhia te raarangi tuhi-mua ki te kōpae, ka pa ki te mahi.

Kua whakahekehia e PostgreSQL 12 te nui o nga rekoata WAL i hangaia e nga tohu tohu GiST, GIN, me SP-GIST i te wa o te hanga taurangi. He maha nga painga ka kitea e tenei: He iti ake te mokowā mokowhiti mo nga rekoata WAL, ka tere ake te purei o nga raraunga, penei i te wa o te whakaoranga kino, te whakaora i te waa-waahi ranei. Mena kei te whakamahi koe i nga tohu tohu i roto i o tono (hei tauira, ko nga tono mokowhiti-a-PostGIS e whakamahi ana i te tohu tohu GiST), koinei tetahi atu waahanga ka tino pai ake te wheako me te kore e kaha ki a koe.

Wehewehenga - nui ake, pai ake, tere ake

PostgreSQL 10 i whakauruhia wehewehe korero. I roto i te PostgreSQL 11 kua ngawari ake te whakamahi. I roto i te PostgreSQL 12 ka taea e koe te whakarereke i te tauine o nga waahanga.

I roto i te PostgreSQL 12, kua tino pai ake te mahinga o te punaha wehewehe, ina koa he mano nga wehewehenga kei te tepu. Hei tauira, mena ka pa te patai ki etahi waahanga noa iho o te ripanga me nga mano tini, ka tere ake te mahi. Ehara i te mea kua pai ake te mahi mo enei momo patai. Ka kite ano koe he pehea te tere o nga mahi INSERT i runga i nga ripanga me nga wehewehenga maha.

Te tuhi raraunga ma te whakamahi Tuhinga - i te ara, he huarahi pai tenei tango raraunga nui a he tauira tenei te whiwhi JSON — kua pai ake nga ripanga wehewehe i PostgreSQL 12. Ma te COPY kua tere nga mea katoa, engari i roto i te PostgreSQL 12 ka tino rere.

He mihi ki enei painga, ka taea e PostgreSQL te penapena i nga huinga raraunga nui ake, ka ngawari ake te tiki. A kaore he kaha ki a koe. Mena he maha nga waahanga o te tono, penei i te tuhi i nga raraunga raupapa wa, ma te whakahou ngawari ka tino pai ake te mahi.

Ahakoa ehara tenei i te "whakapai ake me te pai" te whakapai ake, ka taea e PostgreSQL 12 te hanga i nga taviri ke e tohutoro ana i nga ripanga wehewehe, kia pai ai te mahi wehewehe.

NA nga patai kua pai ake

Ahea i tonohia he papaki mo nga whakaaturanga ripanga noa (aka CTE, aka WITH uiui), kaore au i tatari ki te tuhi tuhinga mo i koa nga kaiwhakawhanake tono me PostgreSQL. Koinei tetahi o nga ahuatanga ka tere ake te tono. Mena ka whakamahi koe i te CTE.

He maha nga wa ka kitea e au ko te hunga hou ki te SQL e pai ana ki te whakamahi i nga CTE; mena ka tuhia e koe tetahi huarahi, he ahua kei te tuhi koe i tetahi kaupapa whakahirahira. Ko ahau ake, i pai ahau ki te tuhi ano i enei patai ki te huri haere kaore CTE me te whakanui i te hua. Inaianei kua rereke nga mea katoa.

Ko te PostgreSQL 12 ka taea e koe te whakauru i tetahi momo CTE motuhake kaore he paanga taha (SELECT), ka whakamahia kotahi anake tata ki te mutunga o te tono. Mena ka whai tonu ahau i nga patai CTE i tuhia ano e au, ka taka te nuinga ki tenei waahanga. Ka awhina tenei i nga kaiwhakawhanake ki te tuhi i nga waehere marama ka tere tere.

I tua atu, ko te PostgreSQL 12 te whakapai ake i te mahi SQL ake, me te kore koe e mahi i tetahi mea. A ahakoa kare pea au e arotau i enei patai inaianei, he rawe kei te mahi tonu a PostgreSQL ki te arotautanga patai.

Tika-i-Wa (JIT) - taunoa inaianei

I runga i nga punaha PostgreSQL 12 me te tautoko LLVM Ko te whakahiato JIT kua whakahohea ma te taunoa. Tuatahi, ka whiwhi tautoko koe JIT mo etahi mahi o roto, tuarua, ko nga patai me nga korero (ko te tauira ngawari ko te x + y) i roto i nga rarangi whiriwhiri (kei a koe i muri i te SELECT), nga whakahiato, nga korero me nga rara WHERE me etahi atu ka taea te whakamahi i te JIT hei whakapai ake i te mahi.

I te mea ka taea te taunoa a JIT i PostgreSQL 12, ka pai ake te mahi i a ia ano, engari ka tūtohu ahau ki te whakamatautau i te tono ki PostgreSQL 11, nana i whakauru a JIT, ki te ine i nga mahi uiui me te kite mena ka hiahia koe ki te whakatika i tetahi mea.

He aha te toenga o nga ahuatanga hou o PostgreSQL 12?

He maha nga ahuatanga hou a PostgreSQL 12, mai i te kaha ki te tirotiro i nga raraunga JSON ma te whakamahi i nga whakaaturanga ara SQL/JSON paerewa ki te whakamotuhēhēnga-maha me te tawhā. clientcert=verify-full, hanga poupou me te maha atu. Kati mo te pou motuhake.

Pērā i te PostgreSQL 10, PostgreSQL 12 ka pai ake te mahi katoa i muri tonu i te whakahoutanga. Ko te tikanga, ka taea e koe te whai i to ara ake - whakamatautauhia te tono i raro i nga ahuatanga rite i runga i te punaha whakaputa i mua i te whakaahei i nga whakapainga ake, pera i taku mahi ki a PostgreSQL 10. Ahakoa kua pai ke atu a PostgreSQL 12 i taku i tumanako ai, kaua e mangere ki te whakamatautau. tono tino, i mua i te tuku ki roto ki te hanga.

Source: will.com

Tāpiri i te kōrero