(ts) Yandex.Images
Visi varoÅi ir fiktÄ«vi, preÄu zÄ«mes pieder to Ä«paÅ”niekiem, jebkÄdas lÄ«dzÄ«bas ir nejauÅ”as un vispÄr tÄds ir mans āsubjektÄ«vais vÄrtÄ«bu spriedums, lÅ«dzu nelauzt durvis...ā.
Mums ir ievÄrojama pieredze informÄcijas sistÄmu ar loÄ£iku pÄrsÅ«tÄ«Å”anÄ datu bÄzÄ no vienas DBVS uz citu. SaistÄ«bÄ ar valdÄ«bas 1236. gada 16.11.2016. novembra dekrÄtu Nr. XNUMX tÄ bieži vien ir pÄreja no Oracle uz Postgresql. AtseviŔķi varam pastÄstÄ«t, kÄ procesu organizÄt pÄc iespÄjas efektÄ«vÄk un nesÄpÄ«gÄk, Å”odien parunÄsim par klastera izmantoÅ”anas iespÄjÄm un ar kÄdÄm problÄmÄm var saskarties, veidojot ļoti noslogotas dalÄ«tÄs sistÄmas ar sarežģītu loÄ£iku procedÅ«rÄs un funkcijÄs.
Spoileris ā jÄ, cap, RAC un pg multimaster ir ļoti dažÄdi risinÄjumi.
PieÅemsim, ka jÅ«s jau esat pÄrnesis visu loÄ£iku no plsql uz pgsql. Un jÅ«su regresijas testi ir diezgan labi, tagad jÅ«s, protams, domÄjat par mÄrogoÅ”anu, jo... slodzes testi jÅ«s neiepriecina, jo Ä«paÅ”i attiecÄ«bÄ uz aparatÅ«ru, kas sÄkotnÄji bija iekļauta projektÄ, Å”ai ļoti atŔķirÄ«gajai DBVS. PieÅemsim, ka esat atradis vietÄjÄ pÄrdevÄja "Postgres Professional" risinÄjumu ar opciju "multimaster", kas ir pieejama tikai "Postgres Pro Enterprise" "maksimÄlajÄ" versijÄ un saskaÅÄ ar aprakstu ir ļoti lÄ«dzÄ«ga tev vajag, un ar pirmo virspusÄjo izpÄti man ienÄca prÄtÄ doma: āAk! Tas ir tas, nevis RAC! Un pat ar tehnisko cauruļvadu mÅ«su dzimtenÄ!ā
Bet nesteidzieties priecÄties, un tÄlÄk mÄs aprakstÄ«sim, kÄpÄc jums ir jÄzina Ŕīs nianses, jo... tos ir grÅ«ti paredzÄt pat pÄc rÅ«pÄ«gas produkta dokumentÄcijas izlasÄ«Å”anas. NovÄrtÄjiet, vai esat gatavs bieži atjauninÄt DBVS versijas tieÅ”i ražoÅ”anas vietÄ, jo Daži defekti nav saderÄ«gi ar rÅ«pniecisku izmantoÅ”anu, un tos ir grÅ«ti noteikt testÄÅ”anas laikÄ.
SÄciet, rÅ«pÄ«gi izlasiet sadaļu āmultimasterā - āierobežojumiā ražotÄja vietnÄ.
PirmÄ lieta, ar ko jÅ«s varÄtu saskarties, ir darÄ«jumu darbÄ«bas Ä«patnÄ«bas, t.s. ādivfÄžuā režīms, un dažreiz to nevar novÄrst, izÅemot visas procedÅ«ras loÄ£ikas pÄrrakstÄ«Å”anu. Å eit ir vienkÄrÅ”s piemÄrs:
create table test1 (id integer, id1 integer);
insert into test1 values (1, 1),(1, 2);
ALTER TABLE test1 ADD CONSTRAINT test1_uk UNIQUE (id,id1) DEFERRABLE INITIALLY DEFERRED;
update test1
set id1 =
case id1
when 1
then 2
else id1 - sign(2 - 1)
end
where id1 between 1 and 2;
Rodas kļūda:
ŠŠØŠŠŠŠ: [MTM] Transaction MTM-1-2435-10-605783555137701 (10654) is aborted on node 3. Check its log to see error details.
Tad vÄl ilgi var cÄ«nÄ«ties ar dead lock versijÄs 10.5, 10.6 un vienÄ«gais zinÄmais risinÄjums, kas nogalina visu klastera bÅ«tÄ«bu ir āproblÄmuā tabulu noÅemÅ”ana no klastera, t.i. veiciet make_table_local, bet tas vismaz ļaus tai darboties un neatliks visu aizturÄtu, jo tiek gaidÄ«ta transakcijas apÅemÅ”anÄs. Vai arÄ« instalÄjiet atjauninÄjumu versijai 11.2, kam vajadzÄtu palÄ«dzÄt, bet varbÅ«t ne, neaizmirstiet pÄrbaudÄ«t.
DažÄs versijÄs jÅ«s varat iegÅ«t vÄl noslÄpumainu slÄdzeni:
username= mtm Šø backend_type = background worker
Un Å”ajÄ situÄcijÄ jums palÄ«dzÄs tikai DBVS versijas atjauninÄÅ”ana uz 11.2 un jaunÄku versiju, vai varbÅ«t tas nepalÄ«dzÄs.
Dažas darbÄ«bas ar indeksiem var izraisÄ«t kļūdas, kas skaidri norÄda, ka problÄma ir divvirzienu replikÄcijÄ; jÅ«s tieÅ”i redzÄsit BDR MTM žurnÄlos. Vai tas tieÅ”Äm ir 2.kvadrants? NÄ... mÄs nopirkÄm multimasteri, tÄ ir tikai sakritÄ«ba, tas ir tehnoloÄ£ijas nosaukums.
[MTM] bdr doesn't support index rechecks
[MTM] 12124: REMOTE begin abort transaction 4083
[MTM] 12124: send ABORT notification for transaction (5467) local xid=4083 to coordinator 3
[MTM] Receive ABORT_PREPARED logical message for transaction MTM-3-25030-83-605694076627780 from node 3
[MTM] Abort prepared transaction MTM-3-25030-83-605694076627780 status InProgress from node 3 originId=3
[MTM] MtmLogAbortLogicalMessage node=3 transaction=MTM-3-25030-83-605694076627780 lsn=9fff448
Ja izmantojat pagaidu tabulas, neskatoties uz garantijÄm: āMultimaster paplaÅ”inÄjums veic datu replikÄciju pilnÄ«gi automÄtiski. Varat vienlaikus veikt rakstÄ«Å”anas transakcijas un strÄdÄt ar pagaidu tabulÄm jebkurÄ klastera mezglÄ.
Tad faktiski jÅ«s redzÄsit, ka replikÄcija nedarbojas visÄs procedÅ«rÄ izmantotajÄs tabulÄs, ja kods satur pagaidu tabulas izveidi un pat multimaster.remote_functions izmantoÅ”ana nepalÄ«dzÄs, jums bÅ«s jÄatjaunina vai jÄpÄrraksta sava loÄ£ika procedÅ«ru. Ja āPostgres Pro Enterpriseā v10.5 ietvaros vienlaikus ir jÄizmanto divi paplaÅ”inÄjumi multimaster un pg_pathman, pÄrbaudiet to, izmantojot Å”o vienkÄrÅ”o piemÄru:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
CREATE TABLE measurement_y2019m06 PARTITION OF measurement FOR VALUES FROM ('2019-06-01') TO ('2019-07-01');
insert into measurement values (1, to_date('27.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (2, to_date('28.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (3, to_date('29.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (4, to_date('30.06.2019', 'dd.mm.yyyy'), 1, 1);
DBVS mezglu žurnÄlos sÄk parÄdÄ«ties Å”Ädas kļūdas:
ā¦
PATHMAN_CONFIG doesn't contain relation 23245
> find_in_dynamic_libpath: trying "/opt/ā¦/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: trying "/opt//ā¦/ent-10/lib/pg_pathman.so"
> ŠŠ¢ŠŠŠŠŠ: find_in_dynamic_libpath: trying "/opt/ā¦/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: trying "/opt/ā¦/ent-10/lib/pg_pathman.so"
> PrepareTransaction(1) name: unnamed; blockState: PREPARE; state: INPROGR, xid/subid/cid: 6919/1/40
> StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
> switched to timeline 1 valid until 0/0
ā¦
Transaction MTM-1-13604-7-612438856339841 (6919) is aborted on node 2. Check its log to see error details.
...
[MTM] 28295: REMOTE begin abort transaction 7017
ā¦
[MTM] 28295: send ABORT notification for transaction (6919) local xid=7017 to coordinator 1
KÄdas ir Ŕīs kļūdas, varat uzzinÄt tehniskajÄ atbalstÄ, ne velti to iegÄdÄjÄties.
Ko darīt? Pa labi! Jauniniet uz "Postgres Pro Enterprise" v11.2
AtseviŔķi jums jÄzina, ka secÄ«bai, kas ir replicÄtas datu bÄzes objekts, visÄ klasterÄ« nav pilnÄ«gas vÄrtÄ«bas, katra secÄ«ba ir lokÄla katram mezglam un, ja jums ir lauki ar unikÄliem ierobežojumiem un lietoÅ”anas secÄ«ba, tad jÅ«s varat veikt tikai pieaugumu, kas lÄ«dzvÄrtÄ«gs mezgla numuram klasterÄ«, jo KlasterÄ« pÄc iespÄjas vairÄk mezglu, secÄ«ba un int pieaugs ÄtrÄk, nekÄ gaidÄ«jÄt. Lai vienkÄrÅ”otu darbu ar secÄ«bu produktÄ, jÅ«s pat atradÄ«siet funkciju alter_sequences, kas veiks nepiecieÅ”amos palielinÄjumus katrai secÄ«bai visos mezglos, taÄu esiet gatavi tam, ka funkcija nedarbosies visÄs versijÄs. Protams, jÅ«s varat to uzrakstÄ«t pats, par pamatu izmantojot kodu no github vai labojot to pats tieÅ”i DBVS. Å ajÄ gadÄ«jumÄ pareizÄk darbosies lauki ar serialbigserial tipu, taÄu, lai tos izmantotu, visticamÄk, bÅ«s jÄpÄrraksta savu procedÅ«ru un funkciju kods. VarbÅ«t kÄdam noderÄs funkcija monotonic_sequences.
Pirms Postgres Pro Enterprise versijas 11.2 replikÄcija darbosies tikai tad, ja ir unikÄlas primÄrÄs atslÄgas, Åemiet to vÄrÄ, izstrÄdÄjot.
AtseviŔķi es vÄlos pieminÄt npgsql darbÄ«bas Ä«patnÄ«bas klastera risinÄjumÄ; Ŕīs problÄmas nerodas vienÄ mezglÄ, bet ir diezgan izplatÄ«tas multimasterÄ.
DažÄs versijÄs var rasties kļūda:
Exception Details: Npgsql.PostgresException: 25001: ŠŗŠ¾Š¼Š°Š½Š“Š° SET TRANSACTION ISOLATION LEVEL
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Ko var darÄ«t? Jums vienkÄrÅ”i nav jÄizmanto dažas versijas. Jums tie ir jÄzina, jo... Kļūda parÄdÄs vairÄkÄs versijÄs, un pat pÄc tÄs pirmÄs laboÅ”anas var rasties vÄlÄk. Tam arÄ« jÄbÅ«t gatavam un visus konstatÄtos DBVS defektus, ko ražotÄjs labo, labÄk noklÄt ar atseviŔķiem regresijas testiem. TÄ teikt, uzticieties, bet pÄrbaudiet.
Ja lietojumprogramma izmanto npgsql un pÄrslÄdzas starp mezgliem, domÄjot, ka tie visi ir vienÄdi, var parÄdÄ«ties kļūda:
EXCEPTION:Npgsql.PostgresException (0x80004005): XX000: cache lookup failed for type ...
Šī kļūda radīsies, jo notiek saistīŔana
(NpgsqlConnection.GlobalTypeMapper.MapComposite<SomeType>("some_composite_type");)
saliktie veidi lietojumprogrammas startÄÅ”anas laikÄ visiem savienojumiem. RezultÄtÄ no viena mezgla iegÅ«stam identifikatoru, un, pieprasot citÄ mezglÄ, tas nesakrÄ«t, kÄ rezultÄtÄ tiek atgriezta kļūda, t.i. PÄrskatÄms darbs ar saliktajiem tipiem klasterÄ« dažÄm lietojumprogrammÄm nebÅ«s iespÄjams bez papildu lietojumprogrammas puses pÄrrakstÄ«Å”anas (ja jums tas izdosies).
KÄ mÄs visi zinÄm, vispÄrÄjs klastera stÄvokļa novÄrtÄjums ir ļoti svarÄ«gs diagnostikai un ekspluatÄcijas pasÄkumiem ekspluatÄcijas laikÄ, produktÄ var atrast dažas funkcijas, kurÄm vajadzÄtu atvieglot jÅ«su dzÄ«vi, bet dažreiz tÄs var dot kaut ko pavisam citu jÅ«s un pat pats ražotÄjs no viÅiem jÅ«s gaidÄt.
PiemÄram:
select mtm.collect_cluster_info();
Š½Š° ŠŗŠ°Š¶Š“Š¾Š¹ Š½Š¾Š“Šµ Š²ŃŠ“Š°ŠµŃ Š¾Š“ŠøŠ½Š°ŠŗŠ¾Š²ŃŠ¹ ŃŠµŠ·ŃŠ»ŃŃŠ°Ń:
(1,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:06")
(2,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:06")
(3,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:09")
Bet kÄpÄc laukÄ LiveNodes visur ir skaitlis 2, lai gan pÄc multimastera darbÄ«bas apraksta tam jÄatbilst skaitlim AllNodes=3? Atbilde: jums ir jÄatjaunina DBVS versija.
Un esiet gatavi vÄkt žurnÄlus par visiem mezgliem, jo... parasti jÅ«s redzÄsit "kļūda ir cita mezgla žurnÄlÄ". Tehniskais atbalsts pieÅems visus jÅ«su identificÄtos defektus un informÄs, ka ir gatava nÄkamÄ versija, kas dažkÄrt bÅ«s jÄinstalÄ, kad pakalpojums ir apturÄts, dažreiz uz ilgu laiku (atkarÄ«bÄ no jÅ«su DBVS lieluma). Nevajag cerÄt, ka darbÄ«bas problÄmas pÄrdevÄjam stipri traucÄs un atjauninÄÅ”ana konstatÄto defektu dÄļ tiks veikta ar pÄrdevÄja pÄrstÄvju piedalÄ«Å”anos, pareizÄk sakot, pÄrdevÄja pÄrstÄvjus pat nav jÄiesaista, jo beigÄs jÅ«s varat beigties ar izjauktu klasteru ražoÅ”anÄ bez rezerves.
Faktiski komerciÄla produkta licencÄ ražotÄjs godÄ«gi brÄ«dina: "Å Ä« programmatÅ«ra tiek nodroÅ”inÄta tÄda, kÄda tÄ ir, un Postgres Professional Company ar ierobežotu atbildÄ«bu nav pienÄkuma nodroÅ”inÄt apkopi, atbalstu, atjauninÄjumus, paplaÅ”inÄjumus vai izmaiÅas."
Ja vÄl neesi uzminÄjis, par kuru produktu ir runa, tad visa Ŕī pieredze iegÅ«ta gadu ilgas Postgres Pro Enterprise datu bÄzes darbÄ«bas rezultÄtÄ. SecinÄjumu varat izdarÄ«t pats, tas ir tik mitrs, ka aug sÄnes.
Bet tas nebÅ«tu tik slikti, ja tas tiktu darÄ«ts savlaicÄ«gi un nekavÄjoties novÄrstu raduÅ”Äs problÄmas.
Bet tas ir tieÅ”i tas, kas nenotiek. AcÄ«mredzot ražotÄjam nav pietiekami daudz resursu, lai nekavÄjoties novÄrstu identificÄtÄs kļūdas.
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Vai jums ir pieredze, pÄrejot no Ärvalstu/patentÄtas DBVS uz bezmaksas/iekÅ”zemes?
-
21,3%JÄ, pozitÄ«vi10
-
10,6%JÄ, negatÄ«vs5
-
21,3%NÄ, DBVS netika mainÄ«ta10
-
4,3%DBVS tika mainÄ«ta, bet nekas nemainÄ«jÄs2
-
42,6%SkatÄ«t rezultÄtus20
Nobalsoja 47 lietotÄji. 12 lietotÄji atturÄjÄs.
Avots: www.habr.com