Bophelo bo botle ba li-index ho PostgreSQL ka mahlo a moqapi oa Java

Ho joang

Lebitso la ka ke Vanya 'me ke moqapi oa Java. Hoa etsahala hore ke sebetse haholo le PostgreSQL - ho theha database, ho ntlafatsa sebopeho, ts'ebetso, le ho bapala DBA e nyane mafelong a beke.

Haufinyane tjena ke hlophisitse li-database tse 'maloa ho li-microservices tsa rona mme ke ngotse laeborari ea java pg-index-bophelo, e etsang hore mosebetsi ona o be bonolo, e mpolokela nako ebile e nthusa ho qoba liphoso tse ling tse tloaelehileng tse entsoeng ke bahlahisi. Ke laebrari ena eo re tla bua ka eona kajeno.

Bophelo bo botle ba li-index ho PostgreSQL ka mahlo a moqapi oa Java

ikgololo

Mofuta oa mantlha oa PostgreSQL eo ke sebetsang le eona ke 10. Lipotso tsohle tsa SQL tseo ke li sebelisang li boetse li lekoa ho mofuta oa 11. Mofuta o fokolang o tšehetsoeng ke 9.6.

prehistory

Tsohle li qalile hoo e ka bang selemo se fetileng ka boemo bo neng bo sa tloaeleha ho 'na: pōpo ea tlhōlisano ea index e tsoa boputsoa e felile ka phoso. Lenane ka bolona, ​​joalo ka tloaelo, le ile la lula sebakeng sa polokelo sebakeng se sa sebetseng. Ho hlahlojoa ha lifate ho bontšitse khaello temp_file_limit. 'Me re ea ... Ho cheka ho teba, ke ile ka fumana mathata a mangata ho tlhophiso ea database,' me, ke phutha matsoho a ka, ka qala ho a lokisa ka ho phatsima mahlong a ka.

Bothata ba pele - tlhophiso ea kamehla

Mohlomong motho e mong le e mong o khathetse haholo ke papiso e mabapi le Postgres, e ka tsamaisoang ho moetsi oa kofi, empa ... ho hlophisoa ha kamehla ho hlahisa lipotso tse 'maloa. Bonyane, ke habohlokoa ho ela hloko tlhokomelo_sebetsi_mem, temp_file_limit, statement_timeout и lock_timeout.

Tabeng ea rona tlhokomelo_sebetsi_mem e ne e le ea kamehla 64 MB, le temp_file_limit ntho e ka bang 2 GB - re ne re se na mohopolo o lekaneng oa ho etsa index tafoleng e kholo.

Ka hona, ho pg-index-bophelo Ke bokelletse letoto senotlolo, ka maikutlo a ka, li-parameter tse lokelang ho hlophisoa bakeng sa database ka 'ngoe.

Bothata ba bobeli - li-index tse peli

Li-database tsa rona li phela ho li-drive tsa SSD, 'me rea li sebelisa HA-tlhophiso e nang le litsi tse ngata tsa data, master host le n- palo ea likopi. Sebaka sa disk ke sesebelisoa sa bohlokoa haholo ho rona; ha e bohlokoa ho feta ts'ebetso le ts'ebeliso ea CPU. Ka hona, ka lehlakoreng le leng, re hloka li-index bakeng sa ho bala ka potlako, 'me ka lehlakoreng le leng, ha re batle ho bona li-index tse sa hlokahaleng ka har'a database, kaha li ja sebaka le ho liehisa ntlafatso ea data.

'Me joale, ka ho tsosolosa tsohle li-index tse fosahetseng le ho bona ho lekaneng litlaleho tsa Oleg Bartunov, ke ile ka etsa qeto ea ho hlophisa "tlhōlo" e kholo. Ho ile ha fumaneha hore bahlahisi ha ba rate ho bala litokomane tsa database. Ha ba e rate haholo. Ka lebaka lena, ho hlaha liphoso tse peli tse tloaelehileng - index e entsoeng ka letsoho holim'a senotlolo sa mantlha le index e tšoanang ea "manual" kholomong e ikhethang. 'Nete ke hore ha li hlokehe - Postgres e tla iketsetsa ntho e' ngoe le e 'ngoe. Li-index tse joalo li ka hlakoloa ka mokhoa o sireletsehileng, 'me tlhahlobo e hlahile bakeng sa morero ona li-index.

Bothata ba boraro - intersecting indices

Bahlahisi ba bangata ba qalang ba etsa li-index kholomong e le 'ngoe. Butle-butle, ha ba se ba ithutile khoebo ena ka botlalo, batho ba qala ho ntlafatsa lipotso tsa bona le ho eketsa li-index tse rarahaneng tse kenyelletsang likholomo tse 'maloa. Ena ke tsela eo li-index tsa likholomo li hlahang A, A + B, A + B + C. joalo joalo. Li-indices tse peli tsa pele li ka lahleloa ka ntle ka mokhoa o sireletsehileng, kaha ke li-prefixes tsa boraro. Sena se boetse se boloka sebaka se ngata sa disk mme ho na le litlhahlobo tsa sena intersected_index.

Bothata ba bone - linotlolo tsa kantle ho naha ntle le li-index

Postgres e u lumella ho theha lithibelo tsa linotlolo tsa kantle ho naha ntle le ho hlakisa index ea tšehetso. Maemong a mangata sena ha se bothata, mme mohlomong ha se sa iponahatsa ... Hajoale ...

Ho ne ho tšoana le ho rona: ke feela hore ka nako e itseng mosebetsi, o sebetsang ho ea ka kemiso le ho hlakola database ea litaelo tsa liteko, o ile oa qala ho "eketsoa" ho rona ke mong'a ntlo. CPU le IO li ile tsa senyeha, likopo li ile tsa fokotseha 'me tsa felloa ke nako, tšebeletso e ne e le makholo a mahlano. Tlhahlobo e potlakileng pg_stat_activity e bontšitse hore lipotso tse kang:

delete from <table> where id in (…)

Tabeng ena, ho hlakile hore ho ne ho e-na le index ka id tafoleng ea sepheo, 'me litlaleho tse fokolang haholo li ile tsa hlakoloa ho ea ka boemo. Ho ne ho bonahala eka ntho e 'ngoe le e' ngoe e lokela ho sebetsa, empa, bomalimabe, ha ea ka ea sebetsa.

Ea babatsehang o ile a tla ho thusa hlalosa sekaseka mme a re, ntle le ho hlakolwa ha ditlaleho letlapeng leo ho shebilweng ho lona, ​​ho boetse ho na le phuputso ya botshepehi, mme ho e nngwe ya ditafole tse amanang cheke ena e hloleha. sequential scan ka lebaka la tlhokeho ya index e loketseng. Kahoo ho ile ha tsoaloa tlhahlobo ea mafu linotlolo_tsa_ntle_ntle le index.

Bothata ba bohlano - boleng ba lefeela ho li-index

Ka mokhoa o ikhethileng, Postgres e kenyelletsa boleng ba lefeela ho li-index tsa btree, empa hangata ha li hlokehe moo. Ka hona, ke leka ka matla ho lahla li-nulls tsena (diagnostics indexes_with_null_values), ho theha li-index tse sa fellang likholomong tse sa sebetseng ka mofuta where <A> is not null. Ka tsela ena ke khonne ho fokotsa boholo ba e 'ngoe ea li-index tsa rona ho tloha ho 1877 MB ho ea ho 16 KB. 'Me ho e' ngoe ea lits'ebeletso, boholo ba database bo theohile ka kakaretso ea 16% (ka 4.3 GB ka linomoro tse feletseng) ka lebaka la ho qheleloa ha boleng ba lefeela ho li-index. Ho boloka chelete e ngata sebakeng sa disk ka liphetoho tse bonolo haholo. 🙂

Bothata ba botšelela - ho hloka linotlolo tsa mantlha

Ka lebaka la sebopeho sa mochine MVCC ho Postgres boemo bo kang bona bo ka khoneha hlabaha boholo ba tafole ea hau bo ntse bo hōla ka potlako ka lebaka la palo e kholo ea litlaleho tse shoeleng. Ke ne ke lumela ka boithatelo hore sena se ke ke sa re tšosa, le hore sena se ke ke sa etsahala setsing sa rona, hobane rona, wow !!!, re bahlahisi ba tloaelehileng ... Ke ne ke le sethoto ebile ke se na kelello ...

Ka letsatsi le leng, phalliso e le 'ngoe e makatsang e ile ea nka le ho nchafatsa lirekoto tsohle tafoleng e kholo e sebelisoang ka mafolofolo. Re fumane +100 GB ho boholo ba tafole ntle le boputsoa. E ne e le ntho e hlabisang lihlong haholo, empa mathata a rona ha aa ka a fella moo. Kamora hore autovacuum e tafoleng ena e felile lihora tsa 15 hamorao, ho ile ha hlaka hore sebaka sa 'mele se ke ke sa khutla. Ha rea ​​khona ho emisa ts'ebeletso le ho etsa VACUUM FULL, kahoo re nkile qeto ea ho e sebelisa pg_repack. Mme yaba ho etsahala jwalo pg_repack ha e tsebe ho sebetsana le litafole ntle le senotlolo sa mantlha kapa lithibelo tse ling tse ikhethang, 'me tafole ea rona e ne e se na senotlolo sa mantlha. Kahoo ho ile ha tsoaloa tlhahlobo ea mafu litafole_ntle_konotlolo_ea_ea mantlha.

Khatisong ea laebrari 0.1.5 Bokhoni ba ho bokella data ho tsoa ho bloat ea litafole le li-index le ho arabela ho eona ka nako e nepahetseng e kentsoe.

Mathata a supileng le a robeli - li-index tse sa lekaneng le li-index tse sa sebelisoang

Litlhahlobo tse peli tse latelang ke: litafole_tse_tse_li-index и li-index_tse sa sebelisoeng - e hlahile ka sebopeho sa bona sa ho qetela haufinyane. Taba ke hore li ne li ke ke tsa nkoa feela le ho eketsoa.

Joalokaha ke se ke ngotse, re sebelisa tlhophiso e nang le likopi tse 'maloa,' me mojaro oa ho bala ho mabotho a fapaneng a fapane haholo. Ka lebaka leo, boemo bo bontša hore litafole le li-index tse ling ho batho ba bang ha li sebelisoe, 'me bakeng sa tlhahlobo u hloka ho bokella lipalo-palo ho tsoa ho bohle ba amohelang lihlopha. Seta lipalo-palo bocha Sena se boetse sea hlokahala ho moamoheli e mong le e mong sehlopheng; u ke ke ua etsa sena ho monghali feela.

Mokhoa ona o ile oa re lumella ho boloka li-gigabyte tse mashome a 'maloa ka ho tlosa li-index tseo ho seng mohla li kileng tsa sebelisoa, hammoho le ho eketsa li-index tse sieo ho litafole tse sebelisoang seoelo.

E le sephetho

Ehlile, bakeng sa hoo e ka bang diagnostics tsohle u ka configure lenane la kgethollo. Ka tsela ena, o ka kenya tšebetsong licheke ts'ebetsong ea hau kapele, ho thibela liphoso tse ncha hore li se ke tsa hlaha, ebe butle-butle u lokisa tsa khale.

Litlhahlobo tse ling li ka etsoa litekong tsa ts'ebetso hang ka mor'a ho tsamaisa lits'oants'o tsa database. 'Me mohlomong ena ke e' ngoe ea likarolo tse matla ka ho fetisisa laebraring ea ka. Mohlala oa tšebeliso o ka fumanoa ho moemeli.

Hoa utloahala ho etsa licheke bakeng sa li-index tse sa sebelisoeng kapa tse sieo, hammoho le bloat, feela polokelong ea 'nete. Litefiso tse bokelletsoeng li ka ngolisoa ho TlanyaHouse kapa ho romelloa tsamaisong ea ho beha leihlo.

Ke tshepa hoo ruri pg-index-bophelo e tla ba molemo ebile e batloa. U ka kenya letsoho ntlafatsong ea laeborari ka ho tlaleha mathata ao u a fumanang le ho fana ka maikutlo a tlhahlobo e ncha.

Source: www.habr.com

Eketsa ka tlhaloso