Ho latela mehatong ea Highload++ Siberia 2019 - Mesebetsi e 8 ho Oracle

Lumela!

Ka la 24-25 Phuptjane, seboka sa Highload++ Siberia 2019 se ne se tšoaretsoe Novosibirsk. Bashanyana ba rona le bona ba ne ba le teng. tlaleha "Makhotla a polokelo ea lijana tsa Oracle (CDB/PDB) le ts'ebeliso ea ona e sebetsang bakeng sa nts'etsopele ea software", re tla phatlalatsa mofuta oa mongolo hamorao. Ho ne ho pholile, kea leboha olegbunin bakeng sa mokhatlo o hlophisitsoeng, hammoho le ho bohle ba tlileng.

Ho latela mehatong ea Highload++ Siberia 2019 - Mesebetsi e 8 ho Oracle
Ka poso ena, re rata ho arolelana le uena mathata ao re bileng le ona holong ea rona hore o tle o leke tsebo ea hau ea Oracle. Ka tlase ho sehiloeng ho na le mathata a 8, likhetho tsa karabo le tlhaloso.

Ke boleng bo bokae ba tatellano eo re tla e bona ka lebaka la ho etsa script e latelang?

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
  • Che, ho tla ba le phoso

ArabaHo latela litokomane tsa Oracle (tse qotsitsoeng ho 8.1.6):
Ka har'a polelo e le 'ngoe ea SQL, Oracle e tla eketsa tatellano hang feela ka mola. Haeba polelo e na le litšupiso tse fetang bonngoe tsa NEXTVAL bakeng sa tatelano, Oracle e eketsa tatelano hang ebe e khutlisa boleng bo tšoanang bakeng sa liketsahalo tsohle tsa NEXTVAL. Haeba polelo e na le litšupiso tsa CURRVAL le NEXTVAL, Oracle e eketsa tatelano 'me e khutlisa boleng bo tšoanang bakeng sa CURRVAL le NEXTVAL ho sa tsotelehe odara ea bona ka har'a polelo.

Kahoo, boleng bo phahameng bo tla lumellana le palo ea mela, ke hore 5.

Ke mela e mekae e tla ba teng tafoleng ka lebaka la ho tsamaisa mongolo o latelang?

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

ArabaHo latela litokomane tsa Oracle (tse qotsitsoeng ho 11.2):

Pele o etsa polelo efe kapa efe ea SQL, Oracle e tšoaea sebaka sa polokelo se hlakileng (ha se fumanehe ho uena). Joale, haeba polelo e hloleha, Oracle e e khutlisa ka bo eona ebe e khutlisetsa khoutu ea phoso e sebetsang ho SQLCODE ho SQLCA. Ka mohlala, haeba polelo ea INSERT e baka phoso ka ho leka ho kenya boleng bo kopilitsoeng ho index e ikhethileng, polelo e khutlisetsoa morao.

Ho letsetsa HP ho tsoa ho moreki ho boetse ho nkuoa ebile ho sebetsoa joalo ka polelo e le 'ngoe. Kahoo, mohala oa pele oa HP o phethela ka katleho, o kentse lirekoto tse tharo; mohala oa bobeli oa HP o fela ka phoso ebe o khutlisa rekoto ea bone eo e atlehileng ho e kenya; mohala oa boraro oa hloleha, mme ho na le direkoto tse tharo tafoleng.

Ke mela e mekae e tla ba teng tafoleng ka lebaka la ho tsamaisa mongolo o latelang?

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

ArabaHo latela litokomane tsa Oracle (tse qotsitsoeng ho 11.2):

Tšitiso ea cheke e u lumella ho hlakisa boemo boo mola o mong le o mong tafoleng o tlamehang ho bo khotsofatsa. Ho khotsofatsa tšitiso, mola o mong le o mong tafoleng o tlameha ho etsa hore boemo e be TRUE kapa bo sa tsejoe (ka lebaka la lefeela). Ha Oracle e lekola boemo ba cheke bakeng sa mola o itseng, mabitso afe kapa afe a likholomo maemong a bua ka boleng ba kholomo moleng oo.

Ka hona, boleng ba null bo tla feta cheke, 'me thibela e sa tsejoeng e tla etsoa ka katleho ho fihlela boiteko ba ho kenya boleng ba 3. Ka mor'a sena, phoso ea ho sebetsana le phoso e tla hlakola mokhelo, ha ho na rollback e tla etsahala, 'me ho tla sala mela e mene tafoleng ka boleng 1, null, 2 le null hape.

Ke lipara life tsa boleng tse tla nka sebaka se lekanang ka har'a block?

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 le X
  • B le Y
  • C le K
  • C le Z
  • K le Z
  • Nna le J
  • J le X
  • Tsohle tse thathamisitsoeng

ArabaMona ke lintlha tse qotsitsoeng ho tsoa litokomaneng (12.1.0.2) mabapi le ho boloka mefuta e fapaneng ea data ho Oracle.

Mofuta oa data oa CHAR
Mofuta oa data oa CHAR o totobatsa thapo ea malebela a bolelele bo tsitsitseng ho sete ea litlhaku tsa database. U hlakisa sebopeho sa database ha u theha database ea hau. Oracle e netefatsa hore litekanyetso tsohle tse bolokiloeng kholeng ea CHAR li na le bolelele bo boletsoeng ka boholo ho semantics ea bolelele bo khethiloeng. Haeba o kenya boleng bo bokhuts'oane ho feta bolelele ba kholomo, joale Oracle e blank-pads boleng ho bolelele ba kholomo.

Mofuta oa data oa VARCHAR2
Mofuta oa data oa VARCHAR2 o totobatsa khoele ea bolelele bo feto-fetohang sehlopheng sa litlhaku tsa database. U hlakisa sebopeho sa database ha u theha database ea hau. Oracle e boloka boleng ba litlhaku ho kholomo ea VARCHAR2 hantle feela kamoo u e boletseng kateng, ntle le ho pata letho, ha feela boleng bo sa fete bolelele ba kholomo.

NUMBER Mofuta oa Boitsebiso
Mofuta oa data oa NUMBER o boloka zero hammoho le linomoro tse tsitsitseng tse ntle le tse fosahetseng tse nang le boleng bo felletseng ho tloha 1.0 x 10-130 ho ea ho empa ho sa kenyeletsoe 1.0 x 10126. 1.0 x 10126, ebe Oracle e khutlisa phoso. Boleng bo bong le bo bong ba NUMBER bo hloka ho tloha ho li-byte tse 1 ho isa ho tse 22. Ho latela sena, boholo ba kholomo ka li-byte bakeng sa boleng bo itseng ba lintlha tsa linomoro NUMBER(p), moo p e leng ho nepahala ha boleng bo fanoeng, bo ka baloa ho sebelisoa foromo e latelang: LESOTHO((bolelele(p)+s)/2))+1 moo s e lekanang le zero haeba palo e le positive, 'me s e lekana le 1 haeba palo e le negative.

Ntle le moo, a re nkeng qotsulo ho tsoa litokomaneng tse mabapi le ho boloka boleng ba Null.

Null ke ho ba sieo ha boleng kholomong. Nulls e bonts'a lintlha tse sieo, tse sa tsejoeng, kapa tse sa sebetseng. Li-nulls li bolokiloe polokelong ea litaba haeba li oela pakeng tsa likholomo tse nang le boleng ba data. Maemong ana, ba hloka 1 byte ho boloka bolelele ba kholomo (zero). Li-null tse salang ka tatellano ha li hloke ho bolokoa hobane hlooho e ncha ea mola e bontša hore litšiea tse setseng moleng o fetileng ha li na thuso. Mohlala, haeba litšiea tse tharo tsa ho qetela tsa tafole li se na thuso, ha ho na data e bolokiloeng bakeng sa likholomo tsena.

Ho latela lintlha tsena, re theha mabaka. Re nahana hore database e sebelisa encoding ea AL32UTF8. Ho khouto ena, litlhaku tsa Serussia li tla nka li-byte tse 2.

1) A le X, boleng ba tšimo 'Y' bo nka 1 baiti, boleng ba tšimo x 'D' bo nka li-byte tse peli.
2) B le Y, 'Vasya' ho b boleng bo tla kenyeletsoa ka libaka ho fihla ho litlhaku tse 10 'me ho tla nka li-byte tse 14, 'Vasya' ka d e tla nka li-byte tse 8.
3) C le K. Libaka tseo ka bobeli li na le bohlokoa ba NULL, ka mor'a tsona ho na le masimo a bohlokoa, kahoo a nka 1 byte.
4) C le Z. Likarolo tseo ka bobeli li na le boleng ba NULL, empa tšimo Z ke ea ho qetela tafoleng, kahoo ha e nke sebaka (0 byte). Tšimo ea C e nka 1 byte.
5) K le Z. Ho tšoana le nyeoe e fetileng. Boleng ba tšimo ea K bo nka 1 byte, ho Z - 0.
6) 'na le J. Ho ea ka litokomane, litekanyetso ka bobeli li tla nka li-byte tse peli. Re bala bolelele ka ho sebelisa foromo e nkiloeng litokomaneng: pota ((2 + 1)/0) +2 = 1 + 1 = 1.
7) J le X. Bohlokoa tšimong ea J bo tla nka li-byte tse 2, boleng bo tšimong ea X bo tla nka 2 byte.

Ka kakaretso, likhetho tse nepahetseng ke: C le K, I le J, J le X.

Ke eng e ka bang clustering factor ea T_I index?

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

  • Hoo e ka bang mashome
  • Hoo e ka bang makholo
  • Hoo e ka bang likete
  • Hoo e ka bang mashome a likete

ArabaHo latela litokomane tsa Oracle (tse qotsitsoeng ho 12.1):

Bakeng sa index ea B-tree, index clustering factor e lekanya sehlopha sa 'mele sa mela ho ipapisitsoe le boleng ba index.

Index clustering factor e thusa optimizer ho etsa qeto ea hore na index ea index kapa tlhahlobo e felletseng ea tafole e sebetsa hantle bakeng sa lipotso tse itseng). Karolo e tlase ea clustering e bonts'a skena ea index e sebetsang hantle.

Ntho e kopanyang e haufi le palo ea li-blocks ka har'a tafole e bontša hore mela e hlophisitsoe ka 'mele libolokong tsa tafole ka senotlolo sa index. Haeba database e etsa tlhahlobo e felletseng ea tafole, joale database e tloaetse ho fumana mela ha e ntse e bolokoa ho disk e hlophisitsoeng ka senotlolo sa index. Ntho ea ho kopanya e haufi le palo ea mela e bontša hore mela e hasane ka mokhoa o sa reroang ho pholletsa le li-blocks tsa database mabapi le senotlolo sa index. Haeba database e etsa tlhahlobo e felletseng ea tafole, database e ne e ke ke ea fumana mela ka tatellano efe kapa efe e hlophisitsoeng ka senotlolo sena sa index.

Tabeng ena, lintlha li hlophisoa ka mokhoa o nepahetseng, kahoo ntho ea lihlopha e tla lekana kapa e haufi le palo ea li-blocks tse teng tafoleng. Bakeng sa boholo bo tloaelehileng ba li-kilobytes tse 8, o ka lebella hore palo e ka bang sekete e tla lekana ka har'a boloko e le 'ngoe, kahoo palo ea li-blocks, ka lebaka leo, ntlha ea ho kopanya e tla ba. e ka bang mashome.

Ke litekanyetso life tsa N moo sengoloa se latelang se tla sebetsoa ka katleho polokelong ea kamehla e nang le litlhophiso tse tloaelehileng?

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

ArabaHo latela litokomane tsa Oracle (tse qotsitsoeng ho 11.2):

Meeli e utloahalang ea Database

Item
Mofuta oa Moeli
Moeli oa Boleng

index
Kakaretso ea boholo ba kholomo e indexed
75% ea boholo ba "database block" e tloswa ka holimo

Ka hona, boholo ba likholomo tse ngolisitsoeng ha boa lokela ho feta 6Kb. Se etsahalang kamora moo se ipapisitse le khouto ea motheo e khethiloeng. Bakeng sa khouto ea AL32UTF8, tlhaku e le 'ngoe e ka nka boholo ba li-byte tse 4, kahoo maemong a mabe ka ho fetesisa, litlhaku tse ka bang 6 li tla lekana li-kilobyte tse 1500. Ka hona, Oracle e ke ke ea lumella tlhahiso ea index ho N = 400 (ha boemo bo bobe ka ho fetesisa ba senotlolo e le litlhaku tse 1600 * li-byte tse 4 + bolelele bo bolelele), athe ho N = 200 (kapa ka tlase) ho theha index ho tla sebetsa ntle le mathata.

INSERT opareitara e nang le tlhahiso ea APPEND e etselitsoe ho kenya data ka mokhoa o tobileng. Ho etsahala'ng haeba e sebelisoa tafoleng eo "trigger" e leketlileng ho eona?

  • Lintlha li tla jarisoa ka mokhoa o tobileng, se qalang se tla sebetsa kamoo ho lebeletsoeng kateng
  • Lintlha li tla kenngoa ka mokhoa o tobileng, empa mohloli o ke ke oa etsoa
  • Lintlha li tla kengoa ka mokhoa o tloaelehileng, se qalang se tla sebetsa kamoo se lokelang
  • Lintlha li tla kenngoa ka mokhoa o tloaelehileng, empa mohloli o ke ke oa etsoa
  • Lintlha li ke ke tsa kenngoa, phoso e tla tlalehoa

ArabaHa e le hantle, ena ke potso ea logic. Ho fumana karabo e nepahetseng, nka fana ka tlhahiso ea mohlala o latelang oa ho beha mabaka:

  1. Ho kenya ka mokhoa o tobileng ho etsoa ka ho thehoa ka ho toba ho thibela data, ho feta mochine oa SQL, o tiisang lebelo le phahameng. Ka hona, ho etsa bonnete ba hore ts'ebetso ea ts'ebetso e thata haholo, haeba e ke ke ea khoneha, 'me ha ho na ntlha ho sena, kaha e ntse e tla fokotsa haholo ho kenngoa.
  2. Ho hloleha ho phethisa moferefere ho tla lebisa tabeng ea hore, haeba lintlha tse tafoleng li tšoana, boemo ba database ka kakaretso (litafole tse ling) li tla itšetleha ka mokhoa oo data ena e kentsoeng ka eona. Ho hlakile hore sena se tla senya botšepehi ba data mme se ke ke sa sebelisoa e le tharollo tlhahisong.
  3. Ho se khone ho etsa opereishene eo u e batlang hangata ho nkuoa e le phoso. Empa mona re lokela ho hopola hore APPEND ke tlhahiso, 'me moelelo o akaretsang oa lintlha ke hore li hlokomeloa ha ho khoneha, empa haeba ho se joalo, opereishene e etsoa ntle le ho ela hloko tlhahiso.

Kahoo karabo e lebelletsoeng ke data e tla kenngoa ka mokhoa o tloaelehileng (SQL), moferefere o tla chesa.

Ho latela litokomane tsa Oracle (tse qotsitsoeng ho 8.04):

Ho tlōla ha lithibelo ho tla etsa hore polelo e phethoe ka serial, e sebelisa mokhoa o tloaelehileng oa ho kenya, ntle le litemoso kapa melaetsa ea liphoso. Mokhelo ke thibelo ea litatemente tse kenang tafoleng e le 'ngoe makhetlo a fetang le le leng khoebong, e ka bakang melaetsa ea liphoso.
Ka mohlala, haeba li-triggers kapa referential integrity li le teng tafoleng, joale tlhahiso ea APPEND e tla hlokomolohuoa ha u leka ho sebelisa mojaro o tobileng INSERT (serial kapa parallel), hammoho le tlhahiso ea PARALLEL kapa poleloana, haeba e teng.

Ho tla etsahala'ng ha script e latelang e etsoa?

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);

  • Ho phethela ka katleho
  • E hlolehile ka lebaka la phoso ea syntax
  • Phoso: Autonomous Transaction Ha e sebetse
  • Phoso e amanang le ho feta palo e phahameng ka ho fetesisa ea mohala
  • Phoso ea Tlhekefetso ea Linotlolo tsa kantle ho naha
  • Phoso e amanang le liloko

ArabaTafole le trigger li entsoe ka nepo, 'me ts'ebetso ena ha ea lokela ho baka mathata. Lits'ebetso tse ikemetseng ho trigger li boetse li lumelloa, ho seng joalo ho rema lifate ho ke ke ha khoneha, ka mohlala.

Ka mor'a ho kenya mola oa pele, ho thunngoa ka katleho ho ne ho tla etsa hore ho kenngoe mola oa bobeli, ho etsa hore seqhutsu se thunye hape, se kenye mola oa boraro, joalo-joalo ho fihlela polelo e hlōleha ka lebaka la ho feta boholo ba sehlaha sa mehala. Leha ho le joalo, ho na le ntlha e ’ngoe e poteletseng. Nakong eo trigger e phethisoang, boitlamo ha bo so phetheloe bakeng sa rekoto ea pele e kentsoeng. Ka hona, "trigger" e sebetsang ka har'a transaction e ikemetseng e leka ho kenya ka har'a tafole mola o supang senotlolo sa kantle ho rekoto e so kang e etsoa. Sena se fella ka ho leta (transaction e ikemetseng e emetse hore transaction e kholo e ikemisetse ho bona hore na e ka kenya data) 'me ka nako e ts'oanang ts'ebetso e kholo e emetse hore transaction e ikemetseng e tsoele pele ho sebetsa ka mor'a hore motho a qale. Hoa etsahala, 'me ka lebaka leo, transaction e ikemetseng e hlakotsoe ka lebaka la mabaka a amanang le linotlolo.

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Ho ne ho le thata ho?

  • Joaloka menoana e 'meli, hang-hang ke ile ka etsa qeto ea ntho e' ngoe le e 'ngoe ka nepo.

  • Ha e le hantle, ke ne ke fositse ka lipotso tse 'maloa.

  • Ke rarolle halofo ea eona ka nepo.

  • Ke ile ka hakanya karabo habeli!

  • Ke tla ngola litlhalosong

Basebelisi ba 14 ba ile ba khetha. Basebelisi ba 10 ba ile ba hana.

Source: www.habr.com

Eketsa ka tlhaloso