{"id":36171,"date":"2019-10-31T22:09:58","date_gmt":"2019-10-31T19:09:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\/"},"modified":"2019-10-31T22:09:58","modified_gmt":"2019-10-31T19:09:58","slug":"po-sledam-highload-siberia-2019-8-zadach-po-oracle","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"Highload++ Siberia 2019 \u2013 8 Oracle'i \u00fclesannet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere!<\/p>\n<p>24.-25. juunil toimus Novosibiris konverents Highload++ Siberia 2019. Meie inimesed olid ka seal. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">ettekanne<\/a><\/noindex> \u201eOracle\u2019i konteinerandmebaasid (CDB\/PDB) ja nende praktiline kasutamine tarkvara arendamisel\u201c, paneme tekstiversiooni \u00fcles natuke hiljem. Oli \u00e4ge, ait\u00e4h! <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> korraldamise eest ja ka k\u00f5igile, kes kohale tulid. <\/p>\n<p><img decoding=\"async\" alt=\"Highload++ Siberia 2019 \u2013 8 Oracle&#039;i \u00fclesannet\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelles postituses tahaksime jagada teiega \u00fclesandeid, mis olid meie stendis, et saaksite kontrollida oma teadmisi Oracle'is. Allpool \u2014 8 \u00fclesannet, vastusevariandid ja selgitus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Milline on maksimaalne v\u00e4\u00e4rtus, mida j\u00e4rjestuse t\u00e4itmise tulemusena n\u00e4eme j\u00e4rgmise skripti puhul?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create sequence s start with 1;\n \nselect s.currval, s.nextval, s.currval, s.nextval, s.currval\nfrom dual\nconnect by level &lt;= 5;\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>5<\/li>\n<li>10<\/li>\n<li>25<\/li>\n<li>Ei mingit, tuleb viga.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Oracle'i dokumentatsiooni kohaselt (tsiteeritud versioonist 8.1.6):<br \/>\n\u00dche SQL-lause piires suurendab Oracle j\u00e4rjestust ainult \u00fcks kord rea kohta. Kui laus sisaldab rohkem kui \u00fchte viidet NEXTVAL-ile j\u00e4rjestusele, suurendab Oracle j\u00e4rjestust \u00fche korra ja tagastab sama v\u00e4\u00e4rtuse k\u00f5igi NEXTVAL-i esinemiste jaoks. Kui lauses on viidatud nii CURRVAL-ile kui NEXTVAL-ile, suurendab Oracle j\u00e4rjestust ja tagastab sama v\u00e4\u00e4rtuse nii CURRVAL-ile kui NEXTVAL-ile, s\u00f5ltumata nende j\u00e4rjekorrast lauses.<\/p>\n<p>Seega, <b>maksimaalne v\u00e4\u00e4rtus vastab ridade arvule, st 5.<\/b>.<\/p>\n<h3>Kui palju ridu ilmub tabelis, kui k\u00e4ivitatakse j\u00e4rgmine skript?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer check (i &lt; 5));\n \ncreate procedure p(p_from integer, p_to integer) as\nbegin\n    for i in p_from .. p_to loop\n        insert into t values (i);\n    end loop;\nend;\n\/\n \nexec p(1, 3);\nexec p(4, 6);\nexec p(7, 9);<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>0<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>9<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Oracle'i dokumentatsiooni kohaselt (tsiteeritud 11.2):<\/p>\n<p>Enne SQL-lause t\u00e4itmist m\u00e4rgib Oracle vaikimisi s\u00e4\u00e4stupunkte (teie jaoks mitte k\u00e4ttesaadavad). Kui lause nurjub, tagastab Oracle automaatselt vea ja tagasit\u00f5mbab selle SQLCODE-s SQLCA-sse. N\u00e4iteks, kui INSERT-lausung p\u00f5hjustab vea, proovides sisestada dupliitse v\u00e4\u00e4rtuse unikaalsesse indeksisse, tagastatakse lausung.<\/p>\n<p>Protseduuri (HP) kutse kliendilt k\u00e4sitletakse samuti \u00fche lausena. Seega l\u00f5petab esimene HP kutse edukalt, sisestades kolm kirjet; teine HP kutse l\u00f5petab vea t\u00f5ttu ja tagastab neljanda kirje, mille ta suutis sisestada; kolmas kutse l\u00f5petatakse veaga, <b>ja tabelis on kokku kolm kirjet.<\/b>.<\/p>\n<h3>Kui palju ridu ilmub tabelis, kui k\u00e4ivitatakse j\u00e4rgmine skript?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer, constraint i_ch check (i &lt; 3));\n \nbegin\n    insert into t values (1);\n    insert into t values (null);\n    insert into t values (2);\n    insert into t values (null);\n    insert into t values (3);\n    insert into t values (null);\n    insert into t values (4);\n    insert into t values (null);\n    insert into t values (5);\nexception\n    when others then\n        dbms_output.put_line(&#039;Oops!&#039;);\nend;\n\/<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>1<\/li>\n<li>2<\/li>\n<li>3<\/li>\n<li>4<\/li>\n<li>5<\/li>\n<li>6<\/li>\n<li>7<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Oracle'i dokumentatsiooni kohaselt (tsiteeritud 11.2):<\/p>\n<p>Kontrolli piirang v\u00f5imaldab teil m\u00e4\u00e4rata tingimuse, millele iga rea tabelis vastata peab. Piirangu t\u00e4itmiseks peab iga rea tabelis olema tingimus, mis on kas TRUE v\u00f5i tundmatu (kuna see on null). Kui Oracle hindab kontrolli piirangu tingimust teatud rea kohta, viitavad tingimuses olevad veeru nimed selle rea veeru v\u00e4\u00e4rtustele.<\/p>\n<p>Seega l\u00e4bib nulli v\u00e4\u00e4rtus kontrolli, ja anon\u00fc\u00fcmne plokk t\u00e4idetakse edukalt kuni katsetamiseni sisestada v\u00e4\u00e4rtust 3. P\u00e4rast seda katkestab viga t\u00f6\u00f6deldav plokk erandi, tagasik\u00e4iku ei toimu ning <b>tabelis j\u00e4\u00e4b neli rida<\/b> v\u00e4\u00e4rtustega 1, null, 2 ja uuesti null.<\/p>\n<h3>Millised v\u00e4\u00e4rtuste paarid v\u00f5tavad samasugust ruumi plokis?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a char(1 char),\n    b char(10 char),\n    c char(100 char),\n    i number(4),\n    j number(14),\n    k number(24),\n    x varchar2(1 char),\n    y varchar2(10 char),\n    z varchar2(100 char));\n \ninsert into t (a, b, i, j, x, y)\n    values ('Y', '\u0412\u0430\u0441\u044f', 10, 10, '\u0414', '\u0412\u0430\u0441\u044f');\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>A ja X<\/li>\n<li>B ja Y<\/li>\n<li>C ja K<\/li>\n<li>C ja Z<\/li>\n<li>K ja Z<\/li>\n<li>I ja J<\/li>\n<li>J ja X<\/li>\n<li>K\u00f5ik loetletud<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Toome v\u00e4lja l\u00f5ike dokumentatsioonist (12.1.0.2) erinevate andmet\u00fc\u00fcpide s\u00e4ilitamisest Oracle'is.<\/p>\n<p><b>CHAR andmet\u00fc\u00fcpi<\/b><br \/>\nCHAR andmet\u00fc\u00fcp m\u00e4\u00e4rab andmebaasi karakterite komplektis fikseeritud pikkusega tegelaste stringi. Te m\u00e4\u00e4rate andmebaasi karakterite komplekti, kui loote oma andmebaasi. Oracle tagab, et k\u00f5ik v\u00e4\u00e4rtused, mis salvestatakse CHAR veerus, vastavad valitud pikkussemantika m\u00e4\u00e4ratud pikkusele. Kui sisestate v\u00e4\u00e4rtuse, mis on l\u00fchem kui veeru pikkus, siis Oracle t\u00f5ukab v\u00e4\u00e4rtust veeru pikkuse ulatuses.<\/p>\n<p><b>VARCHAR2 andmet\u00fc\u00fcp<\/b><br \/>\nVARCHAR2 andmet\u00fc\u00fcp m\u00e4\u00e4ratleb muutuva pikkusega t\u00e4hem\u00e4rgirea andmebaasi t\u00e4hem\u00e4rgis\u00fcsteemis. Andmebaasi t\u00e4hem\u00e4rgis\u00fcsteemi m\u00e4\u00e4rate andmebaasi loomisel. Oracle salvestab t\u00e4hem\u00e4rgi v\u00e4\u00e4rtuse VARCHAR2 veerus t\u00e4pselt nii, nagu te selle m\u00e4\u00e4rate, ilma igasuguste t\u00fchikuteta, tingimusel et v\u00e4\u00e4rtus ei \u00fcleta veeru pikkust.<\/p>\n<p><b>NUMBER andmet\u00fc\u00fcp<\/b><br \/>\nNUMBER andmet\u00fc\u00fcp salvestab nulli ning positiivseid ja negatiivseid fikseeritud numbreid absoluutv\u00e4\u00e4rtustega vahemikus 1,0 x 10-130 kuni, kuid mitte sealhulgas, 1,0 x 10^126. Kui m\u00e4\u00e4rate arvutuse, mille v\u00e4\u00e4rtus on absoluutv\u00e4\u00e4rtusega sama v\u00f5i suurem kui 1,0 x 10^126, siis tagastab Oracle vea. Iga NUMBER v\u00e4\u00e4rtus vajab 1 kuni 22 baiti. Arvestades seda, saab teatud numerilise andmev\u00e4\u00e4rtuse NUMBER(p) jaoks veeru suurust bittides, kus p on antud v\u00e4\u00e4rtuse t\u00e4psus, arvutada j\u00e4rgmise valemi abil: <i>ROUND((length(p)+s)\/2))+1<\/i> kus s on null, kui number on positiivne, ja s on 1, kui number on negatiivne.<\/p>\n<p>Lisaks toome v\u00e4lja l\u00f5ike dokumentatsioonist Null-v\u00e4\u00e4rtuste salvestamise kohta.<\/p>\n<p>Null on v\u00e4\u00e4rtuse puudumine veerus. Nullid n\u00e4itavad puuduvat, tundmatut v\u00f5i kohaldamatut teavet. Nullid salvestatakse andmebaasi, kui need asuvad andmev\u00e4\u00e4rtustega veergude vahel. Neil juhtudel vajavad nad 1 baiti veeru pikkuse (null) salvestamiseks. Rida nulliga l\u00f5ppevad nullid ei vaja salvestamist, kuna uus rea p\u00e4is annab m\u00e4rku, et eelmistel veergudel on null. N\u00e4iteks, kui tabeli viimased kolm veergu on null, siis nende veergude jaoks andmeid ei salvestata.<\/p>\n<p>Arvestades neid andmeid, j\u00e4reldame. Eeldame, et andmebaasis kasutatakse kodeeringut AL32UTF8. Selles kodeeringus v\u00f5tavad vene t\u00e4hed 2 baiti.<\/p>\n<p>1) A ja X, v\u00e4lja a v\u00e4\u00e4rtus \u2018Y\u2019 v\u00f5tab 1 bait, v\u00e4lja x v\u00e4\u00e4rtus \u2018\u0414\u2019 \u2013 2 baiti<br \/>\n2) B ja Y, \u2018\u0412\u0430\u0441\u044f\u2019 b v\u00e4\u00e4rtus t\u00e4iendatakse t\u00fchikutega 10 s\u00fcmbolini ja v\u00f5tab 14 baiti, \u2018\u0412\u0430\u0441\u044f\u2019 d \u2013 v\u00f5tab 8 baiti.<br \/>\n3) C ja K. M\u00f5lemad v\u00e4ljad on NULL v\u00e4\u00e4rtusega, p\u00e4rast neid on t\u00e4henduslikud v\u00e4ljad, seega v\u00f5tavad nad 1 baidi.<br \/>\n4) C ja Z. M\u00f5lemad v\u00e4ljad on NULL v\u00e4\u00e4rtusega, kuid v\u00e4li Z on tabelis viimane, seega ei v\u00f5ta see ruumi (0 baiti). V\u00e4li C v\u00f5tab 1 baidi.<br \/>\n5) K ja Z. Sarnane eelnevaga. V\u00e4li K v\u00e4\u00e4rtus v\u00f5tab 1 baidi, Z \u2013 0.<br \/>\n6) I ja J. Dokumentatsiooni kohaselt v\u00f5tavad m\u00f5lemad v\u00e4\u00e4rtused 2 baiti. Pikkuse arvutame dokumentatsioonist saadud valemi j\u00e4rgi: round( (1 + 0)\/2) +1 = 1 + 1 = 2.<br \/>\n7) J ja X. V\u00e4li J v\u00e4\u00e4rtus v\u00f5tab 2 baiti, v\u00e4li X v\u00e4\u00e4rtus v\u00f5tab 2 baiti.<\/p>\n<p><b>Kokkuv\u00f5ttes on \u00f5iged variandid: C ja K, I ja J, J ja X.<\/b><\/p>\n<p><\/p>\n<h3>Mis on umbkaudselt T_I indeksi clustering factor?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (i integer);\n \ninsert into t select rownum from dual connect by level &lt; = 10000;\n \ncreate index t_i on t(i);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Umbkaudu k\u00fcmneid<\/li>\n<li>Umbkaudu sadu<\/li>\n<li>Umbkaudu tuhandeid<\/li>\n<li>Umbkaudu k\u00fcmneid tuhandeid<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Dokumentatsiooni kohaselt Oracle'ist (tsiteeritud 12.1):<\/p>\n<p>B-puu indeksi puhul m\u00f5\u00f5dab indeksi clustering factor ridade f\u00fc\u00fcsilist r\u00fchmitust seoses indeksi v\u00e4\u00e4rtusega.<\/p>\n<p>Indeksiklastri faktor aitab optimeerijal otsustada, kas teatud p\u00e4ringute jaoks on efektiivsem indeksi skaneerimine v\u00f5i t\u00e4ielik tabeli skaneerimine. Madal klassifitseerimisfaktor n\u00e4itab efektiivset indeksi skaneerimist.<\/p>\n<p>Klasterfaktor, mis on l\u00e4hedane tabeli plokkide arvule, n\u00e4itab, et read on f\u00fc\u00fcsiliselt tabeli plokkides indeksi v\u00f5tme j\u00e4rgi j\u00e4rjekorras. Kui andmebaas teostab t\u00e4isklastri skaneerimise, siis tavaliselt hankib andmebaas read nii, nagu need on salvestatud kettale, j\u00e4rjestatud indeksi v\u00f5tme j\u00e4rgi. Klasterfaktor, mis on l\u00e4hedane ridade arvule, t\u00e4hendab, et read on andmebaasi plokkides indeksi v\u00f5tme suhtes juhuslikult hajutatud. Kui andmebaas teostab t\u00e4isklastri skaneerimise, ei hanki andmebaas ridu selle indeksi v\u00f5tme j\u00e4rgi mingis sorteeritud j\u00e4rjekorras.<\/p>\n<p>Antud juhul on andmed ideaalselt j\u00e4rjestatud, seega klassifitseerimisfaktor on v\u00f5i on l\u00e4hedal tabeli h\u00f5ivatud plokkide arvule. T\u00fc\u00fcpilise ploki suuruse korral, mis on 8 kilobaiti, v\u00f5ib oodata, et \u00fchte plokki mahub umbes tuhat kitsast number v\u00e4\u00e4rtust, seega plokkide arv ja seega klassifitseerimisfaktor on <b>k\u00fcmneid<\/b>.<\/p>\n<h3>Milliste v\u00e4\u00e4rtuste N korral t\u00e4idab j\u00e4rgmine skript edukalt tavalisest andmebaasist, millel on vaikeseaded?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t (\n    a varchar2(N char),\n    b varchar2(N char),\n    c varchar2(N char),\n    d varchar2(N char));\n \ncreate index t_i on t (a, b, c, d);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>100<\/li>\n<li>200<\/li>\n<li>400<\/li>\n<li>800<\/li>\n<li>1600<\/li>\n<li>3200<\/li>\n<li>6400<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Oracle'i dokumentatsiooni kohaselt (tsiteeritud 11.2):<\/p>\n<p>Loogilised andmebaasi piirid<\/p>\n<p><strong>Esemed<\/strong><br \/>\n<strong>Piiri t\u00fc\u00fcp<\/strong><br \/>\n<strong>Piiri v\u00e4\u00e4rtus<\/strong><\/p>\n<p>Indeksid<br \/>\nIndekseeritud veeru kogumaht<br \/>\n75% andmebaasi ploki suurusest miinus mingi \u00fclem\u00e4\u00e4rane kulu<\/p>\n<p>\nSeega ei tohi indekseeritavate veergude kogumahu suurus \u00fcletada 6 KB. Edasi oleneb valitud andmebaasi kodeeringust. Kodeeringu AL32UTF8 puhul v\u00f5ib \u00fcks s\u00fcmbol v\u00f5tta maksimaalselt 4 baiti, seega mahub 6 kilobaidi halvemal juhul umbes 1500 s\u00fcmbolit. Seet\u00f5ttu keelab Oracle indeksi loomise, kui N = 400 (kui v\u00f5tme pikkus halvemal juhul on 1600 s\u00fcmbolit * 4 baiti + rowid pikkus), samas kui <b>N = 200 (ja v\u00e4hem)<\/b> indeksi loomine sujub probleemideta.<\/p>\n<h3>INSERT operaator koos APPEND vihjega on m\u00f5eldud andmete laadimiseks otse-re\u017eiimis. Mis juhtub, kui seda rakendada tabelile, millel on triger?<\/h3>\n<p><\/p>\n<ul>\n<li>Andmed laaditakse otse-re\u017eiimis, triger t\u00f6\u00f6tab nagu peab<\/li>\n<li>Andmed laaditakse otse-re\u017eiimis, kuid triger ei t\u00f6\u00f6ta<\/li>\n<li>Andmed laaditakse tavare\u017eiimis, triger t\u00f6\u00f6tab nagu peab<\/li>\n<li>Andmed laaditakse tavare\u017eiimis, kuid triger ei t\u00f6\u00f6ta<\/li>\n<li>Andmeid ei laadita, tekib viga<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>P\u00f5him\u00f5tteliselt on see k\u00fcsimus rohkem loogika kohta. \u00d5ige vastuse leidmiseks soovitaksin j\u00e4rgmise m\u00f5tlemismudeli:<\/p>\n<ol>\n<li>Andmete sisestamine otse re\u017eiimis toimub andmeploki otsese genereerimise teel, m\u00f6\u00f6daminnes SQL-mootorist, mis tagab k\u00f5rge kiirus. Seet\u00f5ttu on triki t\u00e4itmine v\u00e4ga keeruline, kui \u00fcldse v\u00f5imalik, ja sellel ei ole m\u00f5tet, kuna see aeglustab ikka veel sisestamist dramaatiliselt.<\/li>\n<li>T\u201frigri t\u00e4itmata j\u00e4tmine t\u00e4hendab, et andmete sarnase sisestamise puhul s\u00f5ltub kogu andmebaasi seisund (sealhulgas teised tabelid) olukorrast, millises re\u017eiimis need andmed sisestati. See rikub ilmselgelt andmete terviklikkust ja ei saa olla lahendus tootmises.<\/li>\n<li>Taotletud operatsiooni teostamise v\u00f5imatus t\u00e4histatakse \u00fcldiselt veana. Kuid siin tuleks meelde tuletada, et APPEND on vihje, ja vihjete \u00fcldine loogika on, et neid arvestatakse, kui see on v\u00f5imalik; kui ei, siis teostatakse operaator ilma vihjet arvestamata.<\/li>\n<\/ol>\n<p>\nSeet\u00f5ttu on oodatav vastus \u2013 <b>andmed laaditakse tavap\u00e4rases (SQL) re\u017eiimis, trikk aktiveeritakse.<\/b><\/p>\n<p>Oracle'i dokumentatsiooni kohaselt (tsiteeritud 8.04):<\/p>\n<p>Piirangute rikkumised toovad kaasa lause j\u00e4rjestikuse t\u00e4itmise konventsionaalsel sisestusteel, ilma hoiatusete v\u00f5i veateadeteta. Erandiks on piirangud, mis kehtivad lause puhul, mis p\u00e4\u00e4seb samu tabeleid rohkem kui \u00fcks kord tehingus, mis v\u00f5ib p\u00f5hjustada veateateid.<br \/>\nN\u00e4iteks, kui tabelil on olemas k\u00e4ivitajad v\u00f5i viidete terviklikkus, siis APPEND vihje eiratakse, kui proovite kasutada otsest laadimist INSERT (j\u00e4rjestikuline v\u00f5i paralleelne), samuti PARALLEL vihje v\u00f5i klausel, kui see on olemas.<\/p>\n<h3>Mis juhtub j\u00e4rgmise skripti t\u00e4itmisel?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">create table t(i integer not null primary key, j integer references t);\n \ncreate trigger t_a_i after insert on t for each row\ndeclare\n    pragma autonomous_transaction;\nbegin\n    insert into t values (:new.i + 1, :new.i);\n    commit;\nend;\n\/\n \ninsert into t values (1, null);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Edukalt t\u00e4idetud<\/li>\n<li>Viga s\u00fcnaktakiga<\/li>\n<li>Viga, mis on seotud autonoomse tehingu keeldumisega<\/li>\n<li>Viga, mis on seotud maksimaalse kutse s\u00fcgavause \u00fcletamisega<\/li>\n<li>Viga, mis on seotud v\u00e4lisv\u00f5tme rikkumisega<\/li>\n<li>Viga, mis on seotud lukustustega<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Tabel ja k\u00e4iviti luuakse t\u00e4iesti korrektselt ja see toiming ei peaks probleeme tekitama. K\u00e4ivitites on autonoomsed tehingud samuti lubatud, muidu oleks n\u00e4iteks logimise tegemine v\u00f5imatu.<\/p>\n<p>Esimese rea sisestamise j\u00e4rel aktiveerib automaatne s\u00fcndmus teise rea sisestamise, mist\u00f5ttu aktiveerub taas s\u00fcndmus, sisestades kolmanda rea ja nii edasi, kuni statement eba\u00f5nnestub maksimaalse sisestuste s\u00fcgavuse \u00fcletamise t\u00f5ttu. Siiski, on veel \u00fcks peene n\u00fcanss. Esimese sisestatud kirje t\u00f6\u00f6tluse hetkel ei ole commit toimunud. Seega, autonoomses tehingus t\u00f6\u00f6tav s\u00fcndmus p\u00fc\u00fcab sisestada tabelisse rida, mis viitab v\u00e4lisv\u00f5tmega veel commiteerimata kirjele. See p\u00f5hjustab ooteolukorra (autonoomne tehing ootab p\u00f5hitehingu commit'i, et m\u00f5ista, kas andmeid saab sisestada) ja samal ajal ootab p\u00f5hitehing autonoomse commit'i l\u00f5petamist, et j\u00e4tkata t\u00f6\u00f6d p\u00e4rast s\u00fcndmust. <b>Tekkib deadlock ja selle tagaj\u00e4rjel \u2013 autonoomne tehing katkestatakse seoses lukustustega<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Kas see oli raske?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Kaks s\u00f5rme, lahendasin kohe k\u00f5ik \u00f5igesti.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ei olnud eriti, eksisin paaris k\u00fcsimuses.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Lahendasin poole \u00f5igesti.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Kaks korda arvasin vastuse \u00f5igesti!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Kirjutan kommentaaridesse<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 14 kasutajat. 10 kasutajat j\u00e4i erapooletuks.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sportmaster_lab\/blog\/459680\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27053,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Highload++ Siberia 2019 j\u00e4lgedes \u2014 8 \u00fclesannet Oracle'ile | ProHoster","description":"Tere! 24-25 juuni Novosibirskis toimus konverents Highload++ Siberia 2019. Meie tiim oli ka seal esinemisega \"Oracle konteinerbaasid (CDB\/PDB) ja nende praktiline kasutamine tarkvara arenduses\", paneme teksti versiooni hiljem \u00fcles. Oli suurep\u00e4rane, t\u00e4nu olegbuninile korralduse eest ja k\u00f5igile, kes kohal olid. Sel postitusel soovime jagada teiega \u00fclesandeid, mis","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e \u0441\u043b\u0435\u0434\u0430\u043c Highload++ Siberia 2019 \u2014 8 \u0437\u0430\u0434\u0430\u0447 \u043f\u043e Oracle | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! 24-25 \u0438\u044e\u043d\u044f \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f Highload++ Siberia 2019. \u041d\u0430\u0448\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c \u00ab\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0435 \u0431\u0430\u0437\u044b Oracle (CDB\/PDB) \u0438 \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e\u00bb, \u043c\u044b \u0432\u044b\u043b\u043e\u0436\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435. \u0411\u044b\u043b\u043e \u043a\u0440\u0443\u0442\u043e, \u0441\u043f\u0430\u0441\u0438\u0431\u043e olegbunin \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:58+00:00","article:modified_time":"2019-10-31T19:09:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36171","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:18:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:49:43","updated":"2026-01-22 02:18:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}