PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Mwen sijere ou li transkripsyon rapò Vladimir Sitnikov nan kòmansman ane 2016 la "PostgreSQL ak JDBC ap peze tout ji a"

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Bon apremidi Non mwen se Vladimir Sitnikov. Mwen te travay pou NetCracker pou 10 ane. Apre sa, mwen sitou nan pwodiktivite. Tout bagay ki gen rapò ak Java, tout bagay ki gen rapò ak SQL se sa mwen renmen.

Ak jodi a mwen pral pale sou sa nou te rankontre nan konpayi an lè nou te kòmanse itilize PostgreSQL kòm yon sèvè baz done. Epi nou sitou travay ak Java. Men, sa mwen pral di w jodi a se pa sèlman sou Java. Kòm pratik te montre, sa rive tou nan lòt lang.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Nou pral pale:

  • sou echantiyon done.
  • Konsènan ekonomize done yo.
  • Epi tou sou pèfòmans.
  • Ak sou rato yo anba dlo ki antere la.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann kòmanse ak yon kesyon senp. Nou chwazi yon ranje nan tablo a ki baze sou kle prensipal la.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Baz done a sitiye sou menm lame a. Ak tout agrikilti sa a pran 20 milisgond.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

20 milisgond sa yo anpil. Si ou gen 100 demann sa yo, Lè sa a, ou pase tan pou chak segonn defile nan demann sa yo, sa vle di nou ap pèdi tan.

Nou pa renmen fè sa epi gade sa baz la ofri nou pou sa. Baz done a ofri nou de opsyon pou egzekite demann.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Premye opsyon a se yon demann senp. Ki sa ki bon nan li? Lefèt ke nou pran li epi voye li, e pa gen anyen plis.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/478

Baz done a tou gen yon rechèch avanse, ki se pi difisil, men plis fonksyonèl. Ou ka separeman voye yon demann pou analiz, ekzekisyon, varyab obligatwa, elatriye.

Super demann pwolonje se yon bagay ke nou pa pral kouvri nan rapò aktyèl la. Nou, petèt, vle yon bagay nan baz done a epi gen yon lis dezi ki te fòme nan kèk fòm, sa vle di sa a se sa nou vle, men li enposib kounye a ak nan ane kap vini an. Se konsa, nou jis anrejistre li epi nou pral ale nan souke moun prensipal yo.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ak sa nou ka fè se rechèch senp ak rechèch pwolonje.

Ki sa ki espesyal sou chak apwòch?

Yon demann senp se bon pou yon sèl fwa ekzekisyon. Yon fwa fè ak bliye. Ak pwoblèm nan se ke li pa sipòte fòma done binè a, sa vle di li pa apwopriye pou kèk sistèm pèfòmans-wo.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Rekèt pwolonje - pèmèt ou ekonomize tan sou analiz. Sa a se sa nou te fè ak te kòmanse itilize. Sa vrèman, vrèman te ede nou. Genyen pa sèlman ekonomi sou par. Gen ekonomi sou transfè done. Transfere done nan fòma binè se pi plis efikas.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann kontinye pratike. Sa a se sa yon aplikasyon tipik sanble. Li ta ka Java, elatriye.

Nou te kreye deklarasyon. Egzekite kòmandman an. Kreye fèmen. Ki kote erè a isit la? Kisa pwoblèm nan ye? Pa gen pwoblèm. Se sa li di nan tout liv yo. Men ki jan li ta dwe ekri. Si ou vle pèfòmans maksimòm, ekri tankou sa a.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Men, pratik te montre ke sa a pa travay. Poukisa? Paske nou gen yon metòd "fèmen". Ak lè nou fè sa, nan pwen de vi baz done a li vire soti ke li se tankou yon fimè k ap travay ak yon baz done. Nou te di "PARSE EXECUTE DEALLOCATE".

Poukisa tout sa a ekstra kreyasyon ak dechaje deklarasyon? Okenn moun pa bezwen yo. Men, sa ki anjeneral rive nan PreparedStatements se ke lè nou fèmen yo, yo fèmen tout bagay sou baz done a. Sa a se pa sa nou vle.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Nou vle, tankou moun ki an sante, travay ak baz la. Nou te pran ak prepare deklarasyon nou an yon fwa, Lè sa a, nou egzekite li anpil fwa. An reyalite, anpil fwa - sa a se yon fwa nan tout lavi aplikasyon yo - yo te analize. Epi nou itilize menm id deklarasyon an sou diferan REST. Sa a se objektif nou.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ki jan nou ka reyalize sa a?

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Li trè senp - pa bezwen fèmen deklarasyon. Nou ekri li konsa: "prepare" "egzekute".

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Si nou lanse yon bagay tankou sa a, Lè sa a, li klè ke yon bagay pral debòde yon kote. Si li pa klè, ou ka eseye li sou. Ann ekri yon referans ki sèvi ak metòd senp sa a. Kreye yon deklarasyon. Nou lanse li sou kèk vèsyon nan chofè a epi nou jwenn ke li aksidan byen vit ak pèt la nan tout memwa ke li te genyen.

Li klè ke erè sa yo fasil korije. Mwen pap pale de yo. Men, mwen pral di ke nouvo vèsyon an travay pi vit. Metòd la se estipid, men toujou.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ki jan yo travay kòrèkteman? Kisa nou bezwen fè pou sa?

An reyalite, aplikasyon toujou fèmen deklarasyon. Nan tout liv yo di pou fèmen li, sinon memwa ap koule.

Ak PostgreSQL pa konnen ki jan yo kache demann. Li nesesè ke chak sesyon kreye kachèt sa a pou tèt li.

Epi nou pa vle gaspiye tan sou analiz tou.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Epi kòm dabitid nou gen de opsyon.

Premye opsyon a se ke nou pran li epi di ke ann vlope tout bagay nan PgSQL. Gen yon kachèt la. Li kachèt tout bagay. Li pral vire gwo. Nou te wè sa. Nou gen 100500 demann. Pa fonksyone. Nou pa dakò pou nou vire demann yo an pwosedi yo manyèlman. Non non.

Nou gen yon dezyèm opsyon - pran li epi koupe li tèt nou. Nou louvri sous yo epi kòmanse koupe. Nou te wè ak wè. Li te tounen soti ke li se pa tèlman difisil fè.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/319

Sa a te parèt nan mwa Out 2015. Koulye a, gen yon vèsyon pi modèn. Ak tout bagay se gwo. Li travay tèlman byen ke nou pa chanje anyen nan aplikasyon an. Epi nou menm sispann panse nan direksyon PgSQL, sa vle di sa a te ase pou nou redwi tout depans jeneral yo prèske zewo.

An konsekans, deklarasyon sèvè-prepare yo aktive sou ekzekisyon an 5yèm yo nan lòd pou evite gaspiye memwa nan baz done a sou chak demann yon sèl fwa.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ou ka mande - ki kote nimewo yo ye? Kisa wap jwenn? Ak isit la mwen pa pral bay nimewo, paske chak demann gen pwòp li yo.

Rekèt nou yo te tankou ke nou te pase apeprè 20 milisgond sou analiz sou demann OLTP. Te gen 0,5 milisgond pou ekzekisyon, 20 milisgond pou par. Demann – 10 KiB tèks, 170 liy plan. Sa a se yon demann OLTP. Li mande 1, 5, 10 liy, pafwa plis.

Men, nou pa t 'vle gaspiye 20 milisgond nan tout. Nou redwi li a 0. Tout bagay se gwo.

Kisa ou ka wete isit la? Si ou gen Java, Lè sa a, ou pran vèsyon an modèn nan chofè a ak kontan.

Si ou pale yon lang diferan, Lè sa a, panse - petèt ou bezwen sa a tou? Paske nan pwen de vi nan lang final la, pou egzanp, si PL 8 oswa ou gen LibPQ, Lè sa a, li pa evidan ke ou ap pase tan pa sou ekzekisyon, sou analiz, epi sa a vo tcheke. Ki jan? Tout se gratis.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Eksepte ke gen erè ak kèk sengularite. Epi nou pral pale sou yo kounye a. Pifò nan li pral sou akeyoloji endistriyèl, sou sa nou jwenn, sou sa nou te rankontre.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Si demann lan pwodwi dinamik. Li rive. Yon moun kole fisèl yo ansanm, sa ki lakòz yon rechèch SQL.

Poukisa li move? Li pa bon paske chak fwa nou fini ak yon fil diferan.

Ak hashCode nan fisèl sa a diferan bezwen li ankò. Sa a se reyèlman yon travay CPU - jwenn yon tèks demann long nan menm yon hash ki egziste deja se pa tèlman fasil. Se poutèt sa, konklizyon an se senp - pa jenere demann. Sere yo nan yon sèl varyab. Epi fè kè nou kontan.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Pwoblèm pwochen. Kalite done yo enpòtan. Gen ORM ki di ke li pa enpòtan ki kalite NULL gen, se pou gen kèk kalite. Si Int, lè sa a nou di setInt. Men, si NULL, Lè sa a, se pou li toujou VARCHAR. Ak ki diferans li fè nan fen sa NULL ki la? Baz done nan tèt li pral konprann tout bagay. Epi foto sa a pa mache.

Nan pratik, baz done a pa pran swen ditou. Si ou te di premye fwa ke sa a se yon nimewo, ak dezyèm fwa ou te di ke li se yon VARCHAR, Lè sa a, li enposib pou re-itilize deklarasyon sèvè-prepare. Ak nan ka sa a, nou dwe re-kreye deklarasyon nou an.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Si w ap egzekite menm rechèch la, asire w ke kalite done yo nan kolòn ou a pa konfonn. Ou bezwen veye pou NULL. Sa a se yon erè komen nou te genyen apre nou te kòmanse itilize PreparedStatements

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Oke, limen. Petèt yo pran chofè a. Ak pwodiktivite tonbe. Bagay yo te vin mal.

Ki jan sa rive? Èske sa se yon ensèk oswa yon karakteristik? Malerezman, li pa t 'posib konprann si sa a se yon ensèk oswa yon karakteristik. Men, gen yon senaryo trè senp pou repwodui pwoblèm sa a. Li konplètman san atann te anbiskad nou. Epi li konsiste de echantiyon literalman soti nan yon tab. Nou, nan kou, te gen plis demann sa yo. Kòm yon règ, yo enkli de oswa twa tab, men gen tankou yon senaryo lèktur. Pran nenpòt vèsyon nan baz done ou a epi jwe li.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Pwen an se ke nou gen de kolòn, chak nan yo ki endis. Gen yon milyon ranje nan yon kolòn NULL. Ak dezyèm kolòn nan gen sèlman 20 liy. Lè nou egzekite san yo pa mare varyab, tout bagay ap mache byen.

Si nou kòmanse egzekite ak varyab mare, sa vle di nou egzekite "?" oswa "$1" pou demann nou an, ki sa nou fini jwenn?

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Premye ekzekisyon an se jan yo espere. Dezyèm lan se yon ti kras pi vit. Yon bagay te kache. Twazyèm, katriyèm, senkyèm. Lè sa a, bang - ak yon bagay tankou sa. Ak bagay ki pi mal la se ke sa rive sou ekzekisyon an sizyèm. Ki moun ki te konnen ke li te nesesè fè egzakteman sis ekzekisyon yo nan lòd yo konprann ki sa ki plan ekzekisyon aktyèl la te?

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ki moun ki koupab? sak pase? Baz done a gen optimize. Epi li sanble yo dwe optimize pou ka jenerik la. Epi, kòmsadwa, kòmanse nan kèk pwen, li chanje nan yon plan jenerik, ki, malerezman, ka vire soti yo dwe diferan. Li ka tounen menm bagay la tou, oswa li ka diferan. Epi gen yon kalite valè papòt ki mennen nan konpòtman sa a.

Kisa ou ka fè sou li? Isit la, nan kou, li pi difisil yo asime anyen. Gen yon solisyon senp ke nou itilize. Sa a se +0, OFFSET 0. Se vre wi ou konnen solisyon sa yo. Nou jis pran li epi ajoute "+0" nan demann lan ak tout bagay anfòm. Mwen pral montre w pita.

Epi gen yon lòt opsyon - gade nan plan yo ak anpil atansyon. Pwomotè a pa dwe sèlman ekri yon demann, men tou, di "eksplike analize" 6 fwa. Si li nan 5, li pa pral travay.

Epi gen yon twazyèm opsyon - ekri yon lèt bay pgsql-entru. Mwen te ekri, sepandan, li poko klè si sa a se yon ensèk oswa yon karakteristik.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Pandan ke nou ap panse si sa a se yon ensèk oswa yon karakteristik, ann ranje li. Ann pran demann nou an epi ajoute "+0". Tout bagay anfòm. De senbòl epi ou pa menm bezwen panse sou ki jan li ye oswa ki sa li ye. Trè senp. Nou senpleman entèdi baz done a itilize yon endèks sou kolòn sa a. Nou pa gen yon endèks sou kolòn "+0" la e se li, baz done a pa sèvi ak endèks la, tout bagay anfòm.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Sa a se règ 6 eksplike. Koulye a, nan vèsyon aktyèl ou gen fè li 6 fwa si ou gen varyab mare. Si ou pa gen varyab mare, sa a se sa nou fè. E finalman se jisteman demann sa a ki echwe. Se pa yon bagay ki difisil.

Li ta sanble, konbyen se posib? Yon ensèk isit la, yon ensèk la. Aktyèlman, pinèz la se toupatou.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann pran yon gade pi pre. Pou egzanp, nou gen de chema. Scheme A ak tablo S ak dyagram B ak tablo S. Rekèt - chwazi done ki sòti nan yon tab. Kisa nou pral genyen nan ka sa a? Nou pral gen yon erè. Nou pral gen tout sa ki anwo yo. Règ la se - yon ensèk se tout kote, nou pral gen tout sa ki anwo a.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Kounye a kesyon an se: "Poukisa?" Li ta sanble ke gen dokiman ki si nou gen yon chema, Lè sa a, gen yon "search_path" varyab ki di nou ki kote yo gade pou tab la. Li ta sanble ke gen yon varyab.

Kisa pwoblèm nan ye? Pwoblèm lan se ke deklarasyon sèvè-prepare pa sispèk ke search_path ka chanje pa yon moun. Valè sa a rete, kòm li te, konstan pou baz done a. Ak kèk pati ka pa ranmase nouvo siyifikasyon.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Natirèlman, sa a depann de vèsyon an w ap teste sou. Depann sou ki jan seryezman tab ou yo diferan. Ak vèsyon 9.1 pral tou senpleman egzekite demann yo fin vye granmoun. Nouvo vèsyon yo ka trape ensèk la epi di ou ke ou gen yon ensèk.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Mete search_path + deklarasyon sèvè-prepare =
plan an kachèt pa dwe chanje kalite rezilta

Ki jan yo trete li? Gen yon resèt senp - pa fè li. Pa gen okenn nesesite pou chanje search_path pandan aplikasyon an ap kouri. Si ou chanje, li pi bon pou kreye yon nouvo koneksyon.

Ou ka diskite, sa vle di louvri, diskite, ajoute. Petèt nou ka konvenk devlopè baz done yo ke lè yon moun chanje yon valè, baz done a ta dwe di kliyan an sou sa: "Gade, valè ou a te mete ajou isit la. Petèt ou bezwen reset deklarasyon yo epi rkree yo?" Koulye a, baz done a konpòte yo an kachèt epi yo pa rapòte nan okenn fason ke deklarasyon yo te chanje yon kote andedan.

Apre sa, mwen pral mete aksan sou ankò - sa a se yon bagay ki pa tipik pou Java. Nou pral wè menm bagay la nan PL/pgSQL youn a youn. Men, li pral repwodui la.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann eseye kèk plis seleksyon done. Nou chwazi epi chwazi. Nou gen yon tab ak yon milyon ranje. Chak liy se yon kilobyte. Apeprè yon gigaocte nan done. Epi nou gen yon memwa k ap travay nan machin nan Java nan 128 megabyte.

Nou, jan yo rekòmande nan tout liv, sèvi ak pwosesis kouran. Sa vle di, nou louvri resultSet epi li done yo soti nan la piti piti. Èske li pral travay? Èske li tonbe nan memwa? Èske w ap li yon ti kras? Ann fè konfyans nan baz done a, ann fè konfyans nan Postgres. Nou pa kwè li. Èske nou pral tonbe nan memwa? Ki moun ki fè eksperyans OutOfMemory? Kiyès ki te rive ranje li apre sa? Yon moun te rive ranje li.

Si ou gen yon milyon ranje, ou pa ka jis chwazi epi chwazi. OFFSET/LIMIT obligatwa. Ki moun ki pou opsyon sa a? Ak ki moun ki an favè jwe ak autoCommit?

Isit la, kòm dabitid, opsyon ki pi inatandi vire soti yo kòrèk. Men, si ou toudenkou fèmen autoCommit, li pral ede. Poukisa se sa? Syans pa konnen sou sa.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Men, pa default, tout kliyan ki konekte nan yon baz done Postgres chache tout done yo. PgJDBC pa gen okenn eksepsyon nan sans sa a; li chwazi tout ranje.

Gen yon varyasyon sou tèm nan FetchSize, sa vle di ou ka di nan nivo yon deklarasyon separe ke isit la, tanpri chwazi done pa 10, 50. Men, sa a pa travay jiskaske ou fèmen autoCommit. Etenn autoCommit - li kòmanse travay.

Men, ale nan kòd la ak mete setFetchSize tout kote se konvenyan. Se poutèt sa, nou te fè yon anviwònman ki pral di valè a default pou koneksyon an antye.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Se sa nou te di. Paramèt la te configuré. E sa nou te jwenn? Si nou chwazi ti kantite lajan, si, pou egzanp, nou chwazi 10 ranje nan yon moman, Lè sa a, nou gen gwo depans jeneral. Se poutèt sa, valè sa a ta dwe mete sou yon santèn.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Idealman, nan kou, ou toujou gen pou aprann kijan pou limite li nan bytes, men resèt la se sa a: mete defaultRowFetchSize a plis pase yon santèn epi ou dwe kontan.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann ale nan mete done yo. Ensèsyon se pi fasil, gen diferan opsyon. Pa egzanp, INSERT, VALUES. Sa a se yon bon opsyon. Ou ka di "ENTER SELECT". Nan pratik se menm bagay la. Pa gen okenn diferans nan pèfòmans.

Liv yo di ke ou bezwen egzekite yon deklarasyon pakèt, liv yo di ke ou ka egzekite kòmandman pi konplèks ak plizyè parantèz. Ak Postgres gen yon karakteristik bèl bagay - ou ka fè KOPI, sa vle di fè li pi vit.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Si ou mezire li, ou ka ankò fè kèk dekouvèt enteresan. Ki jan nou vle sa a mache? Nou vle pa analize epi pa egzekite kòmandman ki pa nesesè yo.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Nan pratik, TCP pa pèmèt nou fè sa. Si kliyan an okipe ap voye yon demann, Lè sa a, baz done a pa li demann yo pou eseye voye nou repons. Rezilta final la se ke kliyan an tann pou baz done a li demann lan, ak baz done a tann pou kliyan an li repons lan.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Se poutèt sa kliyan an oblije voye detanzantan yon pake senkronizasyon. Entèraksyon rezo siplemantè, fatra siplemantè nan tan.

PostgreSQL ak JDBC peze tout ji a. Vladimir SitnikovAk plis nou ajoute yo, se pi mal li vin. Chofè a se byen pesimism epi li ajoute yo byen souvan, apeprè yon fwa chak 200 liy, tou depann de gwosè a nan liy yo, elatriye.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/380

Li rive ke ou korije jis yon liy ak tout bagay pral pi vit 10 fwa. Li rive. Poukisa? Kòm dabitid, yon konstan tankou sa a te deja itilize yon kote. Ak valè "128" la vle di pa sèvi ak lo.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Java microbenchmark ekipay

Li bon ke sa a pa te enkli nan vèsyon ofisyèl la. Dekouvri anvan liberasyon an te kòmanse. Tout siyifikasyon mwen bay yo baze sou vèsyon modèn yo.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ann eseye li sou. Nou mezire InsertBatch senp. Nou mezire InsertBatch plizyè fwa, sa vle di menm bagay la, men gen anpil valè. Deplase difisil. Se pa tout moun ki ka fè sa, men li se yon mouvman senp, pi fasil pase KOPI.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Ou ka fè KOPI.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Epi ou ka fè sa sou estrikti. Deklare Itilizatè kalite default, pase etalaj ak INSERT dirèkteman sou tab la.

Si ou louvri lyen an: pgjdbc/ubenchmsrk/InsertBatch.java, Lè sa a, kòd sa a se sou GitHub. Ou ka wè espesifikman ki demann yo pwodwi la. Li pa gen pwoblèm.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Nou te lanse. Ak premye bagay nou reyalize se ke pa itilize pakèt se tou senpleman enposib. Tout opsyon pakèt yo se zewo, sa vle di tan an ekzekisyon se pratikman zewo konpare ak yon ekzekisyon yon sèl fwa.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Nou mete done yo. Li se yon tab trè senp. Twa kolòn. E kisa nou wè la a? Nou wè ke tout twa nan opsyon sa yo apeprè konparab. Ak COPY se, nan kou, pi bon.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Sa a se lè nou mete moso. Lè nou te di ke yon valè VALÈ, de valè VALÈ, twa valè VALÈ, oswa nou te endike 10 nan yo separe pa yon vigil. Sa a se jis orizontal kounye a. 1, 2, 4, 128. Li ka wè ke Pakèt Insert la, ki trase an ble, fè l santi l pi byen. Sa vle di, lè ou mete youn nan yon moman oswa menm lè ou mete kat nan yon moman, li vin de fwa pi bon, tou senpleman paske nou anpile yon ti kras plis nan VALÈ. Mwens operasyon EXECUTE.

Sèvi ak COPY sou ti volim pa trè pwomèt. Mwen pa t menm desine sou de premye yo. Yo ale nan syèl la, se sa ki, nimewo vèt sa yo pou KOPI.

KOPI ta dwe itilize lè ou gen omwen yon santèn ranje done. Anlè a nan ouvèti koneksyon sa a se gwo. Epi, yo dwe onèt, mwen pa t fouye nan direksyon sa a. Mwen optimize pakèt, men se pa KOPI.

Kisa nou fè apre? Nou te eseye li sou. Nou konprann ke nou bezwen sèvi ak swa estrikti oswa yon bath entelijan ki konbine plizyè siyifikasyon.

PostgreSQL ak JDBC peze tout ji a. Vladimir Sitnikov

Kisa ou ta dwe retire nan rapò jodi a?

  • PreparedStatement se tout bagay nou yo. Sa a bay anpil pou pwodiktivite. Li pwodui yon gwo flop nan odè a.
  • Epi ou bezwen fè EXPLICATION ANALYZE 6 fwa.
  • Epi nou bezwen delye OFFSET 0, ak ke trik nouvèl tankou +0 yo nan lòd yo korije pousantaj ki rete nan demann pwoblèm nou an.

Sous: www.habr.com

Add nouvo kòmantè