Helo
Fy enw i yw Vanya ac rwy'n ddatblygwr Java. Mae'n digwydd felly fy mod yn gweithio llawer gyda PostgreSQL - sefydlu'r gronfa ddata, optimeiddio'r strwythur, perfformiad, a chwarae ychydig o DBA ar y penwythnosau.
Yn ddiweddar rwyf wedi tacluso sawl cronfa ddata yn ein microwasanaethau ac wedi ysgrifennu llyfrgell java
Ymwadiad
Y brif fersiwn o PostgreSQL rydw i'n gweithio gyda hi yw 10. Mae'r holl ymholiadau SQL a ddefnyddiaf hefyd yn cael eu profi ar fersiwn 11. Y fersiwn leiaf a gefnogir yw 9.6.
cynhanes
Dechreuodd y cyfan bron i flwyddyn yn Γ΄l gyda sefyllfa a oedd yn ddieithr i mi: daeth y broses gystadleuol o greu mynegai allan o'r glas i ben gyda gwall. Arhosodd y mynegai ei hun, fel arfer, yn y gronfa ddata mewn cyflwr annilys. Dangosodd dadansoddiad logiau brinder
Problem un - cyfluniad diofyn
Mae'n debyg bod pawb wedi blino'n fawr ar y trosiad am Postgres, y gellir ei redeg ar wneuthurwr coffi, ond ... mae'r ffurfwedd ddiofyn yn codi nifer o gwestiynau mewn gwirionedd. Ar y lleiaf, mae'n werth rhoi sylw iddo cynnal_gwaith_mem, temp_file_limit, datganiad_amser terfyn ΠΈ cloi_amser allan.
Yn ein hachos ni cynnal_gwaith_mem oedd y rhagosodiad 64 MB, a temp_file_limit rhywbeth o gwmpas 2 GB - yn syml iawn nid oedd gennym ddigon o gof i greu mynegai ar fwrdd mawr.
Felly, yn td-mynegai-iechyd Cesglais gyfres
Problem dau - mynegeion dyblyg
Mae ein cronfeydd data yn byw ar yriannau SSD, ac rydym yn defnyddio HA-configuration gyda chanolfannau data lluosog, gwesteiwr meistr a n-nifer o atgynyrchiadau. Mae gofod disg yn adnodd gwerthfawr iawn i ni; nid yw'n llai pwysig na pherfformiad a defnydd CPU. Felly, ar y naill law, mae angen mynegeion ar gyfer darllen cyflym, ac ar y llaw arall, nid ydym am weld mynegeion diangen yn y gronfa ddata, gan eu bod yn bwyta gofod ac yn arafu diweddaru data.
Ac yn awr, ar Γ΄l adfer popeth
Problem tri - mynegeion croestorri
Mae'r rhan fwyaf o ddatblygwyr dibrofiad yn creu mynegeion ar un golofn. Yn raddol, ar Γ΄l profi'r busnes hwn yn drylwyr, mae pobl yn dechrau gwneud y gorau o'u hymholiadau ac ychwanegu mynegeion mwy cymhleth sy'n cynnwys sawl colofn. Dyma sut mae mynegeion ar golofnau yn ymddangos A, A + B., A + B + C. ac yn y blaen. Gellir taflu'r ddau gyntaf o'r mynegeion hyn allan yn ddiogel, gan mai rhagddodiaid y trydydd ydynt. Mae hyn hefyd yn arbed llawer o le ar ddisg ac mae diagnosteg ar gyfer hyn
Problem pedwar - allweddi tramor heb fynegeion
Mae Postgres yn caniatΓ‘u ichi greu cyfyngiadau allweddol tramor heb nodi mynegai cefndir. Mewn llawer o sefyllfaoedd nid yw hyn yn broblem, ac efallai na fydd hyd yn oed yn amlygu ei hun... Am y tro...
Roedd yr un peth Γ’ ni: dim ond ar ryw adeg mewn amser y dechreuodd swydd, yn rhedeg yn unol ag amserlen a chlirio'r gronfa ddata o orchmynion prawf, gael ei βychwaneguβ atom gan y prif westeiwr. Aeth CPU ac IO i wastraff, arafodd ceisiadau a chawsant eu hamseru, roedd y gwasanaeth yn bum cant. Dadansoddiad cyflym
delete from <table> where id in (β¦)
Yn yr achos hwn, wrth gwrs, roedd mynegai wrth id yn y tabl targed, ac ychydig iawn o gofnodion a ddilΓ«wyd yn Γ΄l yr amod. Roedd yn ymddangos fel y dylai popeth weithio, ond, gwaetha'r modd, ni wnaeth.
Daeth yr un gwych i'r adwy esbonio dadansoddi a dywedodd, yn ogystal Γ’ dileu cofnodion yn y tabl targed, fod yna hefyd wiriad cywirdeb cyfeiriol, ac ar un o'r tablau cysylltiedig mae'r gwiriad hwn yn methu sgan dilyniannol oherwydd diffyg mynegai addas. Felly ganwyd diagnosteg
Problem pump β gwerth nwl mewn mynegeion
Yn ddiofyn, mae Postgres yn cynnwys gwerthoedd null mewn mynegeion btree, ond fel arfer nid oes eu hangen yno. Felly, rwy'n ddiwyd yn ceisio taflu'r nulls hyn (diagnosteg where <A> is not null
. Yn y modd hwn llwyddais i leihau maint un o'n mynegeion o 1877 MB i 16 KB. Ac yn un o'r gwasanaethau, gostyngodd maint y gronfa ddata gyfanswm o 16% (o 4.3 GB mewn niferoedd absoliwt) oherwydd eithrio gwerthoedd nwl o'r mynegeion. Arbedion enfawr yn y gofod disg gydag addasiadau syml iawn. π
Problem chwech β diffyg allweddi cynradd
Oherwydd natur y mecanwaith
Un diwrnod, cymerodd un ymfudiad gwych a diweddaru'r holl gofnodion mewn tabl mawr a ddefnyddir yn weithredol. Cawsom +100 GB i faint y bwrdd allan o'r glas. Roedd yn drueni damniol, ond ni ddaeth ein hanffodion i ben yno. Ar Γ΄l i'r autovacuum ar y bwrdd hwn ddod i ben 15 awr yn ddiweddarach, daeth yn amlwg na fyddai'r lleoliad ffisegol yn dychwelyd. Ni allem atal y gwasanaeth a gwneud gwactod LLAWN, felly penderfynasom ddefnyddio
Yn fersiwn y llyfrgell 0.1.5 Ychwanegwyd y gallu i gasglu data o bloat o dablau a mynegeion ac ymateb iddo mewn modd amserol.
Problemau saith ac wyth - mynegeion annigonol a mynegeion nas defnyddiwyd
Y ddau ddiagnosteg canlynol yw:
Fel yr ysgrifennais eisoes, rydym yn defnyddio cyfluniad gyda sawl atgynhyrchiad, ac mae'r llwyth darllen ar wahanol westeion yn sylfaenol wahanol. O ganlyniad, mae'r sefyllfa'n ymddangos nad yw rhai tablau a mynegeion ar rai gwesteiwyr yn cael eu defnyddio'n ymarferol, ac ar gyfer dadansoddi mae angen i chi gasglu ystadegau gan yr holl westeion yn y clwstwr.
Roedd y dull hwn yn ein galluogi i arbed sawl degau o gigabeit trwy gael gwared ar fynegeion na ddefnyddiwyd erioed, yn ogystal ag ychwanegu mynegeion coll at dablau na ddefnyddir yn aml.
Fel casgliad
Wrth gwrs, ar gyfer bron pob diagnosteg gallwch chi ffurfweddu
Gellir perfformio rhai diagnosteg mewn profion swyddogaethol yn syth ar Γ΄l cyflwyno mudo cronfa ddata. Ac efallai mai dyma un o nodweddion mwyaf pwerus fy llyfrgell. Ceir enghraifft o ddefnydd yn
Mae'n gwneud synnwyr i gynnal gwiriadau ar gyfer mynegeion nas defnyddiwyd neu ar goll, yn ogystal ag ar gyfer bloat, dim ond ar gronfa ddata go iawn. Gellir cofnodi'r gwerthoedd a gasglwyd yn
Dwi wir yn gobeithio hynny td-mynegai-iechyd bydd yn ddefnyddiol ac y mae galw amdano. Gallwch hefyd gyfrannu at ddatblygiad y llyfrgell trwy adrodd am broblemau y byddwch yn dod o hyd iddynt ac awgrymu diagnosteg newydd.
Ffynhonnell: hab.com