27
1 Klāsteris ar heš - funkcijas izmantošanu Klāsteris ar heš-funkcijas izmantošanu (hash cluster) ir līdzīgs indeksētam klasterim. Tikai indeksa atslēga tiek aizstāta ar heš- funkcijas (hash function) vērtību. Indeksa tabulas vietā tiek izmantota heš-funkcija, kura aprēķina attiecīgo datu glabāšanas adresi. Iegūtā heš-funkcijas vērtība atbilst datu blokam klasterī, ko datu bāze lasa vai raksta SELECT vaicājumā. Heš-funkcijas izmantošana ir veids, lai uzlabotu datu izgūšanas veiktspēju. Heš-funkcijas izmantošana var būt noderīga, ja ir izpildīti šādi nosacījumi: 1) tabula tiek pieprasīta daudz biežāk nekā tā tiek modificēta; 2) heš-atslēgas kolona bieži tiek pieprasīta ar vienlīdzības nosacījumiem, piemēram, WHERE FIRMAS_ID = 20. Heš-atslēgas vērtība norāda tieši uz diska apgabalu, kas saglabā rindas. 3) var pamatoti noteikt heš-atslēgu skaitu un to datu lielumu, kas tiek glabāti ar katru atslēgas vērtību. atsl ēga vīrie tis 2. kurss Juri s sievi ete 3. kurss Ines e sievi 3. Rasm 1. bloks Inese sievi ete 3. kurss 2. bloks Juris vīrie tis 2. kurss Andri vīrie 1. heš- funkci jas vērtīb a 1 2 3

Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

1

Klāsteris ar heš - funkcijas izmantošanu

Klāsteris ar heš-funkcijas izmantošanu (hash cluster) ir līdzīgs indeksētam klasterim. Tikai indeksa atslēga tiek aizstāta ar heš- funkcijas (hash function) vērtību. Indeksa tabulas vietā tiek izmantota heš-funkcija, kura aprēķina attiecīgo datu glabāšanas adresi.Iegūtā heš-funkcijas vērtība atbilst datu blokam klasterī, ko datu bāze lasa vai raksta SELECT vaicājumā.Heš-funkcijas izmantošana ir veids, lai uzlabotu datu izgūšanas veiktspēju. Heš-funkcijas izmantošana var būt noderīga, ja ir izpildīti šādi nosacījumi:

1) tabula tiek pieprasīta daudz biežāk nekā tā tiek modificēta;2) heš-atslēgas kolona bieži tiek pieprasīta ar vienlīdzības nosacījumiem,

piemēram, WHERE FIRMAS_ID = 20. Heš-atslēgas vērtība norāda tieši uz diska apgabalu, kas saglabā rindas.

3) var pamatoti noteikt heš-atslēgu skaitu un to datu lielumu, kas tiek glabāti ar katru atslēgas vērtību.

atslēgavīrietis 2. kurss Jurissieviete 3. kurss Inesesieviete 3. kurss Rasmavīrietis 1. kurss Andrisvīrietis 1. kurss Druvissieviete 2. kurss Anita

1. bloksInese sieviete 3. kurss

2. bloksJuris vīrietis 2. kurssAndris vīrietis 1. kurss

6. bloksRasma sieviete 3. kurssDruvis vīrietis 1. kurssAnita sieviete 2. kurss

heš-funkcijas vērtība

123456

Page 2: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

2

Klastera ar heš- funkcijas izveidošana

Lai izveidotu klasteri ar heš-funkciju, izmanto to pašu CREATE CLUSTER priekšrakstu kā indeksētam klasterim, pievienojot heš-atslēgu. Heš-vērtību skaits klasterim ir atkarīgs no heš- atslēgas.Klastera atslēga, tāpat kā indeksētā klastera atslēga, ir viena kolonna vai salikta atslēga, ko koplieto kopas tabulas. Heš-atslēgas vērtība ir faktiskā vai iespējamā vērtība, kas ievietota klastera atslēgas kolonnā. Piemēram, ja klastera atslēga ir FIRMAS_ID, tad jaukšanas atslēgas vērtības var būt 10, 20, 30 utt.Datu bāze izmanto heš-funkciju, kas pieņem bezgalīgi daudz heš-atslēgu vērtību kā ievadi un sakārto tās noteiktā veidā. Katrai rakstu buķetei ir unikāls skaitlisks ID, ko sauc par jaukšanas vērtību. Katra heš-vērtība tiek attēlota uz datu bāzes bloka adresi blokam, kurā tiek saglabātas rindas, kas atbilst jaukšanas atslēgas vērtībai (10., 20., 30. firma utt.).Piemērā to firmu skaits, kas varētu pastāvēt, ir 100, tāpēc HASHKEYS ir iestatīts uz 100:

create cluster KLASTERIS(FIRMAS_NUM number)size 8192 HASHKEYS 100;

Page 3: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

3

Heš-klastera vaicājumi

Ja lietotājs norāda department_id = 20, tad datu bāzes heš-funkcija šo vērtību pārveido par 77. Ja lietotājs norāda department_id = 10, tad datu bāze šo vērtību pārveido par 15. Datu bāze izmanto iekšēji ģenerētu heš-vērtību, lai atrastu bloku, kas satur pieprasītās nodaļas darbinieku rindas.Attēlā heš-klastera segments ir attēlots kā horizontāla bloku rinda. Kā redzams attēlā, vaicājums var izgūt datus vienā ievad/izvadē.

Heš-kopu ierobežojums ir diapazona skenējuma nepieejamība neindeksētām klastera atslēgām. Pieņemsim, ka heš-klasterim, kas izveidots heš-klastera izveidē, nepastāv atsevišķs indekss. Vaicājums nodaļām ar ID no 20 līdz 100 nevar izmantot heš-algoritmu, jo tas nevar adresēt katru iespējamo vērtību no 20 līdz 100. Tā kā indeksa nav, datu bāzei jāveic pilna skenēšana.

Page 4: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

4

Heš-klastera variācijas

Vienas tabulas jaukšanas klasteris ir optimizēta jaukšanas klastera versija, kas atbalsta tikai vienu tabulu vienlaikus. Starp jaukšanas atslēgām un rindām pastāv viens-viens attēlojums.Vienas tabulas jaukšanas klasteris var būt noderīgs, ja lietotāji pieprasa ātru piekļuvi tabulai pēc primārās atslēgas. Piemēram, lietotāji darbinieku tabulā bieži uzmeklē darbinieka ierakstu pēc darbinieka _ id.Sakārtots jaukšanas klasteris saglabā katrai jaukšanas funkcijas vērtībai atbilstošas rindas tā, lai datu bāze tās varētu efektīvi atgriezt sakārtotā secībā. Datu bāze optimizētu kārtošanu veic iekšēji. Lietojumprogrammām, kas vienmēr patērē datus sakārtotā secībā, šī metode var nozīmēt ātrāku datu izgūšanu.

Page 5: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

5

Heš-klāstera glabāšana

Datu bāzes sistēma piešķir vietu heš-klāsterim atšķirīgi no indeksētā klāstera.Parametrs HASHKEYS norāda to sadaļu skaitu, kuras reāli varētu būt, bet lielums SIZE norāda datu apjomu, kas saistīts ar katru sadaļu. Datu bāze aprēķina glabāšanas vietas apjomu, pamatojoties uz šādu formulu:

HASHKEYS * SIZE/datu bāzes bloka lielums

Datu bāzes sistēma neierobežo heš-vērtību skaitu, kuras var ievietot klasterī. Piemēram, lai arī HASHKEYS ir 100, nekas neliedz ievietot 200 unikālu sadaļu tabulā. Tomēr heš-klastera izgūšanas efektivitāte samazinās, ja heš-vērtību skaits pārsniedz heš-atslēgu skaitu.

Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir pilns ar 20. nodaļas rindām. Lietotājs iesprauž jaunu nodaļu ar Departament_id 43 nodaļu tabulā. Nodaļu skaits pārsniedz HASHKEYS vērtību, tāpēc datu bāzes hashes department_id 43 to hash value 77, kas ir tā pati heš-vērtība, ko izmanto department_id 20.

Page 6: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

6

Vairāku ievades vērtību saspiešanu vienā izvades vērtībā sauc par jauktu sadursmi.Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs rindas 100. blokā, kas ir pilns. Datu bāzes saites bloķē 100 uz jaunu pārpildes bloku, teiksim, 200. bloku, un saglabā jaunajā blokā ievietotās rindas. Gan 100., gan 200. blokam tagad ir tiesības glabāt datus par abām nodaļām. Kā redzams 20. vai 43. nodaļas vaicājumam ir nepieciešami divi I/O, lai iegūtu datus: 100. bloks un ar to saistītais 200. bloks. Šo problēmu var atrisināt, no jauna izveidojot klasteri ar citu HASHKEYS vērtību.

Page 7: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

7

Heš-klāstera definēšana

Heš-klāsteris tiek izveidots, izmantojot CREATE CLUSTER priekšrakstu, bet tiek norādīta HASHKEYS klauzula. Šajā piemērā ir priekšraksts, lai izveidotu klasteri ar nosaukumu trial_cluster, kurā tiek glabāta izmēģinājuma tabula, kas sagrupēta pēc kolonnas trialno (klastera atslēga), un cits priekšraksts, kas veido tabulu klasterī.

create cluster KLASTERIS_H (F_NUM number)size 8000 HASHKEYS 150;

create table FIRMAS_H (F_NUM number primary key,F_NOS varchar2(20) not null,STAT_KAP number(10,2),DIB_DAT date,TEL varchar2(10))cluster KLASTERIS_H (F_NUM);

create table DARBINIEKI_H(PERS_KODS varchar2(12) primary key,UZV varchar2(35) not null,VAR varchar2(25) not null,DZIM varchar2(10) check (DZIM in ('sieviete','vīrietis')),NUM_F number constraint IE_SAITE references FIRMAS_H(F_NUM))cluster KLASTERIS_H(NUM_F);

Page 8: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

8

Datu ievade klāstera tabulāsbegininsert into FIRMAS_H values (1, 'AAA', 100000.00, TO_DATE('05-JAN-75'), '7333333');insert into FIRMAS_H values (2, 'CCC', 50000.00, TO_DATE('20-DEC-80'), '7444444');insert into FIRMAS_H values (3, 'BBB', 10000.00, TO_DATE('15-FEB-74'), '7777777');insert into FIRMAS_H values (4, 'JJJ', 20000.00, TO_DATE('11-MAR-74'), '7111111');insert into FIRMAS_H values (5, 'GGG', 50000.00, TO_DATE('21-JUN-74'), '7222222');insert into FIRMAS_H values (6, 'DDD', 40000.00, TO_DATE('26-JUL-74'), '7555555');insert into FIRMAS_H values (7, 'EEE', 30000.00, TO_DATE('05-MAR-74'), '7888888');end;

begininsert into DARBINIEKI_H values ('251150-12345','Koks','Liene','sieviete',1);insert into DARBINIEKI_H values ('141155-23451','Koks','Juris','vīrietis',1);insert into DARBINIEKI_H values ('081060-34512','Zars','Varis', 'vīrietis',2);insert into DARBINIEKI_H values ('181156-45123','Celms','Zane','sieviete',2);insert into DARBINIEKI_H values ('210960-51234','Lapa','Inese', 'sieviete',3);insert into DARBINIEKI_H values ('110960-52346','Sakne','Ivars', 'vīrietis',3);insert into DARBINIEKI_H values ('010770-52347','Liepa','Rasma', 'sieviete',4);insert into DARBINIEKI_H values ('250980-51238','Apse','Anita', 'sieviete',4);insert into DARBINIEKI_H values ('280607-51234','Jaunzems','Jūlijs', 'vīrietis',5);insert into DARBINIEKI_H values ('271170-41234','Lapa','Atis', 'vīrietis',5);insert into DARBINIEKI_H values ('210460-41234','Priede','Anna', 'sieviete',6);insert into DARBINIEKI_H values ('250360-21234','Kursis','Alnis', 'vīrietis',6);insert into DARBINIEKI_H values ('220260-71234','Rasa','Made', 'sieviete',7);insert into DARBINIEKI_H values ('213016-81234','Egle','Tekla', 'vīrietis', 7);end;

select * from FIRMAS_H, DARBINIEKI_H where F_NUM =NUM_F;

Page 9: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

9

select * from FIRMAS_H, DARBINIEKI_H where F_NUM = NUM_F and F_NUM = 7;

select * from FIRMAS_I, DARBINIEKI_I where F_NUM = NUM_F and VAR = 'Anita';

Page 10: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

10

Heš-klastera atslēga var būt viena kolonna vai salikta atslēga (vairāku kolonnu atslēga). HASHKEYS vērtība 150 norāda un ierobežo unikālo heš-funkcijas vērtību skaitu, ko var ģenerēt heš-funkcija, kuru izmanto klasteris. Ja nav norādīta neviena HASH klauzula, datu bāze izmanto iekšējo heš-funkciju. Ja klastera atslēga jau ir unikāls identifikators, kas vienmērīgi sadalīts pa savu diapazonu, varat apiet iekšējo jaukšanas funkciju un norādīt klastera atslēgu kā jaukšanas vērtību. Var arī izmantot HASH IS konstrukciju, lai norādītu lietotāja definētu heš- funkciju.Heš-klasterim nevar izveidot klastera indeksu, un nav nepieciešams izveidot indeksu heš-klastera atslēgai.

Page 11: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

11

Creating a Sorted Hash Cluster

In a sorted hash cluster, the rows corresponding to each value of the hash function are sorted on a specified set of columns in ascending order, which can improve response time during subsequent operations on the clustered data.For example, a telecommunications company needs to store detailed call records for a fixed number of originating telephone numbers through a telecommunications switch. From each originating telephone number there can be an unlimited number of telephone calls.Calls are stored as they are made and processed later in first-in, first-out order (FIFO) when bills are generated for each originating telephone number. Each call has a detailed call record that is identified by a timestamp. The data that is gathered is similar to the following:Originating Telephone Numbers Call Records Identified by Timestamp650-555-1212 t0, t1, t2, t3, t4, ...650-555-1213 t0, t1, t2, t3, t4, ...650-555-1214 t0, t1, t2, t3, t4, ...... ...

In the following SQL statements, the telephone_number column is the hash key. The hash cluster is sorted on the call_timestamp and call_duration columns. The number of hash keys is based on 10-digit telephone numbers.CREATE CLUSTER call_detail_cluster ( telephone_number NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT ) HASHKEYS 10000 HASH IS telephone_number SIZE 256;

CREATE TABLE call_detail ( telephone_number NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT, other_info VARCHAR2(30) )

Page 12: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

12

CLUSTER call_detail_cluster ( telephone_number, call_timestamp, call_duration );Given the sort order of the data, the following query would return the call records for a specified hash key by oldest record first.SELECT * WHERE telephone_number = 6505551212;

Page 13: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

13

Heš-klastera veidošana vienai tabulai

Var izveidot arī vienas tabulas heš-klasteri, kas nodrošina ātru piekļuvi tabulas rindām. Šai tabulai jābūt vienīgajai tabulai heš-klasterī. Būtībā starp heš-atslēgām un datu rindām jābūt vienozīmīgai atbilstībai.

create cluster KLASTERIS_1 (NUM number)size 512 single table HASHKEYS 599;

Datu bāzes sistēma noapaļo HASHKEYS vērtību līdz tuvākajam primārajam numuram, tāpēc šajā klasterī ir ne vairāk kā 503 jaukšanas atslēgas vērtības, katra no tām ir 512 baiti. SINGLE TABLE klauzula ir derīga tikai heš-klāsterim. Jānorāda arī HASHKEYS.

P.S. Primārais skaitlis ir vesels skaitlis, kas ir lielāks par 1 un kas dalās tikai ar 1 un pats ar sevi. Pirmie daži pirmie numuri ir: 2 3 5 7 11 13 17 19 23 …..

Page 14: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

14

Heš- klastera atslēgas izvēle

Pareizās klastera atslēgas izvēle ir atkarīga no visbiežāk lietotajiem vaicājumu tipiem, kas tiek pieprasīti no klāstera. Piemēram, DARBINIEKI tabula jauktā klasterī. Ja vaicājumi bieži atlasa rindas pēc darbinieka numura, DARB_NUM kolonnai ir jābūt klastera atslēgai. Ja vaicājumi bieži atlasa rindas pēc nodaļas numura, NOD_NUM kolonnai ir jābūt klastera atslēgai. Heš klāsteram, kurās ir viena tabula, klastera atslēga parasti ir visa iekļautās tabulas primārā atslēga.Heš-klastera atslēga, tāpat kā indeksa klastera atslēga, var būt viena kolonna vai salikta atslēga (vairāku kolonnu atslēga). Heš-klasterim ar salikto atslēgu jāizmanto iekšējā heš-funkcija.

HASH IS norāde

HASH IS parametrs jānorāda tikai tad, ja klastera atslēga ir viena skaitļu datu tipa kolonna un satur vienmērīgi sadalītus veselus skaitļus. Ja tiek piemēroti šie nosacījumi, klasterī var sadalīt rindas tā, lai katra unikālā klastera atslēgas vērtība būtu heš-funkcijas vērtība, bez sadursmēm (divas klastera atslēgas vērtības ar vienādu heš-funkcijas vērtību). Ja šie nosacījumi neizpildās, izlaidiet šo klauzulu, lai izmantotu iekšējo heš-funkciju.

Page 15: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

15

Lieluma SIZE izvēle

SIZE lielums jānorāda, kā vidējo apjomu, kas nepieciešams, lai glabātu visas rindas katrai konkrētajai heš-atslēgai. Tāpēc, lai pareizi noteiktu SIZE lielumu, ir jāzina datu īpašības:

1) ja heš-klasterī ir jābūt tikai vienai tabulai un šajā tabulā esošo rindu heš-atslēgu vērtības ir unikālas (katrai vērtībai viena rinda), SIZE var iestatīt kā vidējo rindas lielumu klasterī;

2) ja heš-klasterī ir vairākas tabulas, SIZE var iestatīt uz vidējo apjomu, kas nepieciešams, lai glabātu visas rindas, kas attiecas uz reprezentatīvu heš-vērtību.

Pēc tam, kad ir noteikta aptuvenā SIZE vērtību, ja SIZE vērtība ir maza (katram datu blokam var lietot vairāk nekā četras heš-atslēgas), šo vērtību var izmantot, kā SIZE vērtību CREATE CLUSTER priekšrakstā. Tomēr, ja SIZE vērtība ir liela (katram datu blokam var piešķirt četras vai mazāk heš- atslēgas), ir jāņem vērā arī paredzamais sadursmju biežums un tas, vai datu izgūšana vai atmiņas izmantošanas efektivitāte ir svarīga.

1) ja heš-klasteris neizmanto iekšējo heš-funkciju (ja ir norādīta HASH IS) un tiek sagaidātas tikai dažas sadursmes vai vispār nē, var izmantot sākotnējo SIZE vērtību. Sadursmes nenotiek, un atmiņa tiek izmantota pēc iespējas efektīvāk.

2) ja sagaidāmas biežas sadursmes ievadot datus, iespēja, ka pārpildes bloki tiks iedalīti uzglabāšanas rindās, ir liela. Lai samazinātu pārpildes bloku iespējamību un palielinātu veiktspēju, ja sadursmes ir biežas, ir jāpielāgo SIZE, kā parādīts tabulā.Available Space for each Block / Calculated SIZE Setting for SIZE

1 SIZE

2 SIZE + 15%

3 SIZE + 12%

4 SIZE + 8%

>4 SIZE

Page 16: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

16

Controlling Space in Hash Clusters

The following examples show how to correctly choose the cluster key and set the HASH IS, SIZE, and HASHKEYS parameters. For all examples, assume that the data block size is 2K and that on average, 1950 bytes of each block is available data space (block size minus overhead).

Controlling Space in Hash Clusters: Example 1

You decide to load the emp table into a hash cluster. Most queries retrieve employee records by their employee number. You estimate that the maximum number of rows in the emp table at any given time is 10000 and that the average row size is 55 bytes.

In this case, empno should be the cluster key. Because this column contains integers that are unique, the internal hash function can be bypassed. SIZE can be set to the average row size, 55 bytes. Note that 34 hash keys are assigned for each data block. HASHKEYS can be set to the number of rows in the table, 10000. The database rounds this value up to the next highest prime number: 10007.

CREATE CLUSTER emp_cluster (empno NUMBER). . .SIZE 55HASH IS empno HASHKEYS 10000;

Page 17: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

17

Controlling Space in Hash Clusters: Example 2

Conditions similar to the previous example exist. In this case, however, rows are usually retrieved by department number. At most, there are 1000 departments with an average of 10 employees for each department. Department numbers increment by 10 (0, 10, 20, 30, . . . ).

In this case, deptno should be the cluster key. Since this column contains integers that are uniformly distributed, the internal hash function can be bypassed. A preliminary value of SIZE (the average amount of space required to hold all rows for each department) is 55 bytes * 10, or 550 bytes. Using this value for SIZE, only three hash keys can be assigned for each data block. If you expect some collisions and want maximum performance of data retrieval, slightly alter your estimated SIZE to prevent collisions from requiring overflow blocks. By adjusting SIZE by 12%, to 620 bytes (refer to "Setting SIZE"), there is more space for rows from expected collisions.

HASHKEYS can be set to the number of unique department numbers, 1000. The database rounds this value up to the next highest prime number: 1009.

CREATE CLUSTER emp_cluster (deptno NUMBER). . .SIZE 620HASH IS deptno HASHKEYS 1000;

Page 18: Lai ilustrētu izguves problēmas, pieņemsim, ka 100. bloks ir ... · Web view2021/02/04  · Kad lietotāji ievieto rindas 43. nodaļas klasterī, datu bāze nevar saglabāt šīs

18

Estimating Size Required by Hash Clusters

Oracle Database guarantees that the initial allocation of space is sufficient to store the hash table according to the settings SIZE and HASHKEYS. If settings for the storage parameters INITIAL, NEXT, and MINEXTENTS do not account for the hash table size, incremental (additional) extents are allocated until at least SIZE*HASHKEYS is reached. For example, assume that the data block size is 2K, the available data space for each block is approximately 1900 bytes (data block size minus overhead), and that the STORAGE and HASH parameters are specified in the CREATE CLUSTER statement as follows:

STORAGE (INITIAL 100K NEXT 150K MINEXTENTS 1 PCTINCREASE 0)SIZE 1500HASHKEYS 100

In this example, only one hash key can be assigned for each data block. Therefore, the initial space required for the hash cluster is at least 100*2K or 200K. The settings for the storage parameters do not account for this requirement. Therefore, an initial extent of 100K and a second extent of 150K are allocated to the hash cluster.

Alternatively, assume the HASH parameters are specified as follows:

SIZE 500 HASHKEYS 100

In this case, three hash keys are assigned to each data block. Therefore, the initial space required for the hash cluster is at least 34*2K or 68K. The initial settings for the storage parameters are sufficient for this requirement (an initial extent of 100K is allocated to the hash cluster).