Na-eso nzọụkwụ Highload++ Siberia 2019 - ọrụ 8 na Oracle

Ndewo!

Na June 24-25, e nwere ọgbakọ Highload++ Siberia 2019 na Novosibirsk. Ụmụ okorobịa anyị nọkwa ebe ahụ. akuko "Ebe nchekwa data Oracle (CDB/PDB) na ojiji ha bara uru maka mmepe ngwanrọ", anyị ga-ebipụta ụdị ederede obere oge. Ọ dị mma, daalụ olegbunin maka nzukọ ahụ, yana onye ọ bụla bịara.

Na-eso nzọụkwụ Highload++ Siberia 2019 - ọrụ 8 na Oracle
Na post a, anyị ga-achọ ịkọrọ gị nsogbu ndị anyị nwere n'ụlọ ntu anyị ka i wee nwalee ihe ọmụma Oracle gị. N'okpuru ịkpụ bụ nsogbu 8, nhọrọ azịza na nkọwa.

Kedu uru usoro kachasị elu anyị ga-ahụ n'ihi ime ihe odide a?

create sequence s start with 1;
 
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;

  • 1
  • 5
  • 10
  • 25
  • Mba, a ga-enwe mperi

AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 8.1.6):
N'ime otu nkwupụta SQL, Oracle ga-abawanye usoro ahụ naanị otu ugboro n'ahịrị. Ọ bụrụ na nkwupụta nwere ihe karịrị otu ntụaka na NEXTVAL maka usoro, Oracle na-abawanye usoro ahụ otu ugboro wee weghachi otu uru maka ihe omume niile nke NEXTVAL. Ọ bụrụ na nkwupụta nwere ntụaka maka ma CURRVAL na NEXTVAL, Oracle na-abawanye usoro ahụ wee weghachi otu uru maka ma CURRVAL na NEXTVAL n'agbanyeghị usoro ha dị na nkwupụta ahụ.

N'ihi ya, uru kacha elu ga-adaba na ọnụọgụ ahịrị, ya bụ 5.

Ahịrị ole ga-adị na tebụl n'ihi ịgba ọsọ edemede a?

create table t(i integer check (i < 5));
 
create procedure p(p_from integer, p_to integer) as
begin
    for i in p_from .. p_to loop
        insert into t values (i);
    end loop;
end;
/
 
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);

  • 0
  • 3
  • 4
  • 5
  • 6
  • 9

AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):

Tupu imezu nkwupụta SQL ọ bụla, Oracle na-egosi ebe nchekwa ezoro ezo (anaghị adị gị). Mgbe ahụ, ọ bụrụ na nkwupụta ahụ daa, Oracle na-atụgharị ya azụ na-akpaghị aka wee weghachi koodu njehie dị na SQLCODE na SQLCA. Dịka ọmụmaatụ, ọ bụrụ na nkwupụta INSERT kpatara mperi site n'ịgbalị ịtinye uru oyiri na ndeksi pụrụ iche, a ga-atụgharịghachi nkwupụta ahụ.

A na-atụle ịkpọ HP n'aka onye ahịa ma hazie ya dị ka otu nkwupụta. Ya mere, oku HP nke mbụ na-emezu nke ọma, na-etinye ihe ndekọ atọ; oku HP nke abụọ na-ejedebe na njehie wee tụgharịa ndekọ nke anọ ọ jisiri ike tinye; okuku nke ato ada ada, ma enwere ihe ndekọ atọ na tebụl.

Ahịrị ole ga-adị na tebụl n'ihi ịgba ọsọ edemede a?

create table t(i integer, constraint i_ch check (i < 3));
 
begin
    insert into t values (1);
    insert into t values (null);
    insert into t values (2);
    insert into t values (null);
    insert into t values (3);
    insert into t values (null);
    insert into t values (4);
    insert into t values (null);
    insert into t values (5);
exception
    when others then
        dbms_output.put_line('Oops!');
end;
/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):

Mmachi nlele na-enye gị ohere ịkọwapụta ọnọdụ na ahịrị ọ bụla na tebụl ga-eju afọ. Iji meju ihe mgbochi ahụ, ahịrị ọ bụla dị na tebụl ga-emerịrị ọnọdụ ahụ ma ọ bụ EZIOKWU ma ọ bụ amaghị (n'ihi efu). Mgbe Oracle na-enyocha ọnọdụ mmachi nlele maka otu ahịrị, aha kọlụm ọ bụla na ọnọdụ ahụ na-ezo aka na ụkpụrụ kọlụm dị n'ahịrị ahụ.

Ya mere, uru null ga-agafe ego ahụ, a ga-egbukwa ngọngọ na-amaghị aha nke ọma ruo mgbe mgbalị iji tinye uru 3. Mgbe nke a gasịrị, nkwụsị njikwa njehie ga-ekpochapụ ihe ahụ, ọ dịghị ntụgharị ga-eme, na a ga-enwe ahịrị anọ fọdụrụ na tebụl nwere ụkpụrụ 1, efu, 2 na efu ọzọ.

Kedu ụzọ abụọ nke ụkpụrụ ga-ewe otu oghere na ngọngọ?

create table t (
    a char(1 char),
    b char(10 char),
    c char(100 char),
    i number(4),
    j number(14),
    k number(24),
    x varchar2(1 char),
    y varchar2(10 char),
    z varchar2(100 char));
 
insert into t (a, b, i, j, x, y)
    values ('Y', 'Вася', 10, 10, 'Д', 'Вася');

  • A na X
  • B na Y
  • C na K
  • C na Z
  • K na Z
  • Mụ na J
  • J na X
  • Edere ha niile

AzịzaNke a bụ nkọwapụta sitere na akwụkwọ (12.1.0.2) maka ịchekwa ụdị data dị iche iche na Oracle.

Ụdị data CHAR
Ụdị data CHAR na-akọwapụta eriri agwa ogologo n'ime njirimara nchekwa data. Ị na-akọwapụta mkpụrụedemede nchekwa data setịpụrụ mgbe ị mepụtara nchekwa data gị. Oracle na-achọpụta na ụkpụrụ niile echekwara na kọlụm CHAR nwere ogologo akọwapụtara site na nha n'ime usoro ọmụmụ ogologo ahọpụtara. Ọ bụrụ na itinye uru dị mkpụmkpụ karịa ogologo kọlụm, mgbe ahụ Oracle oghere-pad uru na ogologo kọlụm.

Ụdị data VARCHAR2
Ụdị data VARCHAR2 na-akọwapụta eriri agwa ogologo agbanwe agbanwe na ntọala njirimara nchekwa data. Ị na-akọwapụta mkpụrụedemede nchekwa data setịpụrụ mgbe ị mepụtara nchekwa data gị. Oracle na-echekwa uru agwa na kọlụm VARCHAR2 kpọmkwem dị ka i si ezipụta ya, na-enweghị oghere ọ bụla, ma ọ bụrụhaala na uru ahụ agaghị agafe ogologo nke kọlụm.

Ụdị data NUMBER
Ụdị data NUMBER ahụ na-echekwa efu yana ọnụọgụ dị mma na nke na-adịghị mma nwere ụkpụrụ zuru oke sitere na 1.0 x 10-130 ruo ma ọ bụghị gụnyere 1.0 x 10126. Ọ bụrụ na ị kọwapụta okwu mgbakọ na mwepụ nke uru ya nwere uru zuru oke karịa ma ọ bụ hà nhata. 1.0 x 10126, mgbe ahụ Oracle weghachiri mperi. Uru NUMBER ọ bụla chọrọ site na 1 ruo 22 bytes. N'iburu nke a n'uche, enwere ike gbakọọ nha kọlụm dị na bytes maka uru data ọnụọgụgụ NUMBER(p), ebe p bụ nkenke nke uru enyere, enwere ike gbakọọ site na iji usoro a: Gburugburu ((ogologo (p)+s)/2))+1 ebe s hà nhata efu ma ọ bụrụ na ọnụọgụgụ dị mma, na s nhata 1 ma ọ bụrụ na ọnụọgụ ahụ adịghị mma.

N'ịgbakwụnye, ka anyị wepụta ihe sitere na akwụkwọ gbasara ịchekwa ụkpụrụ Null.

Ihe efu bụ enweghị uru na kọlụm. Nulls na-egosi data efu, amaghị, ma ọ bụ enweghị ọrụ A na-echekwa nulls na nchekwa data ma ọ bụrụ na ha daa n'etiti kọlụm nwere ụkpụrụ data. N'okwu ndị a, ha chọrọ 1 byte iji chekwaa ogologo nke kọlụm (efu). Ntugharị nulls n'usoro anaghị achọ nchekwa n'ihi na nkụnye eji isi mee ahịrị ọhụrụ na-egosi na ogidi ndị fọdụrụ n'ahịrị gara aga bụ efu. Dịka ọmụmaatụ, ọ bụrụ na ogidi atọ ikpeazụ nke tebụl bụ ihe efu, mgbe ahụ ọ dịghị data echekwara maka ogidi ndị a.

Dabere na data ndị a, anyị na-emepụta echiche. Anyị chere na nchekwa data na-eji koodu AL32UTF8. N'ime koodu a, mkpụrụedemede Russia ga-ejide 2 bytes.

1) A na X, uru nke ubi a 'Y' na-ewe 1 byte, uru nke ubi x 'D' na-ewe 2 bytes.
2) B na Y, 'Vasya' na b uru ga-padded na oghere ruo 10 odide na ga-14 bytes, 'Vasya' na d ga-8 bytes.
3) C na K. Ubi abụọ ahụ nwere uru NULL, mgbe ha nwesịrị, enwere ubi dị ịrịba ama, ya mere ha na-eji 1 byte.
4) C na Z. Ubi abụọ ahụ nwere uru NULL, mana ubi Z bụ nke ikpeazụ na tebụl, n'ihi ya, ọ naghị ewe ohere (0 bytes). Ubi C nwere 1 byte.
5) K na Z. Yiri nke gara aga. Uru dị na mpaghara K nwere 1 byte, na Z – 0.
6) M na J. Dị ka akwụkwọ, ma ụkpụrụ ga-2 bytes. Anyị na-agbakọ ogologo site na iji usoro e si na akwụkwọ: gburugburu ((1 + 0)/2) +1 = 1 + 1 = 2.
7) J na X. Uru dị na mpaghara J ga-ewere 2 bytes, uru dị na mpaghara X ga-ewere 2 bytes.

Na mkpokọta, nhọrọ ziri ezi bụ: C na K, I na J, J na X.

Kedu ihe ga-abụ ihe nchịkọta nke ndeksi T_I?

create table t (i integer);
 
insert into t select rownum from dual connect by level <= 10000;
 
create index t_i on t(i);

  • Ihe dị ka iri iri
  • Ihe dị ka narị narị
  • Ihe dị ka puku kwuru puku
  • Ihe dị ka iri puku kwuru iri

AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 12.1):

Maka ndeksi osisi B, ihe nchịkọta ndeksi na-atụle nhazi ahụ nke ahịrị n'ihe metụtara uru ndeksi.

Ihe nchịkọta index na-enyere onye na-ebuli elu aka ikpebi ma nyocha index ma ọ bụ nyocha tebụl zuru oke ọ na-arụ ọrụ nke ọma maka ajụjụ ụfọdụ). Ihe nchịkọta dị ala na-egosi nyocha index nke ọma.

Ihe nchịkọta nke dị nso na ọnụ ọgụgụ nke blocks na tebụl na-egosi na a na-ahazi ahịrị ahụ n'ụzọ anụ ahụ na ngọngọ tebụl site na igodo index. Ọ bụrụ na nchekwa data ahụ na-eme nyocha tebụl zuru ezu, mgbe ahụ, nchekwa data na-achọ ịweghachi ahịrị ndị ahụ ka echekwara ha na diski a na-ahazi site na igodo ndeksi. Ihe nchịkọta nke dị nso na ọnụọgụ nke ahịrị na-egosi na ahịrị ndị ahụ gbasasịa na-enweghị usoro n'ofe nchekwa data n'ihe metụtara igodo ndeksi. Ọ bụrụ na nchekwa data ahụ na-eme nyocha tebụl zuru oke, mgbe ahụ nchekwa data agaghị eweghachi ahịrị n'usoro ọ bụla a haziri site na igodo ndeksi a.

N'okwu a, a na-ahazi data ahụ nke ọma, ya mere ihe nchịkọta nchịkọta ga-adị nhata ma ọ bụ nso na ọnụ ọgụgụ nke ihe mgbochi ejiri na tebụl. Maka ọkọlọtọ ọkọlọtọ nke 8 kilobytes, ị nwere ike ịtụ anya na ihe dị ka otu puku ọnụ ọgụgụ dị warara ga-adaba n'otu ngọngọ, ya mere ọnụ ọgụgụ nke ngọngọ, na n'ihi ya, ihe nchịkọta ga-abụ. ihe dị ka iri iri.

Kedu ụkpụrụ N ga-eme nke ọma na nchekwa data oge niile yana ntọala ọkọlọtọ?

create table t (
    a varchar2(N char),
    b varchar2(N char),
    c varchar2(N char),
    d varchar2(N char));
 
create index t_i on t (a, b, c, d);

  • 100
  • 200
  • 400
  • 800
  • 1600
  • 3200
  • 6400

AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):

Oke nchekwa data ezi uche

item
Ụdị Oke
Oke Uru

index dị iche iche
Ngụkọta nha kọlụm atụnyere aha
75% nke nchekwa data ngọngọ nha na-ewepu ụfọdụ n'elu

Ya mere, ngụkọta nha nke kọlụm ndị e depụtara aha ekwesịghị ịfe 6Kb. Ihe ga-eme na-adabere na ntọala ntọala ahọpụtara. Maka ntinye koodu AL32UTF8, otu agwa nwere ike ịnwe oke nke 4 bytes, yabụ na ọnọdụ kachasị njọ, ihe dị ka mkpụrụedemede 6 ga-adaba na kilobytes 1500. Ya mere, Oracle ga-ahapụ imepụta ndeksi na N = 400 (mgbe ogologo igodo kachasị njọ bụ mkpụrụedemede 1600 * 4 bytes + ogologo ogologo), ebe na N = 200 (ma ọ bụ obere) ịmepụta index ga-arụ ọrụ n'enweghị nsogbu.

Onye na-arụ ọrụ INSERT nwere ntụnye APPEND bụ nke e mere iji buo data na ọnọdụ ozugbo. Kedu ihe ga - eme ma ọ bụrụ na etinye ya na tebụl nke ihe mkpali ahụ kwụkwasịrị?

  • A ga-ebuba data ahụ na ọnọdụ kpọmkwem, ihe mkpali ahụ ga-arụ ọrụ dịka a tụrụ anya ya
  • A ga-ebunye data ahụ na ọnọdụ ozugbo, mana agaghị eme ihe mkpalite ahụ
  • A ga-ebufe data ahụ na ọnọdụ omenala, ihe mkpali ga-arụ ọrụ dị ka o kwesịrị
  • A ga-ebunye data ahụ na ọnọdụ nkịtị, mana agaghị eme ihe mkpali ahụ
  • Agaghị ebugharị data ahụ, a ga-edekọ njehie

AzịzaN'ụzọ bụ isi, nke a bụ ajụjụ nke mgbagha. Iji chọta azịza ziri ezi, m ga-atụ aro ihe atụ echiche a:

  1. A na-eme ntinye na ọnọdụ ozugbo site na nhazi nke ngọngọ data, na-agafe engine SQL, nke na-eme ka ọ dị elu. Ya mere, ijide n'aka na ogbugbu nke ihe na-akpata ahụ siri ike, ma ọ bụrụ na ọ gaghị ekwe omume, ọ dịghịkwa uru na nke a, ebe ọ bụ na ọ ka ga-eji nwayọọ nwayọọ na-ebelata ntinye.
  2. Ịkwụsị ime ihe na-akpalite ga-eduga n'eziokwu na, ọ bụrụ na data dị na tebụl bụ otu, ọnọdụ nke nchekwa data n'ozuzu (tebụl ndị ọzọ) ga-adabere na ọnọdụ nke etinyere data a. Nke a ga-emebi n'ụzọ doro anya data iguzosi ike n'ezi ihe na enweghị ike tinye ya dị ka ihe ngwọta na mmepụta.
  3. A na-ewerekarị enweghị ike ịrụ ọrụ a rịọrọ ka njehie. Mana ebe a, anyị kwesịrị icheta na APPEND bụ ihe ngosi, na echiche izugbe nke hints bụ na a na-eburu ha n'uche ma ọ bụrụ na ọ ga-ekwe omume, ma ọ bụrụ na ọ bụghị, a na-egbu onye ọrụ ahụ n'ebughị ihe ngosi ahụ n'uche.

Ya mere azịza a na-atụ anya ya bụ A ga-ebunye data ahụ na ọnọdụ nkịtị (SQL), ihe mkpali ga-agba ọkụ.

Dịka akwụkwọ Oracle si kwuo (nke ekwuru na 8.04):

Mmebi nke mmachi ahụ ga-eme ka nkwupụta ahụ mebie usoro, na-eji ụzọ ntinye nke omenala, na-enweghị ịdọ aka ná ntị ma ọ bụ ozi njehie. Mwepu bụ mmachi na nkwupụta ịnweta otu tebụl ihe karịrị otu ugboro na azụmahịa, nke nwere ike ibute ozi njehie.
Dịka ọmụmaatụ, ọ bụrụ na ihe na-akpali ma ọ bụ nkwenye nrụnye dị na tebụl, a ga-eleghara ihe ngosi APPEND anya mgbe ị na-agbalị iji INSERT-load (serial or parallel), yana PARALLEL hint ma ọ bụ nkebiokwu, ọ bụrụ na ọ bụla.

Kedu ihe ga-eme mgbe emechara edemede a?

create table t(i integer not null primary key, j integer references t);
 
create trigger t_a_i after insert on t for each row
declare
    pragma autonomous_transaction;
begin
    insert into t values (:new.i + 1, :new.i);
    commit;
end;
/
 
insert into t values (1, null);

  • Emecha nke ọma
  • Ọdịda n'ihi njehie syntax
  • Njehie: Azụmahịa akpaghị aka adabaghị
  • Njehie metụtara ịgafe nesting oku kacha
  • Njehie mmejọ igodo mba ofesi
  • Njehie metụtara mkpọchi

AzịzaA na-emepụta tebụl na ihe na-akpali akpali nke ọma na ọrụ a ekwesịghị ịkpata nsogbu. A na-anabatakwa azụmahịa ndị kwụụrụ onwe ya na mkpalite, ma ọ bụghị igbu osisi agaghị ekwe omume, dịka ọmụmaatụ.

Mgbe itinye n'ahịrị nke mbụ, ịgba egbe na-aga nke ọma ga-eme ka ntinye ahịrị nke abụọ, na-eme ka ihe na-eme ka ọ gbanye ọkụ ọzọ, na-etinye ahịrị nke atọ, na ihe ndị ọzọ ruo mgbe nkwupụta ahụ dara n'ihi na ọ gafechara oke oku. Agbanyeghị, isi ihe ọzọ dị nro na-abata n'ime. N'oge a na-eme ihe mkpalite, emechabeghị maka ndekọ mbụ etinyere. Ya mere, ihe na-akpalite na-agba ọsọ na azụmahịa kwụụrụ onwe ya na-agbalị itinye n'ime tebụl ahịrị nke na-ezo aka igodo mba ọzọ na ndekọ na-emebeghị. Nke a na-ebute nchere (ịzụ ahịa nke kwụụrụ onwe ya na-echere isi azụmahịa iji hụ ma ọ nwere ike itinye data) ma n'otu oge ahụ azụmahịa bụ isi na-echere ka azụmahịa ahụ kwụụrụ onwe ya nọgide na-arụ ọrụ mgbe mkpali ahụ gasịrị. Mkpọchi na-eme ma, n'ihi ya, a kagbuo azụmahịa ahụ kwụụrụ onwe ya n'ihi ihe ndị metụtara mkpọchi.

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

O siri ike?

  • Dị ka mkpịsị aka abụọ, ekpebiri m ozugbo ihe niile n'ụzọ ziri ezi.

  • Ọbụghị n'ezie, ezighi ezi na ajụjụ abụọ.

  • M doziri ọkara ya nke ọma.

  • Echere m azịza ya ugboro abụọ!

  • Aga m ede na nkọwa

Ndị ọrụ 14 tụrụ vootu. Ndị ọrụ 10 anabataghị.

isi: www.habr.com

Tinye a comment