{"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\/it\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","title":{"rendered":"Sulle tracce di Highload++ Siberia 2019 \u2014 8 problemi su Oracle","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao!<\/p>\n<p>Il 24 e 25 giugno a Novosibirsk si \u00e8 tenuta la conferenza Highload++ Siberia 2019. Anche il nostro team era presente. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5211\">relazione<\/a><\/noindex> \u00abDatabase container Oracle (CDB\/PDB) e il loro utilizzo pratico per lo sviluppo di software\u00bb, pubblicheremo la versione testuale un po' pi\u00f9 tardi. \u00c8 stato fantastico, grazie. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/olegbunin\/\" class=\"user_link\">olegbunin<\/a><\/noindex> per l'organizzazione e a tutti coloro che sono intervenuti. <\/p>\n<p><img decoding=\"async\" alt=\"Sulle tracce di Highload++ Siberia 2019 \u2014 8 problemi su Oracle\" src=\"\/wp-content\/uploads\/2019\/07\/27f4707d4bb5968eaaa5c4748ff467cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn questo post vorremmo condividere con voi le domande che erano al nostro stand, in modo che possiate testare le vostre conoscenze in Oracle. Sotto \u2014 8 domande, opzioni di risposta e spiegazione.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Qual \u00e8 il valore massimo della sequenza che vedremo come risultato dell'esecuzione del seguente script?<\/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>Nessuno, ci sar\u00e0 un errore.<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Risposta<\/b>Secondo la documentazione Oracle (citata da 8.1.6):<br \/>\nAll'interno di una singola istruzione SQL, Oracle incrementer\u00e0 la sequenza solo una volta per riga. Se un'istruzione contiene pi\u00f9 di un riferimento a NEXTVAL per una sequenza, Oracle incrementa la sequenza una sola volta e restituisce lo stesso valore per tutte le occorrenze di NEXTVAL. Se un'istruzione contiene riferimenti sia a CURRVAL che a NEXTVAL, Oracle incrementa la sequenza e restituisce lo stesso valore sia per CURRVAL che per NEXTVAL indipendentemente dall'ordine all'interno dell'istruzione.<\/p>\n<p>Pertanto, <b>il valore massimo corrisponder\u00e0 al numero di righe, ovvero 5.<\/b>.<\/p>\n<h3>Quante righe ci saranno nella tabella come risultato dell'esecuzione del seguente script?<\/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\">Risposta<\/b>Secondo la documentazione Oracle (citata da 11.2):<\/p>\n<p>Prima di eseguire qualsiasi istruzione SQL, Oracle segna un salvataggio implicito (non disponibile per te). Poi, se l'istruzione fallisce, Oracle torna automaticamente indietro e restituisce il codice di errore applicabile a SQLCODE in SQLCA. Ad esempio, se un'istruzione INSERT causa un errore tentando di inserire un valore duplicato in un indice unico, l'istruzione viene annullata.<\/p>\n<p>La chiamata alla stored procedure dal client \u00e8 anch'essa considerata e trattata come un'unica istruzione. Cos\u00ec, la prima chiamata alla stored procedure termina con successo, inserendo tre record; la seconda chiamata termina con un errore e annulla il quarto record che era riuscita a inserire; la terza chiamata termina con un errore, <b>e nella tabella si trovano tre record.<\/b>.<\/p>\n<h3>Quante righe ci saranno nella tabella come risultato dell'esecuzione del seguente script?<\/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\">Risposta<\/b>Secondo la documentazione Oracle (citata da 11.2):<\/p>\n<p>Una restrizione di controllo consente di specificare una condizione che ciascuna riga nella tabella deve soddisfare. Per soddisfare la restrizione, ogni riga nella tabella deve rendere la condizione vera o sconosciuta (a causa di un null). Quando Oracle valuta una condizione di restrizione di controllo per una particolare riga, qualsiasi nome di colonna nella condizione fa riferimento ai valori delle colonne in quella riga.<\/p>\n<p>Pertanto, il valore null passer\u00e0 il controllo e il blocco anonimo sar\u00e0 eseguito con successo fino al tentativo di inserire il valore 3. Dopo di ci\u00f2, il blocco di gestione degli errori spegner\u00e0 l'eccezione, non ci sar\u00e0 alcun rollback e <b>nella tabella rimarranno quattro righe<\/b> con i valori 1, null, 2 e di nuovo null.<\/p>\n<h3>Quali coppie di valori occuperanno spazi uguali nel blocco?<\/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 e X<\/li>\n<li>B e Y<\/li>\n<li>C e K<\/li>\n<li>C e Z<\/li>\n<li>K e Z<\/li>\n<li>I e J<\/li>\n<li>J e X<\/li>\n<li>Tutte le coppie menzionate<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Risposta<\/b>Presentiamo estratti dalla documentazione (12.1.0.2) sullo stoccaggio di vari tipi di dati in Oracle.<\/p>\n<p><b>Tipo di dato CHAR<\/b><br \/>\nIl tipo di dato CHAR specifica una stringa di caratteri a lunghezza fissa nel set di caratteri del database. Si specifica il set di caratteri del database quando si crea il database. Oracle garantisce che tutti i valori memorizzati in una colonna CHAR abbiano la lunghezza specificata dalla dimensione nelle semantiche di lunghezza selezionate. Se si inserisce un valore pi\u00f9 corto della lunghezza della colonna, Oracle riempie il valore con spazi bianchi fino alla lunghezza della colonna.<\/p>\n<p><b>Tipo di dato VARCHAR2<\/b><br \/>\nIl tipo di dato VARCHAR2 specifica una stringa di caratteri a lunghezza variabile nel set di caratteri del database. Si specifica il set di caratteri del database quando si crea il database. Oracle memorizza un valore di carattere in una colonna VARCHAR2 esattamente come lo si specifica, senza alcun riempimento con spazi bianchi, a condizione che il valore non superi la lunghezza della colonna.<\/p>\n<p><b>Tipo di dato NUMBER<\/b><br \/>\nIl tipo di dato NUMBER memorizza zero e numeri fissi positivi e negativi con valori assoluti compresi tra 1.0 x 10-130 e fino a non includere 1.0 x 10126. Se si specifica un'espressione aritmetica il cui valore ha un valore assoluto maggiore o uguale a 1.0 x 10126, Oracle restituisce un errore. Ogni valore NUMBER richiede da 1 a 22 byte. Tenendo conto di ci\u00f2, la dimensione della colonna in byte per un particolare valore numerico di tipo NUMBER(p), dove p \u00e8 la precisione di un dato valore, pu\u00f2 essere calcolata utilizzando la seguente formula: <i>ROUND((length(p)+s)\\\/2))+1<\/i> dove s \u00e8 zero se il numero \u00e8 positivo e s \u00e8 1 se il numero \u00e8 negativo.<\/p>\n<p>Inoltre, prendiamo un estratto dalla documentazione riguardante la memorizzazione dei valori null.<\/p>\n<p>Un null \u00e8 l'assenza di un valore in una colonna. I null indicano dati mancanti, sconosciuti o non applicabili. I null sono memorizzati nel database se si trovano tra colonne con valori di dati. In questi casi, richiedono 1 byte per memorizzare la lunghezza della colonna (zero). I null terminali in una riga non richiedono alcuno spazio di archiviazione perch\u00e9 un nuovo intestazione della riga segnala che le colonne rimanenti nella riga precedente sono null. Ad esempio, se le ultime tre colonne di una tabella sono null, allora nessun dato \u00e8 memorizzato per queste colonne.<\/p>\n<p>Basandoci su questi dati, costruiamo ragionamenti. Consideriamo che nel DB sia utilizzata la codifica AL32UTF8. In questa codifica le lettere russe occuperanno 2 byte.<\/p>\n<p>1) A e X, il valore del campo a &#8216;Y&#8217; occupa 1 byte, il valore del campo x \u2018\u0414\u2019 \u2013 2 byte<br \/>\n2) B e Y, \u2018Vasja\u2019 in b verr\u00e0 completato con spazi fino a 10 caratteri e occuper\u00e0 14 byte, \u2018Vasja\u2019 in d \u2013 occuper\u00e0 8 byte.<br \/>\n3) C e K. Entrambi i campi hanno valore NULL, dopo di essi ci sono campi significativi, quindi occupano 1 byte ciascuno.<br \/>\n4) C e Z. Entrambi i campi hanno valore NULL, ma il campo Z \u00e8 l'ultimo nella tabella, quindi non occupa spazio (0 byte). Il campo C occupa 1 byte.<br \/>\n5) K e Z. Analogamente al caso precedente. Il valore nel campo K occupa 1 byte, in Z \u2013 0.<br \/>\n6) I e J. Secondo la documentazione, entrambi i valori occupano 2 byte. La lunghezza si calcola secondo la formula fornita nella documentazione: round( (1 + 0) \/ 2) +1 = 1 + 1 = 2.<br \/>\n7) J e X. Il valore nel campo J occuper\u00e0 2 byte, il valore nel campo X occuper\u00e0 2 byte.<\/p>\n<p><b>In totale, le combinazioni corrette sono: C e K, I e J, J e X.<\/b><\/p>\n<p><\/p>\n<h3>Qual \u00e8 approssimativamente il clustering factor per l'indice T_I?<\/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>Dell'ordine di alcune decine<\/li>\n<li>Dell'ordine di alcune centinaia<\/li>\n<li>Dell'ordine di alcune migliaia<\/li>\n<li>Dell'ordine di alcune decine di migliaia<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Risposta<\/b>Secondo la documentazione Oracle (citata dalla versione 12.1):<\/p>\n<p>Per un indice B-tree, il clustering factor dell'indice misura il raggruppamento fisico delle righe rispetto a un valore di indice.<\/p>\n<p>Il clustering factor dell'indice aiuta l'ottimizzatore a decidere se \u00e8 pi\u00f9 efficiente un'analisi dell'indice o una scansione dell'intera tabella per determinate query. Un fattore di clustering basso indica una scansione efficiente dell'indice.<\/p>\n<p>Un fattore di clustering vicino al numero di blocchi in una tabella indica che le righe sono fisicamente ordinate nei blocchi della tabella per chiave di indice. Se il database esegue una scansione dell'intera tabella, allora tende a recuperare le righe cos\u00ec come sono memorizzate su disco ordinate per chiave di indice. Un fattore di clustering vicino al numero di righe indica che le righe sono sparse casualmente nei blocchi del database rispetto alla chiave di indice. Se il database esegue una scansione dell'intera tabella, non recupererebbe righe in alcun ordine ordinato da questa chiave di indice.<\/p>\n<p>In questo caso i dati sono perfettamente ordinati, quindi il clustering factor sar\u00e0 uguale o vicino al numero di blocchi occupati nella tabella. Per la dimensione standard del blocco di 8 kilobyte, ci si pu\u00f2 aspettare che in un blocco si possano inserire circa mille valori numerici stretti, quindi il numero di blocchi, e di conseguenza il clustering factor sar\u00e0 <b>dell'ordine di alcune decine<\/b>.<\/p>\n<h3>Per quali valori di N il seguente script verr\u00e0 eseguito con successo in un normale database con impostazioni standard?<\/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\">Risposta<\/b>Secondo la documentazione Oracle (citata da 11.2):<\/p>\n<p>Limiti logici del database<\/p>\n<p><strong>Voce<\/strong><br \/>\n<strong>Tipo di limite<\/strong><br \/>\n<strong>Valore limite<\/strong><\/p>\n<p>Indici<br \/>\nDimensione totale della colonna indicizzata<br \/>\n75% della dimensione del blocco del database meno un certo overhead<\/p>\n<p>\nPertanto, la dimensione totale delle colonne indicizzate non dovrebbe superare i 6 KB. Il resto dipende dalla codifica scelta per il database. Per la codifica AL32UTF8, un carattere pu\u00f2 occupare al massimo 4 byte; quindi, in 6 kilobyte, nel peggiore dei casi, possono stare circa 1500 caratteri. Perci\u00f2 Oracle vieterebbe la creazione dell'indice quando N = 400 (quando la lunghezza della chiave nel peggiore dei casi sar\u00e0 di 1600 caratteri * 4 byte + la lunghezza del rowid), mentre <b>quando N = 200 (e meno)<\/b> la creazione dell'indice funzioner\u00e0 senza problemi.<\/p>\n<h3>L'operatore INSERT con l'hint APPEND \u00e8 destinato al caricamento dei dati in modalit\u00e0 diretta. Cosa succeder\u00e0 se verr\u00e0 applicato a una tabella con un trigger associato?<\/h3>\n<p><\/p>\n<ul>\n<li>I dati saranno caricati in modalit\u00e0 diretta, il trigger verr\u00e0 attivato come dovrebbe<\/li>\n<li>I dati saranno caricati in modalit\u00e0 diretta, ma il trigger non verr\u00e0 eseguito<\/li>\n<li>I dati saranno caricati in modalit\u00e0 convenzionale, il trigger verr\u00e0 attivato come dovrebbe<\/li>\n<li>I dati saranno caricati in modalit\u00e0 convenzionale, ma il trigger non verr\u00e0 eseguito<\/li>\n<li>I dati non saranno caricati, verr\u00e0 registrato un errore<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Risposta<\/b>In linea di principio, questa \u00e8 una questione pi\u00f9 logica. Per trovare la risposta corretta, suggerirei il seguente modello di ragionamento:<\/p>\n<ol>\n<li>L'inserimento in modalit\u00e0 diretta avviene tramite la formazione diretta del blocco dati, bypassando il motore SQL, il che garantisce un'elevata velocit\u00e0. Pertanto, garantire l'esecuzione del trigger \u00e8 piuttosto difficile, se non impossibile, e non ha senso, poich\u00e9 rallenterebbe drasticamente l'inserimento.<\/li>\n<li>Il non eseguire il trigger porter\u00e0 al fatto che, con dati identici nella tabella, lo stato complessivo del database (di altre tabelle) dipender\u00e0 da quale modalit\u00e0 siano stati inseriti questi dati. Questo ovviamente distrugger\u00e0 l'integrit\u00e0 dei dati e non pu\u00f2 essere applicato come soluzione in produzione.<\/li>\n<li>L'impossibilit\u00e0 di eseguire l'operazione richiesta, in linea generale, viene interpretata come un errore. Ma qui bisogna ricordare che APPEND \u00e8 un hint, e la logica generale degli hint consiste nel fatto che vengono presi in considerazione se possibile; altrimenti, l'operatore viene eseguito senza considerare l'hint.<\/li>\n<\/ol>\n<p>\nPertanto, la risposta attesa \u00e8 <b>i dati saranno caricati in modalit\u00e0 normale (SQL), il trigger verr\u00e0 attivato.<\/b><\/p>\n<p>Secondo la documentazione Oracle (citato da 8.04):<\/p>\n<p>Le violazioni delle restrizioni causaranno l'esecuzione della dichiarazione in modo seriale, utilizzando il percorso di inserimento convenzionale, senza avvisi o messaggi di errore. Un'eccezione \u00e8 la restrizione sulle dichiarazioni che accedono alla stessa tabella pi\u00f9 di una volta in una transazione, che pu\u00f2 causare messaggi di errore.<br \/>\nAd esempio, se ci sono vincoli o integrit\u00e0 referenziale presenti nella tabella, il suggerimento APPEND verr\u00e0 ignorato quando provi a utilizzare INSERT con carico diretto (seriale o parallelo), cos\u00ec come il suggerimento o la clausola PARALLEL, se presenti.<\/p>\n<h3>Cosa succeder\u00e0 durante l'esecuzione del seguente script?<\/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>Esecuzione riuscita<\/li>\n<li>Errore a causa di un errore di sintassi<\/li>\n<li>Errore relativo all'invalidit\u00e0 della transazione autonoma<\/li>\n<li>Errore relativo al superamento della massima profondit\u00e0 di chiamate<\/li>\n<li>Errore relativo alla violazione del vincolo di chiave esterna<\/li>\n<li>Errore relativo ai blocchi<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Risposta<\/b>La tabella e il trigger sono creati correttamente e questa operazione non dovrebbe causare problemi. Le transazioni autonome nel trigger sono anch'esse abilitate, altrimenti non sarebbe possibile, ad esempio, il logging.<\/p>\n<p>Dopo l'inserimento della prima riga, l'attivazione del trigger porterebbe all'inserimento della seconda riga, il che attiverebbe nuovamente il trigger, inserendo la terza riga e cos\u00ec via fino a quando la dichiarazione non fallirebbe a causa del superamento della massima profondit\u00e0 di chiamate. Tuttavia, si presenta un altro aspetto sottile. Al momento dell'esecuzione del trigger per il primo record inserito, il commit non \u00e8 ancora stato eseguito. Pertanto, il trigger, funzionando in una transazione autonoma, tenta di inserire nella tabella una riga che fa riferimento a un record non ancora impegnato. Questo porta a un'attesa (la transazione autonoma attende il commit principale per capire se i dati possono essere inseriti) e contemporaneamente la transazione principale attende il commit della transazione autonoma per continuare dopo il trigger. <b>Si verifica un deadlock e di conseguenza la transazione autonoma viene annullata a causa dei blocchi<\/b>.<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Era difficile?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Come bere un bicchier d'acqua, ho risolto tutto correttamente.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Non molto, ho sbagliato un paio di domande.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ho risolto met\u00e0 correttamente.<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ho indovinato la risposta due volte!<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Scriver\u00f2 nei commenti<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 14 utenti. Si sono astenuti 10 utenti.<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Sulle tracce di Highload++ Siberia 2019 \u2014 8 compiti su Oracle | ProHoster","description":"Ciao! Il 24-25 giugno a Novosibirsk si \u00e8 tenuta la conferenza Highload++ Siberia 2019.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/po-sledam-highload-siberia-2019-8-zadach-po-oracle","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/36171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}