{"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 j\u00e4lgedes \u2013 8 \u00fclesannet Oracle'i jaoks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere!<\/p>\n<p>24-25 juunil toimus Novosibirskis konverents Highload++ Siberia 2019. Meie tiim oli ka kohal. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">ettekanne<\/a><\/noindex> \u201eOracle'i konteinerandmebaasid (CDB\/PDB) ja nende praktiline kasutamine tarkvara arenduses\u201c, jagame tekstiversioone natuke hiljem. Oli \u00e4ge, ait\u00e4h. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> korralduse eest, samuti k\u00f5igile, kes kohal olid. <\/p>\n<p><img decoding=\"async\" alt=\"Highload++ Siberia 2019 j\u00e4lgedes \u2013 8 \u00fclesannet Oracle&#039;i jaoks\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelles postituses tahame teiega jagada \u00fclesandeid, mis olid meie standil, et saaksite oma Oracle'i teadmisi testida. Allpool on 8 \u00fclesannet, vastusevariandid ja selgitus.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Milline on maksimaalne seeria v\u00e4\u00e4rtus, mida me n\u00e4eme j\u00e4rgmise skripti t\u00e4itmisel?<\/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>Mitte mingit, ilmneb viga.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Vastavalt Oracle'i dokumentatsioonile (tsiteeritud versioonist 8.1.6):<br \/>\n\u00dches SQL-k\u00e4skluses suurendab Oracle j\u00e4rjestust ainult \u00fche korra rea kohta. Kui k\u00e4sklus sisaldab rohkem kui \u00fchte viidatud v\u00e4\u00e4rtust NEXTVAL j\u00e4rjestusele, suurendab Oracle j\u00e4rjestust \u00fche korra ja tagastab sama v\u00e4\u00e4rtuse k\u00f5ikide NEXTVAL-i viidete korral. Kui k\u00e4skluses on viidatud nii CURRVALile kui NEXTVALile, suurendab Oracle j\u00e4rjestust ja tagastab sama v\u00e4\u00e4rtuse nii CURRVALile kui ka NEXTVALile, olenemata nende j\u00e4rjekorrast k\u00e4sus.<\/p>\n<p>Seega, <b>maksimaalne v\u00e4\u00e4rtus vastab ridade arvule, st 5.<\/b>.<\/p>\n<h3>Kui palju ridu on tabelis p\u00e4rast j\u00e4rgmise skripti t\u00e4itmist?<\/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>Vastavalt Oracle'i dokumentatsioonile (tsiteeritud versioonist 11.2):<\/p>\n<p>Enne mis tahes SQL-k\u00e4skluse t\u00e4itmist m\u00e4rgib Oracle vaikimisi salvestuspunkti (mis ei ole teile saadaval). Siis, kui k\u00e4sklus eba\u00f5nnestub, taastab Oracle selle automaatselt ja tagastab kohaldatava veakoodi SQLCODE'i SQLCA-s. N\u00e4iteks, kui INSERT k\u00e4sklus p\u00f5hjustab vea, p\u00fc\u00fcdes sisestada duubeldatud v\u00e4\u00e4rtust unikaalsesse indeksisse, taastatakse k\u00e4sklus.<\/p>\n<p>Kliendi poolne salaj\u00e4rje kutse k\u00e4sitletakse samuti nagu \u00fche k\u00e4skluse t\u00e4itmine. Seega esimene salaj\u00e4rje kutse \u00f5nnestub, sisestades kolm kirjet; teine salaj\u00e4rje kutse l\u00f5peb veaga ja t\u00fchistab neljanda kirje, mille ta j\u00f5udis sisestada; kolmas kutse l\u00f5peb veaga, <b>ja tabelis on kolm kirjet.<\/b>.<\/p>\n<h3>Kui palju ridu on tabelis p\u00e4rast j\u00e4rgmise skripti t\u00e4itmist?<\/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>Vastavalt Oracle'i dokumentatsioonile (tsiteeritud versioonist 11.2):<\/p>\n<p>Kontrolli piirang v\u00f5imaldab m\u00e4\u00e4rata tingimuse, mida iga rida tabelis peab t\u00e4itma. Selle t\u00e4itmiseks peab iga tabeli rida olema tingimustest kas TRUE v\u00f5i teadmata (t\u00e4nu nullile). Kui Oracle hindab kontrolli piirangu tingimust konkreetse rea jaoks, viitavad tingimuses olevad veergude nimed sellele rea veergude v\u00e4\u00e4rtustele.<\/p>\n<p>Seega l\u00e4bib nulli v\u00e4\u00e4rtus kontrolli ning anon\u00fc\u00fcmne plokk t\u00e4idetakse edukalt kuni katsega sisestada v\u00e4\u00e4rtus 3. P\u00e4rast seda kustutab t\u00f5rke t\u00f6\u00f6tlemise plokk erandi, tagasiviimist ei toimu ja <b>tabelis j\u00e4\u00e4b neli rida.<\/b> v\u00e4\u00e4rtustega 1, null, 2 ja taas null.<\/p>\n<h3>Millised v\u00e4\u00e4rtuste paarid v\u00f5tavad sama palju 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', 'Vasya', 10, 10, 'D', 'Vasya');\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 v\u00e4ljav\u00f5tte dokumentatsioonist (12.1.0.2) erinevate andmet\u00fc\u00fcpide salvestamise kohta Oracles.<\/p>\n<p><b>CHAR Andmet\u00fc\u00fcp<\/b><br \/>\nCHAR andmet\u00fc\u00fcp m\u00e4\u00e4ratleb fikseeritud pikkusega s\u00fcmbolite joonise andmebaasi s\u00fcmbolite kogumis. Andmebaasi s\u00fcmbolite kogus m\u00e4\u00e4ratakse, kui loote oma andmebaasi. Oracle tagab, et k\u00f5ik CHAR veerus salvestatud v\u00e4\u00e4rtused vastavad suurusele, mille olete valinud pikkuse semantika j\u00e4rgi. Kui sisestate v\u00e4\u00e4rtuse, mis on l\u00fchem kui veeru pikkus, t\u00e4idab Oracle v\u00e4\u00e4rtuse veeru pikkusele vastava t\u00fchikuga.<\/p>\n<p><b>VARCHAR2 Andmet\u00fc\u00fcp<\/b><br \/>\nVARCHAR2 andmet\u00fc\u00fcp m\u00e4\u00e4ratleb muutumispikkusega s\u00fcmbolite joonise andmebaasi s\u00fcmbolite kogumis. Andmebaasi s\u00fcmbolite kogust m\u00e4\u00e4ratakse, kui loote oma andmebaasi. Oracle salvestab VARCHAR2 veerus s\u00fcmbolv\u00e4\u00e4rtuse t\u00e4pselt sellisena, nagu te selle m\u00e4\u00e4rate, ilma t\u00fchikute t\u00e4itmiseta, 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, samuti positiivseid ja negatiivseid fikseeritud numbreid absoluutv\u00e4\u00e4rtustega alates 1,0 x 10-130 kuni, kuid mitte sealhulgas 1,0 x 10126. Kui m\u00e4\u00e4rate aritmeetilise avaldi, mille v\u00e4\u00e4rtus on absoluutv\u00e4\u00e4rtus suurem v\u00f5i v\u00f5rdne 1,0 x 10126, tagastab Oracle vea. Iga NUMBER v\u00e4\u00e4rtus n\u00f5uab 1 kuni 22 baiti. Arvestades seda, saab konkreetse numbrilise andmev\u00e4\u00e4rtuse NUMBER(p) veeru suurust baitides arvutada, kasutades j\u00e4rgmist valemit: <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 v\u00e4ljav\u00f5tte dokumentatsioonist Null v\u00e4\u00e4rtuste s\u00e4ilitamise kohta.<\/p>\n<p>Null on v\u00e4\u00e4rtuse puudumine veerus. Nullid n\u00e4itavad puuduvat, tundmatut v\u00f5i mittetulenevat teavet. Nullid salvestatakse andmebaasis, kui need asuvad andmev\u00e4\u00e4rtustega veergude vahel. Sel juhul n\u00f5uavad nad 1 baiti veeru pikkuse salvestamiseks (null). Rida l\u00f5pus olevad nullid ei n\u00f5ua salvestamist, kuna uus ridade p\u00e4is m\u00e4rgib, et eelmise rea j\u00e4relej\u00e4\u00e4nud veerud on null. N\u00e4iteks, kui tabeli viimased kolm veergu on null, siis nende veergude jaoks ei salvestata andmeid.<\/p>\n<p>V\u00f5ttes arvesse neid andmeid, koostame argumente. Eeldame, et andmebaasis kasutatakse kodeeringut AL32UTF8. Selles kodeeringus h\u00f5ivavad vene t\u00e4hed 2 baiti.<\/p>\n<p>1) A ja X, v\u00e4lja a &#8216;Y&#8217; v\u00e4\u00e4rtus on 1 bait, v\u00e4lja x \u2018\u0414\u2019 \u2013 2 baidi<br \/>\n2) B ja Y, 'Vasya' b v\u00e4\u00e4rtus t\u00e4iendatakse t\u00fchikutega kuni 10 s\u00fcmbolit ja v\u00f5tab 14 baiti, 'Vasya' d v\u00e4\u00e4rtus \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 need 1 baiti.<br \/>\n4) C ja Z. M\u00f5lemad v\u00e4ljad on NULL v\u00e4\u00e4rtusega, kuid Z v\u00e4li on tabelis viimane, seega ei v\u00f5ta see ruumi (0 baiti). C v\u00e4li v\u00f5tab 1 baiti.<br \/>\n5) K ja Z. Sarnane eelnevale juhtumile. K v\u00e4lja v\u00e4\u00e4rtus v\u00f5tab 1 baiti, Z \u2013 0.<br \/>\n6) I ja J. Dokumentatsiooni kohaselt v\u00f5tavad m\u00f5lemad v\u00e4\u00e4rtused 2 baiti. Pikkust arvestame dokumentatsioonist saadud valemi j\u00e4rgi: round( (1 + 0) \/ 2) + 1 = 1 + 1 = 2.<br \/>\n7) J ja X. J v\u00e4lja v\u00e4\u00e4rtus v\u00f5tab 2 baiti, X v\u00e4lja v\u00e4\u00e4rtus v\u00f5tab 2 baiti.<\/p>\n<p><b>Seega, \u00f5iged variandid: C ja K, I ja J, J ja X.<\/b><\/p>\n<p><\/p>\n<h3>Milline on umbkaudu clustering factor indeksi T_I puhul?<\/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>K\u00fcmneid<\/li>\n<li>Sadu<\/li>\n<li>Tuhandeid<\/li>\n<li>K\u00fcmneid tuhandeid<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Vastus<\/b>Oracle'i dokumentatsiooni kohaselt (tsiteeritud 12.1):<\/p>\n<p>B-puu indeksi korral m\u00f5\u00f5dab indeksi clustering factor ridade f\u00fc\u00fcsilist kogunemist indeksi v\u00e4\u00e4rtuse suhtes.<\/p>\n<p>Indeksi clustering factor aitab optimeerijal otsustada, kas indeksi skaneerimine v\u00f5i t\u00e4istabeli skaneerimine on teatud p\u00e4ringute jaoks t\u00f5husam. Madal clustering factor viitab t\u00f5husale indeksi skaneerimisele.<\/p>\n<p>Clustering factor, mis on l\u00e4hedal tabeli plokkide arvule, n\u00e4itab, et read on f\u00fc\u00fcsiliselt tabeli plokkides indeksi v\u00f5tme j\u00e4rgi j\u00e4rjestatud. Kui andmebaas teeb t\u00e4istabeli skaneerimise, siis suudab andmebaas t\u00f5en\u00e4oliselt tuua read nii, nagu need on kettal j\u00e4rjestatud indeksi v\u00f5tme j\u00e4rgi. Clustering factor, mis on l\u00e4hedal ridade arvule, n\u00e4itab, et read on andmebaasi plokkides indeksi v\u00f5tme suhtes juhuslikult hajutatud. Kui andmebaas teeb t\u00e4istabeli skaneerimise, siis ei tooda read mingil j\u00e4rjestatud j\u00e4rjekorras selle indeksi v\u00f5tme j\u00e4rgi.<\/p>\n<p>Antud juhul on andmed ideaalselt sorteeritud, seega clustering factor on v\u00f5rdne v\u00f5i l\u00e4hedane tabelis kasutatud plokkide arvule. Tavalise ploki suuruse korral 8 kilobaiti v\u00f5ib oodata, et \u00fchte plokki mahub umbes tuhat kitsast number v\u00e4\u00e4rtust, seega plokkide arv ja seega clustering factor on <b>k\u00fcmneid<\/b>.<\/p>\n<h3>Millistel N v\u00e4\u00e4rtustel k\u00e4ivitub j\u00e4rgmine skript edukalt tavalises andmebaasis vaikeseadetega?<\/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>Vastavalt Oracle'i dokumentatsioonile (tsiteeritud versioonist 11.2):<\/p>\n<p>Loogilised andmebaasi piirangud<\/p>\n<p><strong>Esemed<\/strong><br \/>\n<strong>Piirangu t\u00fc\u00fcp<\/strong><br \/>\n<strong>Piirangu v\u00e4\u00e4rtus<\/strong><\/p>\n<p>Indeksid<br \/>\nIndekseeritud veeru kogusumma<br \/>\n75% andmebaasi ploki suurusest miinus m\u00f5ned lisakulud<\/p>\n<p>\nSeega ei tohi indekseeritud veergude kogusumma \u00fcletada 6 KB. Edasi s\u00f5ltub see valitud andmebaasi kodeeringust. Koderingu AL32UTF8 puhul v\u00f5ib \u00fcks t\u00e4ht v\u00f5tta maksimaalselt 4 baiti, seega mahub 6 kilobaiti halva variandi korral umbes 1500 t\u00e4hem\u00e4rki. Seega keelab Oracle indeksi loomise juhul, kui N = 400 (kui v\u00f5tme pikkus halvas variandis on 1600 t\u00e4hem\u00e4rki * 4 baiti + rowid pikkus), samas kui <b>kui N = 200 (ja v\u00e4hem)<\/b> indeksi loomine t\u00f6\u00f6tab 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 k\u00e4ivitub nagu peab.<\/li>\n<li>Andmed laaditakse otse re\u017eiimis, kuid trigerit ei k\u00e4ivitata.<\/li>\n<li>Andmed laaditakse tavalises re\u017eiimis, triger k\u00e4ivitub nagu peab.<\/li>\n<li>Andmed laaditakse tavalises re\u017eiimis, kuid trigerit ei k\u00e4ivitata.<\/li>\n<li>Andmeid ei laadita, ilmneb 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\u00f5tlemisviisi:<\/p>\n<ol>\n<li>Otse re\u017eiimis sisestamine toimub andmeploki vahetu koostamise kaudu, m\u00f6\u00f6da SQL-mootorit, mis tagab k\u00f5rge kiirus. Seega on trigeri t\u00e4itmine v\u00e4ga keeruline, kui mitte v\u00f5imatu, ja sellel pole m\u00f5tet, kuna see aeglustab sisestamist oluliselt.<\/li>\n<li>Triggereid mitte t\u00e4itmine t\u00e4hendab, et andmebaasi \u00fcldine seisund (teised tabelid) s\u00f5ltub sellest, millises re\u017eiimis need andmed sisestati. See rikub selgelt andmete j\u00e4rjepidevust ja ei saa olla lahendus tootmis\u00f6kos.<\/li>\n<li>Soovitud operatsiooni teostamise v\u00f5imetus m\u00f5istetakse \u00fcldiselt kui viga. Kuid sellega seoses tuleb meeles pidada, et APPEND on vihje, ja vihjete \u00fcldine loogika on see, et neid arvestatakse, kui see on v\u00f5imalik; kui ei, siis teostatakse operaator ilma vihje arvestamiseta.<\/li>\n<\/ol>\n<p>\nSeega on oodatav vastus - <b>andmed laaditakse tavalisel (SQL) re\u017eiimil, triger k\u00e4ivitub.<\/b><\/p>\n<p>Oracle'i dokumentatsiooni kohaselt (tsiteeritud alates 8.04):<\/p>\n<p>Piirangute rikkumine p\u00f5hjustab k\u00e4su t\u00e4itmise j\u00e4rjestikuse viisi kasutamise, kasutades tavap\u00e4rast sisestusteed, ilma hoiatuste ja veateadeteta. Erandiks on piirangud, mille kohaselt ligip\u00e4\u00e4seb sama tabelit rohkem kui \u00fcks kord tehingu k\u00e4igus, mis v\u00f5ib p\u00f5hjustada veateateid.<br \/>\nN\u00e4iteks, kui tabelis on k\u00e4ivitid v\u00f5i viidatud terviklikkus, siis APPEND vihje ignoreeritakse, kui proovite kasutada otsekoha (seeria v\u00f5i paralleel) INSERT-e, samuti PARALLEL vihjet v\u00f5i klauslit, kui selline on.<\/p>\n<h3>Mis juhtub j\u00e4rgmise skripti t\u00e4itmisel?<\/h3>\n<p><\/p>\n<pre><code class=\"sql\">loo tabel t(i t\u00e4isarv mitte null esmane v\u00f5ti, j t\u00e4isarv viidatud t);<br> <br>loo k\u00e4iviti t_a_i p\u00e4rast sisestamist t iga rea jaoks<br>deklaratsioon<br> pragma autonoomne tehing;alustage<br> sisestage t v\u00e4\u00e4rtused (:uus.i + 1, :uus.i);<br> kinnitage;<br> l\u00f5pp;<br> \/<br> <br>sisestage t v\u00e4\u00e4rtused (1, null);\n<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>T\u00e4ideti edukalt<\/li>\n<li>T\u00f5rge s\u00fcntaktilise vea t\u00f5ttu<\/li>\n<li>Viga, mis on seotud autonoomse tehingu keeldumisega<\/li>\n<li>Viga, mis on seotud maksimumkutsumise pesade \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 tohiks probleeme tekitada. Autonoomsed tehingud k\u00e4ivitusel on samuti lubatud, vastasel juhul ei oleks v\u00f5imalik n\u00e4iteks logimist.<\/p>\n<p>Esimese rea sisestamise j\u00e4rel k\u00e4ivitamine k\u00e4ivitit viib teise rea sisestamiseni, mis taas k\u00e4ivitab k\u00e4iviti, sisestab kolmanda rea jne, kuni statement kukub \u00e4ra maksimumkutsumise pesade \u00fcletamise t\u00f5ttu. Siiski tekib veel \u00fcks n\u00fcanss. K\u00e4iviti t\u00e4itmise ajal ei ole esimese sisestatud kirje kommiteerimine veel tehtud. Seega \u00fcritab autonoomses tehingus t\u00f6\u00f6tav k\u00e4iviti sisestada tabelisse rea, mis viitab v\u00e4lisv\u00f5tmele veel mitte-kinnitunud kirjele. See viib ootusse (autonoomne tehing ootab peamise tehingu kinnitamist, et m\u00f5ista, kas andmeid saab sisestada) ja samal ajal ootab peamine tehing kinnitatud autonoomset, et j\u00e4tkata k\u00e4iviti j\u00e4rel. <b>Tekkib deadlock ja tagaj\u00e4rjel l\u00f5petatakse autonoomne tehing lukustustega seotud p\u00f5hjusel<\/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 oli keeruline?<\/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. V\u00e4ltis 10 kasutajat.<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 5.0.1.1 - 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.\" \/>\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) 5.0.1.1\" \/>\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.\" \/>\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 - 8 \u00fclesannet Oracle'ist | ProHoster","description":"Tere! 24.-25. juunil toimus Novosibirski linnas konverents Highload++ Siberia 2019.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}