Mulimuli i tulagavae o Highload++ Siberia 2019 - 8 galuega i Oracle

Привет!

O Iuni 24-25, na faia ai le Highload++ Siberia 2019 i Novosibirsk lipoti "Oracle container databases (CDB/PDB) ma lo latou fa'aoga aoga mo le atina'eina o polokalama", o le a matou lolomiina se fa'amatalaga tusitusia i se taimi mulimuli ane. Sa manaia, faafetai olegbunin mo le faalapotopotoga, faapea foi ma tagata uma na o mai.

Mulimuli i tulagavae o Highload++ Siberia 2019 - 8 galuega i Oracle
I lenei pou, matou te fia faʻasoa atu ia te oe faʻafitauli na matou i ai i le matou faleoloa ina ia mafai ai ona e suʻeina lou malamalama Oracle. I lalo ifo o le tipi e 8 faʻafitauli, tali filifiliga ma faʻamatalaga.

O le a le maualuga o le faʻasologa o le tau o le a tatou vaʻaia o se taunuuga o le faʻatinoina o le tusitusiga o loʻo mulimuli mai?

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
  • Leai, o le a iai se mea sese

TaliE tusa ai ma faʻamaumauga a Oracle (sii mai le 8.1.6):
I totonu o se faʻamatalaga SQL e tasi, o le a faʻaopoopoina e Oracle le faʻasologa naʻo le tasi i le laina. Afai o se faʻamatalaga e sili atu ma le tasi le faʻamatalaga i le NEXTVAL mo se faʻasologa, o le Oracle e faʻaopoopoina le faʻasologa i le tasi ma toe faʻafoʻi le tau tutusa mo mea uma e tutupu o NEXTVAL. Afai o se faʻamatalaga o loʻo i ai faʻamatalaga i CURRVAL ma NEXTVAL, Oracle faʻaopoopo le faʻasologa ma toe faʻafoʻi le tau tutusa mo CURRVAL ma NEXTVAL tusa lava poʻo a latou faʻatonuga i totonu o le faʻamatalaga.

O lea la, le tau maualuga o le a fetaui ma le numera o laina, o le 5.

E fia laina o le ai ai i le laulau ona o le fa'atinoina o le fa'asologa o lo'o i lalo?

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

TaliE tusa ai ma faʻamaumauga a Oracle (sii mai le 11.2):

A'o le'i fa'atinoina so'o se fa'amatalaga SQL, e fa'ailogaina e Oracle se mea fa'asao (e le'o avanoa mo oe). Ma, afai e le manuia le faʻamatalaga, e otometi lava ona toe faʻafoʻi e Oracle ma toe faʻafoʻi le code sese talafeagai i SQLCODE i le SQLCA. Mo se faʻataʻitaʻiga, afai o se faʻamatalaga INSERT e mafua ai se mea sese e ala i le taumafai e faʻaofi se faʻalua faʻatau i se faʻailoga tulaga ese, o le faʻamatalaga e toe faʻafoʻi.

O le vala'au i le HP mai le kalani o lo'o iloiloina ma fa'agasolo o se fa'amatalaga e tasi. O le mea lea, o le telefoni muamua a le HP ua maeʻa ma le manuia, i le faʻaofiina o faʻamaumauga e tolu; o le valaau lona lua a le HP e muta i se mea sese ma toe fa'afo'i le fa'amaumauga lona fa na mafai ona fa'aofi; ua le manuia le valaau lona tolu i se mea sese, ma e tolu talafaamaumau i le laulau.

E fia laina o le ai ai i le laulau ona o le fa'atinoina o le fa'asologa o lo'o i lalo?

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

TaliE tusa ai ma faʻamaumauga a Oracle (sii mai le 11.2):

Ole fa'atapula'aina ole siaki e mafai ai ona e fa'amaoti se tulaga e tatau ona fa'amalieina laina ta'itasi ile laulau. Ina ia fa'amalieina le fa'agata, o laina ta'itasi i le laulau e tatau ona fa'atūina le tu'utu'uga a le MONI pe le iloa (ona o le null). Pe a iloilo e Oracle se tulaga faʻatapulaʻa siaki mo se laina faʻapitoa, soʻo se igoa koluma i totonu o le tulaga e faʻatatau i tau o le koluma i lena laina.

O le mea lea, o le tau o le null o le a pasia le siaki, ma o le poloka e le taʻua igoa o le a faʻataunuʻuina ma le manuia seia oʻo i se taumafaiga e faʻaofi le tau 3. A maeʻa lenei, o le poloka o le faʻaogaina o mea sese o le a faʻamalo le tuusaunoaga, leai se rollback o le a tupu, ma o le a toe fa laina i le laulau faʻatasi ai ma tau 1, null, 2 ma toe null.

O fea paiga o tau o le a tutusa le tele o avanoa i totonu o le poloka?

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 ma X
  • B ma Y
  • C ma K
  • C ma Z
  • K ma Z
  • O aʻu ma J
  • J ma X
  • Ua lisiina uma

TaliO vaega nei mai fa'amaumauga (12.1.0.2) i le teuina o ituaiga fa'amatalaga eseese i Oracle.

Ituaiga Fa'amatalaga CHAR
O le ituaiga fa'amaumauga a le CHAR o lo'o fa'amaoti mai ai se manoa fa'amaumau-umi i totonu o fa'amaumauga fa'amaumauga. E te fa'ama'oti le seti fa'amaumauga tu'ufa'atasi pe a e fatuina lau fa'amaumauga. E fa'amautinoa e Oracle o tau uma o lo'o teuina i totonu o le koluma CHAR o lo'o i ai le umi e fa'atatau i le lapopo'a i semantics umi filifilia. Afai e te fa'aofiina se tau e pu'upu'u nai lo le umi o le koluma, ona fa'apipi'i lea e Oracle le tau i le umi o le koluma.

VARCHAR2 Ituaiga Fa'amatalaga
O le VARCHAR2 ituaiga fa'amaumauga o lo'o fa'amaoti mai ai se manoa fa'ailoga e fesuisuia'i umi i le seti fa'amaumauga. E te fa'ama'oti le seti fa'amaumauga tu'ufa'atasi pe a e fatuina lau fa'amaumauga. O lo'o teuina e Oracle se tau o uiga i totonu ole koluma VARCHAR2 e pei lava ona e fa'ailoa mai, e aunoa ma se fa'aoga avanoa, pe a le sili atu le tau ile umi ole koluma.

NUMBER Ituaiga Fa'amatalaga
Ole ituaiga fa'amaumauga NUMBER e teu ai se numera fa'apea fo'i ma numera fa'amaumau lelei ma le lelei ma fa'amautu fa'atatau mai le 1.0 x 10-130 i le ae le aofia ai le 1.0 x 10126. Afai e te fa'ailoaina se fa'amatalaga fa'atusa o lona tau e sili atu pe tutusa ma 1.0 x 10126, ona toe faafoi mai lea e Oracle se mea sese. E mana'omia ta'itasi NUMBER tau mai le 1 i le 22 paita. I le amanaia o lenei mea, o le lapopoa o le koluma i bytes mo se numera faʻamaumauga faʻapitoa NUMERA (p), pe a p o le saʻo o se tau tuʻuina atu, e mafai ona faʻatatau i le faʻaogaina o le fua faʻatatau: ROUND((umi(p)+s)/2))+1 o le s e tutusa ma le zero pe afai o le numera e lelei, ma le s e tutusa ma le 1 pe a le numera e le lelei.

E le gata i lea, seʻi o tatou ave se vaega mai le faʻamaumauga e uiga i le teuina o Null values.

Ole null ole leai lea ole tau ile koluma. Nulls o lo'o fa'ailoa mai ai fa'amatalaga o lo'o misi, le iloa, po'o le fa'aogaina. Nulls e teuina i totonu o faʻamaumauga pe a paʻu i le va o koluma ma faʻamaumauga faʻamaumauga. I nei tulaga, latou te manaʻomia le 1 byte e teu ai le umi o le koluma (zero). Ole fa'asolo ole laina ile laina e le mana'omia le teuina aua ole fa'aulutala fou ole laina ole fa'ailoga ole koluma o totoe ile laina muamua e fa'aleaogaina. Mo se faʻataʻitaʻiga, afai o koluma mulimuli e tolu o se laulau e le aoga, ona leai lea o faʻamaumauga e teuina mo nei koluma.

Faʻavae i luga o nei faʻamatalaga, matou te fausia ai le mafaufau. Matou te manatu o loʻo faʻaogaina e le database le AL32UTF8 encoding. I lenei faʻailoga, o mataʻitusi Rusia o le a nofo i le 2 bytes.

1) A ma X, o le tau o le fanua 'Y' e 1 byte, o le tau o le fanua x 'D' e 2 paita.
2) B ma Y, 'Vasya' i le b o le tau o le a fa'atumuina i avanoa e o'o atu i le 10 mataitusi ma o le a ave 14 paita, 'Vasya' i le d o le a ave 8 paita.
3) C ma K. O fanua uma e lua o loʻo i ai le tau NULL, mulimuli ane o loʻo i ai fanua taua, o lea latou te nofoia 1 byte.
4) C ma Z. O fanua uma e lua o loʻo i ai le tau NULL, ae o le fanua Z o le pito mulimuli lea i le laulau, o lea e le faʻaogaina ai le avanoa (0 bytes). Ole fanua C ole 1 paita.
5) K ma le Z. E tutusa ma le mataupu muamua. Ole tau ile K fanua e nofo ile 1 byte, ile Z - 0.
6) I ma J. E tusa ai ma faʻamaumauga, o tau e lua o le a ave 2 bytes. Matou te faʻatatau le umi e faʻaaoga ai le fua faʻatatau mai faʻamaumauga: round((1 + 0)/2) +1 = 1 + 1 = 2.
7) J ma X. O le tau i le fanua J o le a ave 2 bytes, o le tau i le X fanua o le a ave 2 bytes.

I le aotelega, o filifiliga sao o: C ma K, I ma J, J ma X.

O le a le uiga o le a fa'aputuina vaega o le 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);

  • E tusa ma le sefulu
  • Pe tusa ma le selau
  • Pe tusa ma le afe
  • Pe tusa ma le fiasefulu afe

TaliE tusa ai ma faʻamaumauga a Oracle (sii mai le 12.1):

Mo le B-tree index, o le index clustering factor e fuaina ai le fa'avasegaina fa'aletino o laina e fa'atatau i se tau fa'asino.

E fesoasoani le fa'avasegaina o fa'amaumauga i le tagata fa'atonu e filifili pe sili atu ona lelei le su'esu'eina o fa'amatalaga po'o le laulau atoa mo nisi fa'amatalaga). O le maualalo o le fa'avasegaina o mea e ta'u mai ai se su'esu'ega lelei o fa'ailoga.

O se vaega fa'apipi'i e latalata i le numera o poloka i totonu o se laulau e fa'ailoa mai ai o laina o lo'o fa'atonuina i totonu o poloka laulau e le ki fa'asino. Afai e fa'atino e le 'upega tafa'ilagi se su'esu'ega atoa o le laulau, ona taumafai lea o le fa'amaumauga e toe aumai laina a'o teuina i luga o le tisiki fa'avasega e le ki fa'asino. O se vaega fa'apipi'i e latalata i le numera o laina e ta'u mai ai o laina o lo'o fa'asalalau fa'afuase'i i poloka fa'amaumauga e fa'atatau i le ki fa'asino. Afai e fa'atino e le fa'amaumauga se su'esu'ega atoa o le laulau, o le a le toe maua mai e le fa'amaumauga ia laina i so'o se fa'asologa fa'avasega e lenei ki fa'asino.

I lenei tulaga, o faʻamaumauga e faʻavasega lelei, o le mea lea o le faʻavasegaina o mea o le a tutusa pe latalata i le numera o poloka o loʻo nofoia i le laulau. Mo se poloka masani o le 8 kilobytes, e mafai ona e faʻamoemoe e tusa ma le afe numera vaapiapi numera o le a fetaui i totonu o le poloka e tasi, o lea o le numera o poloka, ma o se taunuuga, o le vaega faʻapipiʻi o le a pe tusa ma le sefulu.

O le a le tau o le N o le a faʻataunuʻuina ma le manuia le tusitusiga o loʻo i lalo i se faʻamaumauga masani ma tulaga masani?

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

TaliE tusa ai ma faʻamaumauga a Oracle (sii mai le 11.2):

Fa'agata Fa'amaumauga Fa'atatau

mea
Ituaiga Tapulaa
Faatapulaa le Tau

Faʻailoga
Aofa'iga o le koluma fa'asino
75% ole lapo'a poloka fa'amaumauga e to'ese ai nisi fa'aulu

O le mea lea, o le aofaʻi atoa o koluma faʻasino igoa e le tatau ona sili atu i le 6Kb. O le a le isi mea e tupu e fa'alagolago i le fa'ailoga faavae ua filifilia. Mo AL32UTF8 encoding, e tasi le tagata e mafai ona nofo i le maualuga o le 4 bytes, o lea i le tulaga sili ona leaga, 6 kilobytes e fetaui ma le 1500 mataitusi. O le mea lea, o le a le faʻatagaina e Oracle le fausiaina o faʻamatalaga ile N = 400 (pe a sili ona leaga le umi o le ki o le 1600 mataitusi * 4 bytes + rowid umi), aʻo ile N = 200 (pe itiiti) fatuina o le faasino igoa o le a aoga e aunoa ma ni faafitauli.

O le INSERT o lo'o iai le fa'ailoga APPEND ua mamanuina e uta fa'amaumauga i le faiga sa'o. O le a le mea e tupu pe a fa'aoga i le laulau o lo'o tautau ai le fa'aoso?

  • O faʻamatalaga o le a faʻapipiʻiina i le tulaga tuusaʻo, o le faʻaoso o le a galue e pei ona faʻamoemoeina
  • O faʻamatalaga o le a faʻapipiʻiina i le tulaga tuusaʻo, ae o le faʻaoso o le a le faʻatinoina
  • O faʻamaumauga o le a faʻapipiʻiina i faiga masani, o le faʻaoso o le a galue e pei ona tatau ai
  • O faʻamatalaga o le a faʻapipiʻiina i faiga masani, ae o le faʻaoso o le a le faʻatinoina
  • O faʻamatalaga o le a le utaina, o le a faʻamaumau se mea sese

TaliO le mea moni, o lenei mea e sili atu i se fesili o le faʻatatau. Ina ia maua le tali saʻo, ou te fautuaina le faʻataʻitaʻiga o mafaufauga nei:

  1. O le faʻaofiina i le auala tuusaʻo e faʻatinoina e ala i le faʻatulagaina saʻo o se poloka faʻamaumauga, faʻafefeina le afi SQL, lea e faʻamautinoa ai le saoasaoa maualuga. O le mea lea, o le faʻamautinoaina o le faʻatinoina o le faʻaoso e matua faigata lava, pe a le mafai, ma e leai se aoga i lenei mea, talu ai o le a faʻagesegese lava le faʻaofiina.
  2. O le le mafai ona faʻatinoina le faʻaosoina o le a taʻitaʻia ai le mea moni, afai o faʻamaumauga i le laulau e tutusa, o le tulaga o le database atoa (isi laulau) o le a faʻalagolago i le faiga na faʻapipiʻiina ai lenei faʻamatalaga. Ole mea lea ole a fa'aleagaina ai fa'amaumauga ma e le mafai ona fa'aogaina e fai ma fofo ile gaosiga.
  3. O le le mafai ona faʻatino le faʻatonuga o loʻo talosagaina e masani lava ona faʻaogaina o se mea sese. Ae o iinei e tatau ona tatou manatua o le APPEND o se faʻataʻitaʻiga, ma o le manatu lautele o faʻataʻitaʻiga e tatau ona amanaia pe a mafai, ae afai e leai, e faʻataunuʻu le tagata faʻatautaia e aunoa ma le amanaia o le faʻaaliga.

O le tali la ua faamoemoeina o faʻamatalaga o le a utaina i le masani (SQL) mode, o le a faʻaoso le afi.

E tusa ai ma faʻamaumauga a Oracle (sii mai le 8.04):

O le solia o tapula'a o le a mafua ai ona fa'atino fa'asologa fa'asologa, fa'aaoga le ala fa'aofi masani, e aunoa ma ni lapataiga po'o ni fa'amatalaga sese. O se tuusaunoaga o le faʻatapulaʻaina o faʻamatalaga e maua ai le laulau tutusa e sili atu ma le tasi i se fefaʻatauaiga, lea e mafai ona mafua ai faʻamatalaga sese.
Mo se fa'ata'ita'iga, afai o lo'o i luga o le laulau fa'aoso po'o fa'asinotonu fa'amaoni, o le a le amana'ia le fa'ailoga APPEND pe a e taumafai e fa'aoga tuusa'o-load INSERT (serial or parallel), fa'apea fo'i le fa'ailoga PARALLEL po'o le fuaiupu, pe a iai.

O le a le mea o le a tupu pe a faʻatinoina le faʻasologa o loʻo i lalo?

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

  • Fa'amae'aina manuia
  • Le manuia ona o le syntax sese
  • Sese: E le aoga Fefaatauaiga Tutoatasi
  • Fa'aletonu e feso'ota'i ma le sili atu i le maualuga o le fa'aputuga telefoni
  • Sese Solifa'i Fa'ailoga autu
  • Fa'aletonu e feso'ota'i ma loka

TaliO le laulau ma le faʻaoso e faia saʻo lelei ma o lenei gaioiga e le tatau ona oʻo atu ai i faʻafitauli. E fa'ataga fo'i fefa'ataua'iga tuto'atasi i se fa'aoso, a leai o le a le mafai ona ta'oto, mo se fa'ata'ita'iga.

A uma ona faaofi le laina muamua, o le manuia o le fana o le a mafua ai ona faaofi i totonu le laina lona lua, ma mafua ai ona toe mu le afi, faʻaofi le laina lona tolu, ma faʻaauau pea seia oʻo ina le manuia le faʻamatalaga ona o le sili atu i le maualuga o le ofaga o telefoni. Peitaʻi, e iai foʻi se isi manatu faigatā. I le taimi e fa'atupu ai le fa'aoso, e le'i mae'a le fa'amauina mo le fa'amaumauga muamua fa'aofi. O le mea lea, o se fa'aoso o lo'o fa'agasolo i se fefa'ataua'iga tuto'atasi e taumafai e fa'aofi i totonu o le laulau se laina e fa'asino i se ki mai fafo i se fa'amaumauga e le'i faia. O lenei mea e mafua ai le faʻatali (o le faʻatauga tutoʻatasi e faʻatali mo le fefaʻatauaʻiga autu e tuʻuina atu e vaʻai pe mafai ona faʻapipiʻi faʻamatalaga) ma i le taimi lava e tasi e faʻatali le fefaʻatauaʻiga autu mo le fefaʻatauaiga tutoʻatasi e faʻaauau pea ona galue pe a uma le faʻaoso. E tupu se faaletonu ma, o se taunuuga, ua faalēaogāina le fefaʻatauaʻiga tutoʻatasi ona o mafuaʻaga e fesoʻotaʻi ma loka.

Na'o tagata fa'aigoaina e mafai ona auai i le su'esu'ega. Saini ese j, faʻamolemole.

Sa faigata?

  • E pei o tamatamailima e lua, na vave ona ou filifili mea uma sa'o.

  • E leai, sa ou sese i ni fesili se lua.

  • Na ou foiaina sa'o le afa.

  • Na ou mateina le tali faalua!

  • O le a ou tusi i faʻamatalaga

14 tagata fa'aoga na palota. 10 tagata fa'aoga na le fa'aaogaina.

puna: www.habr.com

Faaopoopo i ai se faamatalaga