SlideShare a Scribd company logo
1 of 97
SQL HiA
DAT 2800
Databaser I
Flerbrukerproblematikk
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
SQL HiA
Database-sider (Pages)
Physical Page No
1
1024 bytes total
Physical Page No
1
1024 bytes total
Physical Page No
2
1024 bytes total
Physical Page No
2
1024 bytes total
Physical Page No
3
1024 bytes total
Physical Page No
3
1024 bytes total
…..
Logical File Offset
0 1023 1024 2047 2048 3071
c:centura<DatabaseName>.dbs
SQL HiA
Lister av ulike typer database-sider
1 Page Group Log Prior Next
Type No Ptr Page Page
Data 3 1 0 7
1st page in product table
7 Page Group Log Prior Next
Type No Ptr Page Page
Data 3 2 1 19
2nd page in product table
Database-sider deles inn i grupper.
Sider innen samme gruppe lenkes sammen i dobbelt-lenkede lister.
Hoved-grupper av database-sider: Data
Index
Control
Logisk nummerering (1, 2, …) av sider innen samme gruppe
SQL HiA
Grupper av database-sider
Data pages Selve dataene i databasen
Row pages Tabell-rader
Extent Pages Kolonner som ikke får plass i Row pages
Long VarChar pages Long VarChar kolonner
Overflow pages Plassmangel ved clustered hashing
Designed overflow pages Preallokering ved clustered hashing
Dynamically created overflow pages Designed overflow page full
Index pages Inneholder B+
-tre indekser
Control pages Generelle kontroll-opplysninger
Database control block Versjonsnr, log-info, ...
Free extent list Liste av ikke-allokerte pages
Group free page list Gruppe-allokerings info (B+
-tre)
Group extent map Log pages --> Physical pages info
Bitmap pages Freespace info for hver tabell
Row count page Antall rader pr tabell
Table data page Siste rad serial nr, page nr for siste rad,
tabell størrelse, antall overflow pages.
SQL HiA
Row Pages
1 Page Group Log Prior Next
Type No Ptr Page Page
Data 3 1 0 7
Row Page
1st page in product table
7 Page Group Log Prior Next
Type No Ptr Page Page
Data 3 2 1 19
Row Page
2nd page in product table
8 Skrivebord 2.700
Tabell-rad
Plasseres i en såkalt Slot
i en database-side av type Data Row Page
SQL HiA
Row Pages
Page HeaderPage Header
Row Page HeaderRow Page Header
FreespaceFreespace
Page FooterPage Footer
Slot Table
Slot 5 Slot 4
Slot 3 Slot 1Slot 2
SQL HiA
Row Pages
Page HeaderPage Header Row Page HeaderRow Page Header
Physical
Page No.
Physical
Page No.
Page
Type
Page
Type Group No.
Group No. Logical
Page No.
Logical
Page No.
Previous
Page No.
Previous
Page No.
Next
Page No.
Next
Page No.
Log
Pointer
Log
Pointer Slot Size
Slot Size Free
Space
Free
Space
Extent
Page No.
Extent
Page No.
FreespaceFreespace
Slot Table
Entry 1 Entry 2 Entry 3
Page Footer Log PointerPage Footer Log Pointer
Slot 5 Slot 4
Slot 3 Slot 1Slot 2
Entry 4 Entry 5
Row Header
Row Serial No.
Update Serial No.
Nbr Columns
1 4 Berg 2 8 Grimstad 3 7 Snekker
Col ID Lengde Data
Slot 3
First Bit: Empty/Full
Peker til log-fil som inneholder
info om før/etter-situasjon
ved evnt endringer.
Sikkerhet ved 512 byte lagring
SQL HiA
Row Header
Row Serial No.
Entydig identifikator til en rad i en tabell.
Tilordnes sekvensielt ved innsetting (1,2,…).
Update Serial No.
Entydig identifikator til en rad i en tabell
i en felles UPDATE / INSERT.
Tilordnes sekvensielt (1,2,…).
Benyttes til UPDATE-tap ved
Cursor Stabilitet (CS) og
Release Lock (RL) isolasjonsnivå,
samt uendelig UPDATE / INSERT loop.
Eks: UPDATE TABLE Y
Set x = x + 1
WHERE x > 10
SQL HiA
RowID - Entydig rad-identifikator
RowIDRowID
Page No.
Fysisk
sidenummer
hvor raden
befinner seg.
Slot No.
Slot nummer
innen siden
hvor raden
befinner seg.
Row Serial No.
Insert row serie
nummer.
Entydig.
Tilordnes ved innsetting.
Endres aldri.
Benyttes aldri pånytt.
Update Serial No.
Update row serie
nummer.
Endres ved Update.
Benyttes for å gjenfinne
en tabell-rad fra databasen
Verifiserer hvorvidt
raden fortsatt
okkuperer
denne lokasjonen
eller er slettet
og eventuelt
erstattet av en annen rad
Verifiserer
eventuell oppdatering
av raden
SQL HiA
RowID
RowID SNr Navn PNr
CAAD 5 Nilsen 5002
BACV 2 Olsen 6400
ERCB 1 Hansen 9000
EADD 4 Berg 6400
Selger (ID = SNr)
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Selger (ID = SNr)
Et eksempel på en 3NF-tabell Selger
med tre kolonner
SNr, Navn og PNr
RowID er en ekstra kolonne i hver tabell
som alltid kommer i tillegg til de kolonnene
vi eksplisitt definerer.
RowID er entydig for hver rad
og fungerer som en slags identifikator.
SQL HiA
Extent Pages
Page HeaderPage Header Row Page HeaderRow Page Header
Physical
Page No.
3
Physical
Page No.
3
Page
Type
ROW
Page
Type
ROW
Group No.
20
Group No.
20
Logical
Page No.
Logical
Page No.
Previous
Page No.
Previous
Page No.
Next
Page No.
Next
Page No.
Log
Pointer
Log
Pointer Slot Size
Slot Size Free
Space
Free
Space
Extent
Page No.
7
Extent
Page No.
7
Slot Table
Slot 2
Page HeaderPage Header Row Page HeaderRow Page Header
Physical
Page No.
7
Physical
Page No.
7
Page
Type
EXTENT
Page
Type
EXTENT
Group No.
20
Group No.
20
Logical
Page No.
Logical
Page No.
Previous
Page No.
Previous
Page No.
Next
Page No.
Next
Page No.
Log
Pointer
Log
Pointer Slot Size
Slot Size Free
Space
Free
Space
Extent
Page No.
15
Extent
Page No.
15
Slot Table
Slot 2
Inneholder kolonner som ikke får plass i opprinnelig Row Page
SQL HiA
Long VarChar Pages
Page HeaderPage Header Row Page HeaderRow Page Header
Physical
Page No.
3
Physical
Page No.
3
Page
Type
ROW
Page
Type
ROW
Group No.
20
Group No.
20
Logical
Page No.
Logical
Page No.
Previous
Page No.
Previous
Page No.
Next
Page No.
Next
Page No.
Log
Pointer
Log
Pointer Slot Size
Slot Size Free
Space
Free
Space
Extent
Page No.
1014
Extent
Page No.
1014
Slot Table
Slot 2
Page HeaderPage Header Row Page HeaderRow Page Header
Physical
Page No.
7
Physical
Page No.
7
Page
Type
LONG
Page
Type
LONG
Group No.
20
Group No.
20
Logical
Page No.
Logical
Page No.
Previous
Page No.
Previous
Page No.
Next
Page No.
Next
Page No.
Log
Pointer
Log
Pointer Slot Size
Slot Size Free
Space
Free
Space
Extent
Page No.
1015
Extent
Page No.
1015
Slot Table
Slot 2
Long VarChar kolonner plasseres i egne Long Pages
SQL HiA
Overflow Pages - Designed Overflow Pages
Page 1
Page 1
Page 2
Page 2
Page 3
Page 3
Page N
Page N... Page 1
Page 1
Page 2
Page 2
Page 3
Page 3
Page N
Page N...
Avsettes plass til eventuelle overløps-rader for hver N page
SQL HiA
Overflow Pages - Dynamically Created Overflow Pages
Page 1
Page 1
Page 2
Page 2
Page 3
Page 3
Page N
Page N... Page 1
Page 1
Page 2
Page 2
Page 3
Page 3
Page N
Page N...
Hvis et ikke er plass til overløps-poster i Designed Overflow Pages,
opprettes dynamiske overløps-sider.
SQL HiA
Indekser
• B-Trær Indeks bygget opp som tre-struktur.
Benyttes både på primary keys og foreign keys.
• Hash-tabeller Nøkkel-tranformering.
Benyttes typisk på primary key (ID).
Clustered Index:
Bestemmer fysisk rekkefølge på data
i database-tabeller.
Kun en clustered index pr tabell.
Må alltid lages før non-clustered index.
Må alltid lages før data plasseres i tabellen.
SQL HiA
CREATE INDEX
Oppretter en indeksOppretter en indeks
EATE INDEX index name
UNIQUE CLUSTERED HASHED
,
table name ( column name )
ASC
DESC
CTFREE integer constant SIZE integer value ROWS
BUCKET
Max size = 6 + number of + sum of <= 255
columns in length of all
index columns in
index
SQL HiA
CREATE INDEX - Eksempel
CREATE UNIQUE CLUSTERED HASHED INDEX hSNdx
ON Selger (SNrID)
SIZE 100 ROWS
CREATE UNIQUE INDEX Bidndx
ON Bedrift (BedriftsID)
CREATE INDEX BnNdx
ON Bedrift (BedriftsNavn)
CREATE INDEX SNavnNdx
ON BEDRIFT (@UPPER(Navn))
SQL HiA
Clustered Index / Non-Clustered Index
Index
Data
Clustered Non-Clustered
SQL HiA
Indekser i form av trestruktur
…..
SQL HiA
Binært tre
4242
818177
Søk etter tallet 15
Hver node inneholder maksimum 2 barn.
Minimum-høyden av et binært tre som inneholder N noder er [log2N] + 1.
Eks: Et tre med 100 noder vil ha minst 7 nivåer.
SQL HiA
Multiway tre
42 8142 81
95 10795 1077 247 24
Søk etter tallet 15
Hver node inneholder N antall nøkler (keys) (her 2).
Færre nivåer enn binære trær og lavere gjenfinningstid.
Balanserings-algoritmene er komplekse.
50 6150 61
SQL HiA
B-tre
Et B-tre er et balansert multiway tre med følgende endring:
Hver node trenger ikke nødvendigvis inneholde nøyaktig N keys.
Noder kan vokse fra halv-full til full.
Dette reduserer balanserings-algoritmene og er derfor ressurssparende.
SQL HiA
B-Trær
Et B-Tre av orden m er definert ved følgende:
- Roten er enten et løv eller har minst to barn
- Alle intermediære noder har:
Antall key i intervallet [m, 2m]
Antall barn i intervallet [m+1, 2m+1]
- Alle løv befinner seg på samme nivå
12 15 25 31 41 59 91
21 48 72
1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99
84
Eks:
B-tre av orden 3
Løv
Database
SQL HiA
B-trær Eks: Innsetting i et B-tre (1)
8,11,12 16,17 41,5222,23,31 58,59,61
16:- 41:58
22:-
Løv
Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn
SQL HiA
B-trær Eks: Innsetting i et B-tre (2)
8,11,12 16,17,18 41,5222,23,31 58,59,61
16:- 41:58
22:-
SQL HiA
B-trær Eks: Innsetting i et B-tre (3)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17,18
SQL HiA
B-trær Eks: Innsetting i et B-tre (4)
1,8 11,12 41,5222,23,31 58,59,61
11:16 41:58
22:-
16,17 18,19
SQL HiA
B-trær Eks: Innsetting i et B-tre (5)
1,8 11,12 41,5222,23,31 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
SQL HiA
B-trær Eks: Innsetting i et B-tre (6)
1,8 11,12 41,5222,23 58,59,61
11:- 41:58
16:22
16,17 18,19
18:-
28,31
SQL HiA
B-trær Eks: Innsetting i et B-tre (7)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
16:22
16,17 18,19
18:-
28,31
28:-
SQL HiA
B-trær Eks: Innsetting i et B-tre (8)
1,8 11,12 41,5222,23 58,59,61
11:- 58:-
22:-
16,17 18,19
18:-
28,31
28:-
16:- 41:-
SQL HiA
B+
-tre
• Alle pekere til databasefil fjernes fra index-nodene
• Alle key-verdier lagres i løvene uavhengig av hvorvidt de eksisterer i index-nodene.
• Løv noder er lenket sammen i en liste kalt sekvens-settet.
B-tre er optimalt mht aksess til single-record,
men ineffektivt mht sekvensiell prosessering.
B+
-tre skiller seg fra B-tre ved:
SQL HiA
Prefix B+
-tre
Prefix B+-tre er et B+-tre
hvor kun den delen av Key som er nødvendig mht entydighet
lages i index-nodene.
Avkortede Key-verdier
SQLBase benytter Prefix B+
-tre
SQL HiA
Hashing / Nøkkel-transformering / Randomisering
Hashing
Key Transformed Key
SQL HiA
Nøkkel-transformering
1
2
3
4
5
6
7
8
9
.
.
.
PNr
1
2
3
4
5
6
7
8
9
.
.
.
ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
SQL HiA
Nøkkel-transformering
6 4 7 2 1
KundeNr TverrSum
Distrikt
SQL HiA
Nøkkel-transformering
6 4 7 2 3
KundeNr Siste siffer i tverrsummen av
siste siffer i produktene
6 4 7 2
1 2 3 4
6 8 21 8
KundeNr
Vekttall
Produkt
SQL HiA
Nøkkel-transformering
32191
51877
77638
PNr ID
PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID
32191
51877
77638
Ubenyttet
1 … 10000
SQL HiA
Hash-tabeller
3434
6767
88
2121
7373
6262
6868
8686
66
77
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
33
44
11
22
55
88
IDID
TransTrans
34 4
67 7
8 1
21 3
73 8
62 7
68 7
86 9
34
67
SQL HiA
Nøkkel-tranformering - Folding
Nøkkel-
transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6
7 6 9 4
7 7 0
+
+ 1
SQL HiA
Nøkkel-transformering - Divisjon-rest-metoden
Nøkkel-
transformering
ID = 29384756 PostNr [ 1 - 1000 ]
2 9 3 8 4 7 5 6 : 9 9 7
1 7 5
SQL HiA
Nøkkel-tranformering - Uheldig tranformering
HSize = 10000
KeySize = 8
HValueMax = 8 * 127 = 1016
1016
10000
Tranformering av hvert tegn i Key
til tilhørende ordinal-verdi:
SQL HiA
Ulike nøkkel-transformeringer
int Hash1(char* Key, int HSize)
{
return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize;
}
Transformed
Key Data
Key
int Hash2(char* Key, int HSize)
{
return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize;
}
SQL HiA
Ulike nøkkel-transformeringer
[ ]Key KeySize i i
i
KeySize
−
=
−
∑ *32
0
1
int Hash3(char* Key, int KeySize, int HSize)
{
int HashVal;
HashVal = (int)Key[0];
for(int i = 1; i < KeySize; i++)
HashVal = HashVal*32 + (int)Key[i];
HashVal = HashVal % Hsize;
return HashVal;
}
Transformed
Key Data
Key
SQL HiA
Hashing a key to a database page - SQLBase
1. Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi.
Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes).
1A. Del ASCII-key inn i 4-byte enheter.
1B. XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte).
1C. Utfør bitwise complement (fjerner event. bias)
2. Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet
ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider.
3. Transformer output fra 2 til en fysisk side adresse
ved å legge til start side-nummer for for første rad i tabellen.
SQL HiA
Hashing a key to a database page - SQLBase - Eks
1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77ASCII
1A. Key1 = 57 51 48 53
Key2 = 69 74 83 77
1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101
XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101
-------------------------------------------------------------------------
= xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII
1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCII
bfKey = 2206637191 (fullword key)
2. Page Adresses 0 - 1752 (1753 hash buckets)
2206637191 MOD 1753 = 1110
3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170
SQL HiA
Flerbrukersystem Client / Server
DatabaseDBMSDBMS
Application_2Application_2
SQL-Request
Data
Application_3Application_3
Application_1Application_1
Client Server
SQL HiA
Update tap i flerbrukersystem uten lås
SELECT Count
FROM Products ...
Answer: 139
UPDATE Products
SET Count = 39
SELECT Count
FROM Products ...
Answer: 139
UPDATE Products
SET Count = 14
MID PID Count
...
ACI 41 139
...
MID PID Count
...
ACI 41 39
...
MID PID Count
...
ACI 41 14
...
Accept Order for 100
Accept Order for 125
Joe’s Program Products Table Mary’s Program
SQL HiA
Commit / Rollback problem i flerbrukersystem uten lås
SELECT Count
FROM Products ...
Answer: 139
UPDATE Products
SET Count = 39 SELECT Count
FROM Products ...
Answer: 39
MID PID Count
...
ACI 41 139
...
MID PID Count
...
ACI 41 39
...
MID PID Count
...
ACI 41 139
...
Accept Order for 100
Refuse Order for 125
Joe’s Program Products Table Mary’s Program
ROLLBACK
SQL HiA
Inkonistens problem i et flerbrukersystem uten lås
DELETE FROM Orders
WHERE ...
SELECT *
FROM Orders
OrderNr Amount
112961 $31.500
113012 $03.745
UPDATE Program Orders Table Report Program
OrderNr Amount
112961 $31.500
113012 $03.745
OrderNr Amount
112961 $31.500
113012 $03.745
113102 $05.000
Answer:
112961 $31.000
Answer:
113012 $03.745
INSERT INTO Orders
VALUES
(113102, $05.000)
COMMIT Answer:
113102 $05.000
SQL HiA
Låse-mekanismer
UPDATE Orders
SELECT
FROM Offices
UPDATE Orders
UPDATE Offices
COMMIT
UPDATE Products
SELECT ...
FROM Offices
COMMIT
Orders Offices Products
U U U
Ok L A
L B Ok
Ok L A
Wait
Ok
Ok
Ok U U Ok
L B
U U Ok
n A DBMS Transaction
SQL HiA
Shared Lock / Exclusive Lock
Unlocked
Shared
Lock
Exclusive
Lock
Unlocked
Shared
Lock
Exclusive
Lock
Ok Ok Ok
Ok Ok No
Ok No No
Transaction B
Transaction A
S-lås Shared Lock Settes på database-siden når en bruker
leser (SELECT) fra databasen.
X-lås Exclusive Lock Settes på database-siden når en bruker
skal gjøre en oppdatering (UPDATE),
sletting (DELETE)
eller innlegging av nye data (INSERT).
SQLBase opererer med låsing av
database-sider (pages)
som hver er på 1 K.
En database-side kan kun
inneholde rader fra en tabell.
SQL HiA
Shared Lock / Exclusive Lock
UPDATE Orders
SELECT
FROM Offices
UPDATE Orders
UPDATE Offices
COMMIT
UPDATE Products
SELECT ...
FROM Offices
COMMIT
Orders Offices Products
U U U
Ok EL A
EL B Ok
Ok SL A
SL A,B Ok
Ok SL A U Ok
Ok EL A
Ok U U
n A DBMS Transaction
SL = Shared Lock
EL = Exclusive Lock
SQL HiA
Dead Lock
UPDATE Orders
UPDATE Products
Orders Products
U U
Ok EL A
EL B Ok
W
Ok
W
n A DBMS Transaction
SL = Shared Lock
EL = Exclusive Lock
UPDATE Products
UPDATE Orders
SQL HiA
Låse-mekanismer
• Database
• Tabell
• Side (Page) 1-2-4-16 K
• Rad
• Kolonne
Låse-mekanismer kan benyttes på følgende nivåer:
Økende parallell-prosessering.
Økende kompleksitet.
SQLBase låser sider (pages) på 1K
SQL HiA
Database access cycle
Connect
Database
operations
Disconnect
Prepare (Compile)
Execute
Fetch (for a SELECT)
Select, Insert,
Update, Delete, ...
SQL HiA
Connect / Disconnect
SqlDatabase DEMO
SqlUser SYSADM
SqlPassword SYSADM
SqlConnect
SqlDisconnect
Predefinerte variable Default-verdier
Centura-funksjoner
SQL HiA
Connect / Disconnect Eksempel
Global Declarations
…
Variables
Sql Handle: hSql
Boolean: bConnect
...
On SAM_AppStartup
Set SqlDatabase = ‘Handel’
Set SqlDatabase = ‘BrukerA’
Set SqlPassword = ‘PBrA’
Set bConnect = SqlConnect ( hSql )
On SAM_AppExit
If bConnect
Call SqlDisconnect ( hSql )
SQL HiA
SqlHandle
Name of DbConnectionName of DbConnection
Sql Handle: hSql
Row Position in Result SetRow Position in Result Set
Input message bufferInput message buffer
Output message bufferOutput message buffer
Work Space
in Memory
SQL HiA
Compiling and Exexuting SQL statements
SqlPrepare : Kompilerer et SQL statement
SqlExecute : Eksekverer et SQL statement
SqlPrepareAndExecute : Kompilerer og eksekverer et SQL statement
SQL HiA
SELECT
1. Prepare (compile) SELECT statement
2. Execute SELECT statement
3. Benytt SqlFetch…
for å hente en rad inn i INTO variable
SqlFetchNext Henter neste rad i et resultatsett
SqlFetchPrevious Henter forrige rad i et resultatsett
SqlFetchRow Henter en gitt rad i et resultatsett
SqlGetResultSetCount Returnerer antall rader i et resultatsett
SqlSetResultSet Setter resultatsett mode på/av for gitt SqlHandle.
Følgende sletter et resultatsett:
- Kompilering av et annet SQL statement for samme SqlHandle
- Commit / Rollback hvis DBP_PRESERVE er av for denne SqlHandle
SQL HiA
Fetch-indikatorer
FETCH_Delete
FETCH_EOF
FETCH_Ok
FETCH_Update
Raden er slettet siden forrige henting
Ingen flere rader kan hentes
Henting Ok
Raden er endret (Update) siden forrige henting
SqlFetchNext ( hSql, nFetch )
SqlFetchPrevious ( hSql, nFetch )
SqlFetchRow ( hSql, nRow, nFetch )
SQL HiA
SqlImmediate
SqlImmediate
SqlConnect
SqlPrepare
SqlExecute
SqlFetchNext (SELECT)
SqlClearImmediate
Connect en intern SqlHandle,
Prepare and Execute
a SQL Statement.
Disconnect SqlHandle fra SqlImmediate
SQL HiA
Funksjoner for database-parametre Set / Get
SqlSetParameter Setter databaseparametre
SqlSetParameterAll Setter databaseparametre
SqlSetInMessage Setter størrelse på InputMessageBuffer (1-32K)
SqlSetIsolationLevel Setter isolasjonsnivå i tilknytning til S-lås
SqlSetLockTimeout Setter ventetid (-1,0,1…1800s)
SqlSetOutMessage Setter størrelse på OutputMessageBuffer (1-32K)
SQL HiA
DBP_* parametre
DBP_AUTOCOMMIT On: Automatisk Commit ved SQL-statem.
DBP_BRAND Ulike databaser (DBV_BRAND_SQL, …)
DBP_FETCHTHROUGH On: Henter rader direkte fra datab.server
DBP_LOCKWAITTIMEOUT Tall som viser ventetid (-1,0,1…1800s)
DBP_NOPREBUILD On: Ingen prebuild av resultatsett
ved ResultSetMode og RL.
S-lås settes på gjeldende side.
DBP_PRESERVE On: Bevarer resultatsett ved Commit
DBP_ROLLBACKONTIMEOUT On: Rollback ved timeout
DBP_VERSION Database server versjon
SQL HiA
DBP_BRAND
DBV_BRAND_ALLBASE Hewlett-Packard ALLBASE
DBV_BRAND_AS400 IBM AS/400
DBV_BRAND_CINCOM-SUPRA Cincom Supra
DBV_BRAND_DB2 IBM DB2
DBV_BRAND_INFORMIX Informix
DBV_BRAND_INFORMIX-ONLINE Informix Online
DBV_BRAND_ORACLE Oracle
DBV_BRAND_ORACLE7 Oracle v.7
DBV_BRAND_OS2EE IBM OS/2 EE
DBV_BRAND_SQL SQLBase
DBV_BRAND_SYBASE SQL Server
SQL HiA
DBP_LOCKWAITTIMEOUT
Verdi Beskrivelse
1-1800 Ventetid for en lås ( 1 sek - 30 min, 300 s default )
-1 Vent for evig
0 Ingen venting
SQL HiA
Input / Output Message Buffer (as seen from Client)
DatabaseDBMSDBMS
ApplicationApplication
SQL-Request
Data
Input Message BufferInput Message Buffer
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
hSql1
hSql2
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
hSql1
Input Message BufferInput Message Buffer
Output Message BufferOutput Message Buffer
Application 1
Application 2
Output Message BufferOutput Message Buffer
SQL HiA
Resultatsett
DatabaseDBMSDBMS
ApplicationApplication
SQL-Request
Data
SELECT SNr, Navn, PNr
FROM Selger
WHERE PNr = 6400
SNr Navn PNr
5 Nilsen 5002
2 Olsen 6400
1 Hansen 9000
4 Berg 6400
Tabellen Selger
SNr Navn PNr
2 Olsen 6400
4 Berg 6400
Resultatsett
Client Server
Fetch
SQL HiA
Resultatsett
Et resultatsett er en temporær indeks,
av og til assosiert med en temporær tabell (ved beregn. eller kompl. søk)
som inneholder data som representerer resultatet av et SELECT-statement
ved spesielle komplekse spørringer.
Innholdet i resultatsettets løvsider er pekere (ROWIDs)
til rader i tabeller som tilfredsstiller SELECT-statementet.
…..
RowID
SQL HiA
RowID
SELECT …..SELECT …..
Resultat-sett
av
løv-pekere
Resultat-sett
av
løv-pekere
RowID 1
RowID 2
RowID 3
...
RowID 1
RowID 2
RowID 3
...
Resultat-sett
av
temporær tabell-data
Resultat-sett
av
temporær tabell-data
…..
…..
…..
…..
…..
…..
…..
…..
SQL HiA
Resultatsett - RowID - Single tabell
Resultat-sett
av
løv-pekere
Resultat-sett
av
løv-pekere
AABC
AABE
AABC
AABE
ROWID SNr Navn PNr
AABB 5 Nilsen 5002
AABC 2 Olsen 6400
AABD 1 Hansen 9000
AABE 4 Berg 6400
Selger (ID = SNr)
SELECT SNr, Navn
FROM Selger
WHERE PNr = 6400
SQL HiA
Resultatsett - RowID - Join
Resultat-sett
av
løv-pekere
Resultat-sett
av
løv-pekere
ROWID SNr Navn PNr
AABB 5 Nilsen 5002
AABC 2 Olsen 6400
AABD 1 Hansen 9000
AABE 4 Berg 6400
Selger (ID = SNr)
SELECT Selger.SNr, Selger.Navn, Selger.PNr, Adr.Sted
FROM Selger, Adr
WHERE Selger.PNr = Adr.PNrID AND
Selger.PNr = 6400
ROWID PNrID Sted
GGHA 5002 Bergen
GGHB 6400 Molde
GGHC 9000 Tromsø
Adr (ID = PNr)
Selger-RowID Adr-RowID
--------------------------------------
AABC GGHB
AABE GGHB
SQL HiA
Resultatsett - RowID - Beregnede verdier
Resultat-sett
av
RowID til tmpTbl
Resultat-sett
av
RowID til tmpTbl
ROWID SNr Navn PNr
AABB 5 Nilsen 5002
AABC 2 Olsen 6400
AABD 1 Hansen 9000
AABE 4 Berg 6400
Selger (ID = SNr)
SELECT Selger.SNr, Selger.Navn, SUM(Mg)
FROM Selger, Salg
WHERE Selger.SNrID = Salg.SNrID
GROUP BY Selger.SNr, Selger.Navn
XXAA
XXAB
XXAC
XXAD
ROWID SNr VNr Mg
YYAA 5 8 30
YYAB 2 1 20
YYAC 2 3 10
YYAD 1 5 50
YYAE 1 8 40
YYAF 4 1 70
YYAG 4 3 50
YYAH 4 5 20
Salg (ID = SNr + VNr)
RowIDSNrID Navn Sum(Mg)
--------------------------------------------
XXAA 1 Hansen 90
XXAB 2 Olsen 30
XXAC 4 Berg 140
XXAD 5 Nilsen 30
Temporær tabell med resultat-rader
SQL HiA
Sletting av Resultat-sett
Resultat-sett slettes vanligvis ved:
- Eier cursor/sqlHandle disconnectes
- Eier cursor/sqlHandle rekompilerer SELECT-statementet.
- Transaksjonen utfører COMMIT eller ROLLBACK.
- Transaksjonen endrer gjeldende isolation mode.
Hvis cursor context preservation er satt på,
gjelder følgende endringer fra regelen ovenfor:
- COMMIT sletter ikke resultatsettet
- ROLLBACK sletter ikke resultatsettet
ved RL isolation level og ikke bruk av DDL.
bOk = SqlSetParameter ( hSql, DBP_PRESERVE, TRUE, ‘‘ )
SQL HiA
X-lås / S-lås
X-lås Settes alltid automatisk ved INSERT, UPDATE eller DELETE (DML).
Varigheten er inntil COMMIT/ROLLBACK.
S-lås Settes alltid ved SELECT (DQL).
Varigheten er avhengig av programmert isolasjons-nivå,
men slippes alltid ved COMMIT/ROLLBACK.
Typen av isolasjons-nivå har innvirkning på
andre brukeres tilgang til databasen
og tidsgyldigheten av resultatsettet.
Låser implementeres i SQLBase vha en intern HashTabell.
SQL HiA
Isolation Level - Consistency / Concurrency
RR (Read Repeatability) Alle sider som brukeren aksesserer (Fethed) er låst for andre
inntil commit på transaksjonen.
Garanterer lese-konsistens, men forårsaker mye venting.
Default.
CS (Cursor Stability) Kun den siden som i øyeblikket prosesseres (Fetched) blir låst.
En rad om gangen blir sendt til output message buffer
på serveren og over nettverket til klienten.
Forårsaker større nettverkstrafikk.
Rader i resultatsettet kan bli endret av andre.
RO (Read Only) Kun leseadgang.
Ingen låser settes.
Ved lesing av en side med lås, leses history-fil(er).
RL (Release Locks) Slipper låsen med en gang resultatsettet er ferdig generert.
Gir andre brukere gode aksesseringsmuligheter.
Ved fetch settes en S-lås (i tilfelle av en uncommited update
fra en annen transaksjon), men slippes straks etter fetch.
4 isolasjons-nivåer:
Gjelder for alle cursors i en transaksjon
SQL HiA
Isolation Level
bok = SqlSetIsolationLevel ( hSql, sIsolationLevel )
sIsolationLevel = RR
CS
RO
RL
RR (Read Repeatability er default).
Isolation Level som settes gjelder for alle cursors
i transaksjonen for denne brukeren.
Endring av Isolation Level medfører en implisitt Commit.
SQL HiA
RR - Read Repeatability
RR (Read Repeatability) Alle sider som brukeren aksesserer er låst for andre
inntil commit på transaksjonen.
Garanterer lese-konsistens, men forårsaker mye venting.
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
S-lås
S-lås
Resultatsett
Database sider (pages)
S-lås
SQL HiA
CS - Cursor Stability
CS (Cursor Stability) Kun den siden som i øyeblikket prosesseres (Fetched) blir
låst.
En rad om gangen blir sendt til output message buffer
på serveren og over nettverket til klienten.
Forårsaker større nettverkstrafikk.
Rader i resultatsettet kan bli endret av andre.
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
S-lås
Resultatsett
Database sider (pages)
Fetch
SQL HiA
RO - Read Only
RO (Read Only) Kun leseadgang.
Ingen låser settes.
Ved lesing av en side med lås, leses history-fil(er).
xx
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
Lås fra annen bruker
Resultatsett
Database sider (pages)
SQL HiA
RL - Release Locks
RL (Release Locks) Slipper låsen med en gang resultatsettet er ferdig generert.
Gir andre brukere gode aksesseringsmuligheter.
Ved fetch settes en S-lås (i tilfelle av en uncommited update
fra en annen transaksjon), men slippes straks etter fetch.
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
S-lås som slippes
straks resultatsettet
er ferdig generert
Resultatsett
Database sider (pages)
Fetch
S-lås settes
ved Fetch-operasjon
(pga evnt uncommited update),
men slippes straks etter.
SQL HiA
FetchThrough
bOk = SqlSetParameter ( hSql, nParameter, nNumber, sString ) Syntaks
bOk = SqlSetParameter ( hSqlA, DBP_FETCHTHROUGH, TRUE, ‘‘ ) Eksempel
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
Resultatsett
Database sider (pages)
Fetch
DBP_FETCHTHROUGH
SQL HiA
Isolation Level
Isolation LevelIsolation Level Locks (S-Locks)Locks (S-Locks) Data ConsistencyData Consistency
RRRR
Lås holdes gjennom
hele transaksjonen.
Mer enn en side
kan være låst.
CSCS
Lås holdes kun
på den siden
som inneholder
gjeldende rad.
RORO
RLRL
Ingen lås.
Ingen INSERT,
UPDATE, DELETE.
Lås slippes
straks ved
end-of-fetch
(når resultatsettet
er ferdig generert).
User ConcurrencyUser Concurrency
Høy Lav
Middels Middels
Høy Høyest
Lav Høy
SQL HiA
Data Consistency - User Concurrency
Data
Consistency
User
Concurrency
RO RR CS RL RO
SQL HiA
Kriterier for valg av Isolation Level
1. Buffere : Hvor kritisk er gjenfinningshastigheten (performance) i applikasjonen?
Hvis kritisk performance, velg et isolasjonsnivå hvor input message buffer på server
fylles helt med rader før oversending til client (unngå CS).
2. Contention : Hvis det forventes at mange brukere samtidig vil aksessere de samme sidene,
ikke velg et isolasjonsnivå hvor S-låser plasseres på alle leste data
inntil commit / rollback.
3. Update : Vil brukere i stor utstrekning benytte insert/update/delete?
I så fall, velg et isolasjonsnivå som tillater disse operasjonene.
4. Consistency : Er konstistente data gjennom applikasjonen viktig?
Hvis det er viktig at dataene vil beholde de samme verdiene inntil transaksjonen
avsluttes, velg et isolasjonsnivå som holder S-lås inntil commit eller avslutt.
SQL HiA
Isolation Level - Kriterier
Isolation LevelIsolation Level Kriterie 1
Buffere
Kriterie 1
Buffere
RRRR JaJa
Kriterie 2
Contention
Kriterie 2
Contention
Kriterie 3
Update
Kriterie 3
Update
Kriterie 4
Consistency
Kriterie 4
Consistency
CSCS
RORO
RLRL
NeiNei
JaJa
JaJa
NeiNei
JaJa
JaJa
JaJa
JaJa
JaJa
NeiNei
JaJa
JaJa
NeiNei
JaJa
NeiNei
SQL HiA
Flerbruker-teknikk
1. Benytt Release Locks (RL) isolation level.
2. Benytt ROWID valideringsteknikk i tilknytning til UPDATE og DELETE.
3. Ikke endre DBP_NOPREBUILD fra default verdi (off).
Anbefaling ved SQLBase flerbrukerteknikk:
SQL HiA
Fetch / Update av resultatsett rader i SQLBase (1)
SqlFetchNext ( hSql, nFetch )
SqlFetchPrevious ( hSql, nFetch )
SqlFetchRow ( hSql, nRow, nFetch )
Row 1
Row 2
Row 3
Row 4
Row 1
Row 2
Row 3
Row 4
Slot
Slot
RowSerialNr RowUpdateSerialNr
Fetch
rRowID
1
2
3
Les
Page
Les nBit1 for DeleteTest
4
Les Row (med pRowID) fra Page
for test på Delete/Insert (RowSerialNr)
og Update (RowUpdateSerialNr)
Resultatet fra testene ovenfor returneres gjennom nFetch
nFetch = FETCH_Delete Slettet siden forrige henting
FETCH_EOF Slutten / Begynnelsen av resultatsettet
FETCH_Ok Henting ok, raden er ‘korrekt’
FETCH_Update Oppdatert siden forrige henting
Page
Row
ResultatSett
SQL HiA
Fetch av resultatsett rader i SQLBase (2)
Les rRowID i ResultatSett rad
Les Page ved å ved å benytte PageNumber i rRowID
Les nBit1 i SlotTable ved å benytte SlotKomponent i rRowID
IF nBit1 = 0
Row er slettet (av annen bruker)
ELSE
Les Row fra Page ved å benytte offset i SlotTable. Les pRowID
IF RowSerialNumber(pRowID) != RowSerialNumber(rRowID)
Raden er slettet og gjenbrukt av annen rad
ELSE
IF RowUpdateSerialNumber(pRowID) != RowUpdateSerialNumber(rRowID)
Raden er endret
ELSE
Raden i ResultatSett og Page er identiske
SQL HiA
RowID validitering
StartStart
OkOk
Prepare / Execute Select.Prepare / Execute Select.
RowID
Ok
RowID
Ok
Changed-row
processing
Changed-row
processing
EndEnd
FetchRowsFetchRows
User changes a rowUser changes a row
Prepare / Execute a DMLPrepare / Execute a DML
Error
processing
Error
processing
CommitCommit
No No
YesYes
SQL HiA
SQL Error
nError = SqlError (hSql) Returnerer siste gjeldende error kode for gitt sqlhandle.
nError = 0 ved ingen sql-error.
bOk = SqlErrorText (nError, nType, strError, nLength, nRealLength)
Henter feilmelding fra ERROR.SQL for gitt nError.
nError : Gitt error
nType : SQLERROR_Reason Error code reason
SQLERROR_Remedy Error message
strError : Begrunnelse eller message tekst
nLength : Maksimal lengde av strError
nRealLength: Aktuell lengde av strError
bOk = SqlGetErrorText ( nError, strText)
Returnerer error fra ERROR.SQL for gitt nError.
bOk = SqlGetError (hSql, nError, strErrorString)
Slår av backend error mapping
og returnerer real backend error.
Samme som SqlError og SqlGetErrorText ved SQLBase.
bOk = SqlGetErrorPosition (hSql, nPos)
Returnerer offset error-posisjon i gitt SQL-statement.
SQL HiA
SQL Error
bOk = SqlExtractArgs (wParam, lParam, hSql, nError, nPos)
Ekstraherer error-informasjon fra SAM_SqlError argumentene wParam og lParam.
wParam: Verdien av wParam argument i SAM_SqlError
lParam : Verdien av lparam argument i SAM-SqlError
hSql : Receive Sql Handle.
Centura bestemmer denne fra wParam.
nError : Receive Error Number.
Centura bestemmer denne verdien fra low-order word i lParam.
nPos : Receive Error Position Number (offset innen SQL-statement).
Centura bestemmer denne verdien fra high-order word i lParam.
SQL HiA
SQL Error
Application Actions
…
On SAM_SqlError
Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos )
…
…
When SqlError
…
…
SQL HiA
SQL Error
StartStart
When
SqlE.
When
SqlE.
SqlE-WhenStatem.SqlE-WhenStatem.
ReturnReturn SAM
SqlE.
SAM
SqlE.
ReturnValue
blir Sql*
function return
ReturnValue
blir Sql*
function return
SqlE-WhenStatem.SqlE-WhenStatem.
SAM
SqlE.
SAM
SqlE.
ReturnValue
blir Sql*
function return
ReturnValue
blir Sql*
function return
Default
Error handling.
Default
Error handling.
EndEnd
Yes
No
Yes
No
Yes
No
SQL HiA
End

More Related Content

Viewers also liked

نتایج گروه درمانی مهرتن
نتایج گروه درمانی مهرتننتایج گروه درمانی مهرتن
نتایج گروه درمانی مهرتنSepidan
 
niche_construction_evolution2005_3449025
niche_construction_evolution2005_3449025niche_construction_evolution2005_3449025
niche_construction_evolution2005_3449025Converse Griffith
 
Parohia Băbeni III Valea Mare
 Parohia Băbeni III Valea Mare Parohia Băbeni III Valea Mare
Parohia Băbeni III Valea MareAlbumeParohii
 
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...Using sensor patterns to predict a depression or addiction relapse - Jan Pete...
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...Ernesto Ramirez
 
Quick Leasing Presentation
Quick Leasing  PresentationQuick Leasing  Presentation
Quick Leasing PresentationDennis Peterson
 
Postimpresjonismen
PostimpresjonismenPostimpresjonismen
PostimpresjonismenHelene Fosse
 
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...verito velasquez
 

Viewers also liked (12)

نتایج گروه درمانی مهرتن
نتایج گروه درمانی مهرتننتایج گروه درمانی مهرتن
نتایج گروه درمانی مهرتن
 
Liandrys alvarado 22202378
Liandrys alvarado 22202378Liandrys alvarado 22202378
Liandrys alvarado 22202378
 
niche_construction_evolution2005_3449025
niche_construction_evolution2005_3449025niche_construction_evolution2005_3449025
niche_construction_evolution2005_3449025
 
Historia ii
Historia iiHistoria ii
Historia ii
 
Parohia Băbeni III Valea Mare
 Parohia Băbeni III Valea Mare Parohia Băbeni III Valea Mare
Parohia Băbeni III Valea Mare
 
final-ppt
final-pptfinal-ppt
final-ppt
 
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...Using sensor patterns to predict a depression or addiction relapse - Jan Pete...
Using sensor patterns to predict a depression or addiction relapse - Jan Pete...
 
Quick Leasing Presentation
Quick Leasing  PresentationQuick Leasing  Presentation
Quick Leasing Presentation
 
CliftonScottResume
CliftonScottResumeCliftonScottResume
CliftonScottResume
 
Postimpresjonismen
PostimpresjonismenPostimpresjonismen
Postimpresjonismen
 
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...
Instrumentos de evaluación, por solución de problemas reactivos de verdadero ...
 
Toma de desiciones
Toma de desicionesToma de desiciones
Toma de desiciones
 

More from Helene Fosse (20)

K12
K12K12
K12
 
K06
K06K06
K06
 
K08
K08K08
K08
 
K09
K09K09
K09
 
K11
K11K11
K11
 
K05
K05K05
K05
 
K04
K04K04
K04
 
K02 (1)
K02 (1)K02 (1)
K02 (1)
 
K01
K01K01
K01
 
Digitalismen
DigitalismenDigitalismen
Digitalismen
 
Postimpresjonismen
PostimpresjonismenPostimpresjonismen
Postimpresjonismen
 
Impresjonismen
ImpresjonismenImpresjonismen
Impresjonismen
 
Romantikk og realisme
Romantikk og realismeRomantikk og realisme
Romantikk og realisme
 
Roma
RomaRoma
Roma
 
Rokokko og klassisisme
Rokokko og klassisismeRokokko og klassisisme
Rokokko og klassisisme
 
Renessansen 2
Renessansen 2Renessansen 2
Renessansen 2
 
Renessansen 1
Renessansen 1Renessansen 1
Renessansen 1
 
Oppsummering
OppsummeringOppsummering
Oppsummering
 
Middelalder
MiddelalderMiddelalder
Middelalder
 
Impresjonismen
ImpresjonismenImpresjonismen
Impresjonismen
 

K10

  • 1. SQL HiA DAT 2800 Databaser I Flerbrukerproblematikk
  • 2. SQL HiA Flerbrukersystem Client / Server DatabaseDBMSDBMS Application_2Application_2 SQL-Request Data Application_3Application_3 Application_1Application_1 Client Server
  • 3. SQL HiA Database-sider (Pages) Physical Page No 1 1024 bytes total Physical Page No 1 1024 bytes total Physical Page No 2 1024 bytes total Physical Page No 2 1024 bytes total Physical Page No 3 1024 bytes total Physical Page No 3 1024 bytes total ….. Logical File Offset 0 1023 1024 2047 2048 3071 c:centura<DatabaseName>.dbs
  • 4. SQL HiA Lister av ulike typer database-sider 1 Page Group Log Prior Next Type No Ptr Page Page Data 3 1 0 7 1st page in product table 7 Page Group Log Prior Next Type No Ptr Page Page Data 3 2 1 19 2nd page in product table Database-sider deles inn i grupper. Sider innen samme gruppe lenkes sammen i dobbelt-lenkede lister. Hoved-grupper av database-sider: Data Index Control Logisk nummerering (1, 2, …) av sider innen samme gruppe
  • 5. SQL HiA Grupper av database-sider Data pages Selve dataene i databasen Row pages Tabell-rader Extent Pages Kolonner som ikke får plass i Row pages Long VarChar pages Long VarChar kolonner Overflow pages Plassmangel ved clustered hashing Designed overflow pages Preallokering ved clustered hashing Dynamically created overflow pages Designed overflow page full Index pages Inneholder B+ -tre indekser Control pages Generelle kontroll-opplysninger Database control block Versjonsnr, log-info, ... Free extent list Liste av ikke-allokerte pages Group free page list Gruppe-allokerings info (B+ -tre) Group extent map Log pages --> Physical pages info Bitmap pages Freespace info for hver tabell Row count page Antall rader pr tabell Table data page Siste rad serial nr, page nr for siste rad, tabell størrelse, antall overflow pages.
  • 6. SQL HiA Row Pages 1 Page Group Log Prior Next Type No Ptr Page Page Data 3 1 0 7 Row Page 1st page in product table 7 Page Group Log Prior Next Type No Ptr Page Page Data 3 2 1 19 Row Page 2nd page in product table 8 Skrivebord 2.700 Tabell-rad Plasseres i en såkalt Slot i en database-side av type Data Row Page
  • 7. SQL HiA Row Pages Page HeaderPage Header Row Page HeaderRow Page Header FreespaceFreespace Page FooterPage Footer Slot Table Slot 5 Slot 4 Slot 3 Slot 1Slot 2
  • 8. SQL HiA Row Pages Page HeaderPage Header Row Page HeaderRow Page Header Physical Page No. Physical Page No. Page Type Page Type Group No. Group No. Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Slot Size Free Space Free Space Extent Page No. Extent Page No. FreespaceFreespace Slot Table Entry 1 Entry 2 Entry 3 Page Footer Log PointerPage Footer Log Pointer Slot 5 Slot 4 Slot 3 Slot 1Slot 2 Entry 4 Entry 5 Row Header Row Serial No. Update Serial No. Nbr Columns 1 4 Berg 2 8 Grimstad 3 7 Snekker Col ID Lengde Data Slot 3 First Bit: Empty/Full Peker til log-fil som inneholder info om før/etter-situasjon ved evnt endringer. Sikkerhet ved 512 byte lagring
  • 9. SQL HiA Row Header Row Serial No. Entydig identifikator til en rad i en tabell. Tilordnes sekvensielt ved innsetting (1,2,…). Update Serial No. Entydig identifikator til en rad i en tabell i en felles UPDATE / INSERT. Tilordnes sekvensielt (1,2,…). Benyttes til UPDATE-tap ved Cursor Stabilitet (CS) og Release Lock (RL) isolasjonsnivå, samt uendelig UPDATE / INSERT loop. Eks: UPDATE TABLE Y Set x = x + 1 WHERE x > 10
  • 10. SQL HiA RowID - Entydig rad-identifikator RowIDRowID Page No. Fysisk sidenummer hvor raden befinner seg. Slot No. Slot nummer innen siden hvor raden befinner seg. Row Serial No. Insert row serie nummer. Entydig. Tilordnes ved innsetting. Endres aldri. Benyttes aldri pånytt. Update Serial No. Update row serie nummer. Endres ved Update. Benyttes for å gjenfinne en tabell-rad fra databasen Verifiserer hvorvidt raden fortsatt okkuperer denne lokasjonen eller er slettet og eventuelt erstattet av en annen rad Verifiserer eventuell oppdatering av raden
  • 11. SQL HiA RowID RowID SNr Navn PNr CAAD 5 Nilsen 5002 BACV 2 Olsen 6400 ERCB 1 Hansen 9000 EADD 4 Berg 6400 Selger (ID = SNr) SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Selger (ID = SNr) Et eksempel på en 3NF-tabell Selger med tre kolonner SNr, Navn og PNr RowID er en ekstra kolonne i hver tabell som alltid kommer i tillegg til de kolonnene vi eksplisitt definerer. RowID er entydig for hver rad og fungerer som en slags identifikator.
  • 12. SQL HiA Extent Pages Page HeaderPage Header Row Page HeaderRow Page Header Physical Page No. 3 Physical Page No. 3 Page Type ROW Page Type ROW Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Slot Size Free Space Free Space Extent Page No. 7 Extent Page No. 7 Slot Table Slot 2 Page HeaderPage Header Row Page HeaderRow Page Header Physical Page No. 7 Physical Page No. 7 Page Type EXTENT Page Type EXTENT Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Slot Size Free Space Free Space Extent Page No. 15 Extent Page No. 15 Slot Table Slot 2 Inneholder kolonner som ikke får plass i opprinnelig Row Page
  • 13. SQL HiA Long VarChar Pages Page HeaderPage Header Row Page HeaderRow Page Header Physical Page No. 3 Physical Page No. 3 Page Type ROW Page Type ROW Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Slot Size Free Space Free Space Extent Page No. 1014 Extent Page No. 1014 Slot Table Slot 2 Page HeaderPage Header Row Page HeaderRow Page Header Physical Page No. 7 Physical Page No. 7 Page Type LONG Page Type LONG Group No. 20 Group No. 20 Logical Page No. Logical Page No. Previous Page No. Previous Page No. Next Page No. Next Page No. Log Pointer Log Pointer Slot Size Slot Size Free Space Free Space Extent Page No. 1015 Extent Page No. 1015 Slot Table Slot 2 Long VarChar kolonner plasseres i egne Long Pages
  • 14. SQL HiA Overflow Pages - Designed Overflow Pages Page 1 Page 1 Page 2 Page 2 Page 3 Page 3 Page N Page N... Page 1 Page 1 Page 2 Page 2 Page 3 Page 3 Page N Page N... Avsettes plass til eventuelle overløps-rader for hver N page
  • 15. SQL HiA Overflow Pages - Dynamically Created Overflow Pages Page 1 Page 1 Page 2 Page 2 Page 3 Page 3 Page N Page N... Page 1 Page 1 Page 2 Page 2 Page 3 Page 3 Page N Page N... Hvis et ikke er plass til overløps-poster i Designed Overflow Pages, opprettes dynamiske overløps-sider.
  • 16. SQL HiA Indekser • B-Trær Indeks bygget opp som tre-struktur. Benyttes både på primary keys og foreign keys. • Hash-tabeller Nøkkel-tranformering. Benyttes typisk på primary key (ID). Clustered Index: Bestemmer fysisk rekkefølge på data i database-tabeller. Kun en clustered index pr tabell. Må alltid lages før non-clustered index. Må alltid lages før data plasseres i tabellen.
  • 17. SQL HiA CREATE INDEX Oppretter en indeksOppretter en indeks EATE INDEX index name UNIQUE CLUSTERED HASHED , table name ( column name ) ASC DESC CTFREE integer constant SIZE integer value ROWS BUCKET Max size = 6 + number of + sum of <= 255 columns in length of all index columns in index
  • 18. SQL HiA CREATE INDEX - Eksempel CREATE UNIQUE CLUSTERED HASHED INDEX hSNdx ON Selger (SNrID) SIZE 100 ROWS CREATE UNIQUE INDEX Bidndx ON Bedrift (BedriftsID) CREATE INDEX BnNdx ON Bedrift (BedriftsNavn) CREATE INDEX SNavnNdx ON BEDRIFT (@UPPER(Navn))
  • 19. SQL HiA Clustered Index / Non-Clustered Index Index Data Clustered Non-Clustered
  • 20. SQL HiA Indekser i form av trestruktur …..
  • 21. SQL HiA Binært tre 4242 818177 Søk etter tallet 15 Hver node inneholder maksimum 2 barn. Minimum-høyden av et binært tre som inneholder N noder er [log2N] + 1. Eks: Et tre med 100 noder vil ha minst 7 nivåer.
  • 22. SQL HiA Multiway tre 42 8142 81 95 10795 1077 247 24 Søk etter tallet 15 Hver node inneholder N antall nøkler (keys) (her 2). Færre nivåer enn binære trær og lavere gjenfinningstid. Balanserings-algoritmene er komplekse. 50 6150 61
  • 23. SQL HiA B-tre Et B-tre er et balansert multiway tre med følgende endring: Hver node trenger ikke nødvendigvis inneholde nøyaktig N keys. Noder kan vokse fra halv-full til full. Dette reduserer balanserings-algoritmene og er derfor ressurssparende.
  • 24. SQL HiA B-Trær Et B-Tre av orden m er definert ved følgende: - Roten er enten et løv eller har minst to barn - Alle intermediære noder har: Antall key i intervallet [m, 2m] Antall barn i intervallet [m+1, 2m+1] - Alle løv befinner seg på samme nivå 12 15 25 31 41 59 91 21 48 72 1-4-8-11 12-13 15-18-19 21-24 25-26 31-38 41-43-46 48-49-50 59-68 72-78 84-88 91-92-99 84 Eks: B-tre av orden 3 Løv Database
  • 25. SQL HiA B-trær Eks: Innsetting i et B-tre (1) 8,11,12 16,17 41,5222,23,31 58,59,61 16:- 41:58 22:- Løv Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn
  • 26. SQL HiA B-trær Eks: Innsetting i et B-tre (2) 8,11,12 16,17,18 41,5222,23,31 58,59,61 16:- 41:58 22:-
  • 27. SQL HiA B-trær Eks: Innsetting i et B-tre (3) 1,8 11,12 41,5222,23,31 58,59,61 11:16 41:58 22:- 16,17,18
  • 28. SQL HiA B-trær Eks: Innsetting i et B-tre (4) 1,8 11,12 41,5222,23,31 58,59,61 11:16 41:58 22:- 16,17 18,19
  • 29. SQL HiA B-trær Eks: Innsetting i et B-tre (5) 1,8 11,12 41,5222,23,31 58,59,61 11:- 41:58 16:22 16,17 18,19 18:-
  • 30. SQL HiA B-trær Eks: Innsetting i et B-tre (6) 1,8 11,12 41,5222,23 58,59,61 11:- 41:58 16:22 16,17 18,19 18:- 28,31
  • 31. SQL HiA B-trær Eks: Innsetting i et B-tre (7) 1,8 11,12 41,5222,23 58,59,61 11:- 58:- 16:22 16,17 18,19 18:- 28,31 28:-
  • 32. SQL HiA B-trær Eks: Innsetting i et B-tre (8) 1,8 11,12 41,5222,23 58,59,61 11:- 58:- 22:- 16,17 18,19 18:- 28,31 28:- 16:- 41:-
  • 33. SQL HiA B+ -tre • Alle pekere til databasefil fjernes fra index-nodene • Alle key-verdier lagres i løvene uavhengig av hvorvidt de eksisterer i index-nodene. • Løv noder er lenket sammen i en liste kalt sekvens-settet. B-tre er optimalt mht aksess til single-record, men ineffektivt mht sekvensiell prosessering. B+ -tre skiller seg fra B-tre ved:
  • 34. SQL HiA Prefix B+ -tre Prefix B+-tre er et B+-tre hvor kun den delen av Key som er nødvendig mht entydighet lages i index-nodene. Avkortede Key-verdier SQLBase benytter Prefix B+ -tre
  • 35. SQL HiA Hashing / Nøkkel-transformering / Randomisering Hashing Key Transformed Key
  • 37. SQL HiA Nøkkel-transformering 6 4 7 2 1 KundeNr TverrSum Distrikt
  • 38. SQL HiA Nøkkel-transformering 6 4 7 2 3 KundeNr Siste siffer i tverrsummen av siste siffer i produktene 6 4 7 2 1 2 3 4 6 8 21 8 KundeNr Vekttall Produkt
  • 39. SQL HiA Nøkkel-transformering 32191 51877 77638 PNr ID PNr = ID En-entydig sammenheng mellom PNr (Postnummer) og ID 32191 51877 77638 Ubenyttet 1 … 10000
  • 41. SQL HiA Nøkkel-tranformering - Folding Nøkkel- transformering ID = 29384756 PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6 7 6 9 4 7 7 0 + + 1
  • 42. SQL HiA Nøkkel-transformering - Divisjon-rest-metoden Nøkkel- transformering ID = 29384756 PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6 : 9 9 7 1 7 5
  • 43. SQL HiA Nøkkel-tranformering - Uheldig tranformering HSize = 10000 KeySize = 8 HValueMax = 8 * 127 = 1016 1016 10000 Tranformering av hvert tegn i Key til tilhørende ordinal-verdi:
  • 44. SQL HiA Ulike nøkkel-transformeringer int Hash1(char* Key, int HSize) { return ((int)Key[0] + (int)Key[1] + (int)Key[2]) % HSize; } Transformed Key Data Key int Hash2(char* Key, int HSize) { return ((int)Key[0] + 27 * (int)Key[1] + 729 * (int)Key[2]) % HSize; }
  • 45. SQL HiA Ulike nøkkel-transformeringer [ ]Key KeySize i i i KeySize − = − ∑ *32 0 1 int Hash3(char* Key, int KeySize, int HSize) { int HashVal; HashVal = (int)Key[0]; for(int i = 1; i < KeySize; i++) HashVal = HashVal*32 + (int)Key[i]; HashVal = HashVal % Hsize; return HashVal; } Transformed Key Data Key
  • 46. SQL HiA Hashing a key to a database page - SQLBase 1. Transformer symbolsk key ved å la hvert tegn bli representert ved tilhørende ASCII-verdi. Deretter transformeres denne ASCII-verdien som vist nedenfor til et såkalt binært fullword (4 bytes). 1A. Del ASCII-key inn i 4-byte enheter. 1B. XOR alle 4-byte enhetene sammen til et 4-byte resultat (ingen key-del blir borte). 1C. Utfør bitwise complement (fjerner event. bias) 2. Transformer resultatet fra 1 (binary fullword) til et heltall i side-intervallet ved å ta divisjonsresten med minste primtall som er større enn eller lik antall sider. 3. Transformer output fra 2 til en fysisk side adresse ved å legge til start side-nummer for for første rad i tabellen.
  • 47. SQL HiA Hashing a key to a database page - SQLBase - Eks 1. 9 3 0 5 E J S M --> 57 51 48 53 69 74 83 77ASCII 1A. Key1 = 57 51 48 53 Key2 = 69 74 83 77 1B. Key1 = 0011 1001 0011 0011 0011 0000 0011 0101 XOR Key2 = 0100 0101 0100 1010 0101 0011 0100 1101 ------------------------------------------------------------------------- = xKey = 0111 1100 0111 1001 0110 0011 0111 1000 = 124 121 99 120 ASCII 1C. ~xKey = 1000 0011 1000 0110 1001 1100 1000 0111 = 131 134 156 135 ASCII bfKey = 2206637191 (fullword key) 2. Page Adresses 0 - 1752 (1753 hash buckets) 2206637191 MOD 1753 = 1110 3. Første side-adresse for tabellen er 60 => Side-adresse = 1110 + 60 = 1170
  • 48. SQL HiA Flerbrukersystem Client / Server DatabaseDBMSDBMS Application_2Application_2 SQL-Request Data Application_3Application_3 Application_1Application_1 Client Server
  • 49. SQL HiA Update tap i flerbrukersystem uten lås SELECT Count FROM Products ... Answer: 139 UPDATE Products SET Count = 39 SELECT Count FROM Products ... Answer: 139 UPDATE Products SET Count = 14 MID PID Count ... ACI 41 139 ... MID PID Count ... ACI 41 39 ... MID PID Count ... ACI 41 14 ... Accept Order for 100 Accept Order for 125 Joe’s Program Products Table Mary’s Program
  • 50. SQL HiA Commit / Rollback problem i flerbrukersystem uten lås SELECT Count FROM Products ... Answer: 139 UPDATE Products SET Count = 39 SELECT Count FROM Products ... Answer: 39 MID PID Count ... ACI 41 139 ... MID PID Count ... ACI 41 39 ... MID PID Count ... ACI 41 139 ... Accept Order for 100 Refuse Order for 125 Joe’s Program Products Table Mary’s Program ROLLBACK
  • 51. SQL HiA Inkonistens problem i et flerbrukersystem uten lås DELETE FROM Orders WHERE ... SELECT * FROM Orders OrderNr Amount 112961 $31.500 113012 $03.745 UPDATE Program Orders Table Report Program OrderNr Amount 112961 $31.500 113012 $03.745 OrderNr Amount 112961 $31.500 113012 $03.745 113102 $05.000 Answer: 112961 $31.000 Answer: 113012 $03.745 INSERT INTO Orders VALUES (113102, $05.000) COMMIT Answer: 113102 $05.000
  • 52. SQL HiA Låse-mekanismer UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT ... FROM Offices COMMIT Orders Offices Products U U U Ok L A L B Ok Ok L A Wait Ok Ok Ok U U Ok L B U U Ok n A DBMS Transaction
  • 53. SQL HiA Shared Lock / Exclusive Lock Unlocked Shared Lock Exclusive Lock Unlocked Shared Lock Exclusive Lock Ok Ok Ok Ok Ok No Ok No No Transaction B Transaction A S-lås Shared Lock Settes på database-siden når en bruker leser (SELECT) fra databasen. X-lås Exclusive Lock Settes på database-siden når en bruker skal gjøre en oppdatering (UPDATE), sletting (DELETE) eller innlegging av nye data (INSERT). SQLBase opererer med låsing av database-sider (pages) som hver er på 1 K. En database-side kan kun inneholde rader fra en tabell.
  • 54. SQL HiA Shared Lock / Exclusive Lock UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT ... FROM Offices COMMIT Orders Offices Products U U U Ok EL A EL B Ok Ok SL A SL A,B Ok Ok SL A U Ok Ok EL A Ok U U n A DBMS Transaction SL = Shared Lock EL = Exclusive Lock
  • 55. SQL HiA Dead Lock UPDATE Orders UPDATE Products Orders Products U U Ok EL A EL B Ok W Ok W n A DBMS Transaction SL = Shared Lock EL = Exclusive Lock UPDATE Products UPDATE Orders
  • 56. SQL HiA Låse-mekanismer • Database • Tabell • Side (Page) 1-2-4-16 K • Rad • Kolonne Låse-mekanismer kan benyttes på følgende nivåer: Økende parallell-prosessering. Økende kompleksitet. SQLBase låser sider (pages) på 1K
  • 57. SQL HiA Database access cycle Connect Database operations Disconnect Prepare (Compile) Execute Fetch (for a SELECT) Select, Insert, Update, Delete, ...
  • 58. SQL HiA Connect / Disconnect SqlDatabase DEMO SqlUser SYSADM SqlPassword SYSADM SqlConnect SqlDisconnect Predefinerte variable Default-verdier Centura-funksjoner
  • 59. SQL HiA Connect / Disconnect Eksempel Global Declarations … Variables Sql Handle: hSql Boolean: bConnect ... On SAM_AppStartup Set SqlDatabase = ‘Handel’ Set SqlDatabase = ‘BrukerA’ Set SqlPassword = ‘PBrA’ Set bConnect = SqlConnect ( hSql ) On SAM_AppExit If bConnect Call SqlDisconnect ( hSql )
  • 60. SQL HiA SqlHandle Name of DbConnectionName of DbConnection Sql Handle: hSql Row Position in Result SetRow Position in Result Set Input message bufferInput message buffer Output message bufferOutput message buffer Work Space in Memory
  • 61. SQL HiA Compiling and Exexuting SQL statements SqlPrepare : Kompilerer et SQL statement SqlExecute : Eksekverer et SQL statement SqlPrepareAndExecute : Kompilerer og eksekverer et SQL statement
  • 62. SQL HiA SELECT 1. Prepare (compile) SELECT statement 2. Execute SELECT statement 3. Benytt SqlFetch… for å hente en rad inn i INTO variable SqlFetchNext Henter neste rad i et resultatsett SqlFetchPrevious Henter forrige rad i et resultatsett SqlFetchRow Henter en gitt rad i et resultatsett SqlGetResultSetCount Returnerer antall rader i et resultatsett SqlSetResultSet Setter resultatsett mode på/av for gitt SqlHandle. Følgende sletter et resultatsett: - Kompilering av et annet SQL statement for samme SqlHandle - Commit / Rollback hvis DBP_PRESERVE er av for denne SqlHandle
  • 63. SQL HiA Fetch-indikatorer FETCH_Delete FETCH_EOF FETCH_Ok FETCH_Update Raden er slettet siden forrige henting Ingen flere rader kan hentes Henting Ok Raden er endret (Update) siden forrige henting SqlFetchNext ( hSql, nFetch ) SqlFetchPrevious ( hSql, nFetch ) SqlFetchRow ( hSql, nRow, nFetch )
  • 64. SQL HiA SqlImmediate SqlImmediate SqlConnect SqlPrepare SqlExecute SqlFetchNext (SELECT) SqlClearImmediate Connect en intern SqlHandle, Prepare and Execute a SQL Statement. Disconnect SqlHandle fra SqlImmediate
  • 65. SQL HiA Funksjoner for database-parametre Set / Get SqlSetParameter Setter databaseparametre SqlSetParameterAll Setter databaseparametre SqlSetInMessage Setter størrelse på InputMessageBuffer (1-32K) SqlSetIsolationLevel Setter isolasjonsnivå i tilknytning til S-lås SqlSetLockTimeout Setter ventetid (-1,0,1…1800s) SqlSetOutMessage Setter størrelse på OutputMessageBuffer (1-32K)
  • 66. SQL HiA DBP_* parametre DBP_AUTOCOMMIT On: Automatisk Commit ved SQL-statem. DBP_BRAND Ulike databaser (DBV_BRAND_SQL, …) DBP_FETCHTHROUGH On: Henter rader direkte fra datab.server DBP_LOCKWAITTIMEOUT Tall som viser ventetid (-1,0,1…1800s) DBP_NOPREBUILD On: Ingen prebuild av resultatsett ved ResultSetMode og RL. S-lås settes på gjeldende side. DBP_PRESERVE On: Bevarer resultatsett ved Commit DBP_ROLLBACKONTIMEOUT On: Rollback ved timeout DBP_VERSION Database server versjon
  • 67. SQL HiA DBP_BRAND DBV_BRAND_ALLBASE Hewlett-Packard ALLBASE DBV_BRAND_AS400 IBM AS/400 DBV_BRAND_CINCOM-SUPRA Cincom Supra DBV_BRAND_DB2 IBM DB2 DBV_BRAND_INFORMIX Informix DBV_BRAND_INFORMIX-ONLINE Informix Online DBV_BRAND_ORACLE Oracle DBV_BRAND_ORACLE7 Oracle v.7 DBV_BRAND_OS2EE IBM OS/2 EE DBV_BRAND_SQL SQLBase DBV_BRAND_SYBASE SQL Server
  • 68. SQL HiA DBP_LOCKWAITTIMEOUT Verdi Beskrivelse 1-1800 Ventetid for en lås ( 1 sek - 30 min, 300 s default ) -1 Vent for evig 0 Ingen venting
  • 69. SQL HiA Input / Output Message Buffer (as seen from Client) DatabaseDBMSDBMS ApplicationApplication SQL-Request Data Input Message BufferInput Message Buffer Input Message BufferInput Message Buffer Output Message BufferOutput Message Buffer hSql1 hSql2 Input Message BufferInput Message Buffer Output Message BufferOutput Message Buffer Input Message BufferInput Message Buffer Output Message BufferOutput Message Buffer hSql1 Input Message BufferInput Message Buffer Output Message BufferOutput Message Buffer Application 1 Application 2 Output Message BufferOutput Message Buffer
  • 70. SQL HiA Resultatsett DatabaseDBMSDBMS ApplicationApplication SQL-Request Data SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 SNr Navn PNr 5 Nilsen 5002 2 Olsen 6400 1 Hansen 9000 4 Berg 6400 Tabellen Selger SNr Navn PNr 2 Olsen 6400 4 Berg 6400 Resultatsett Client Server Fetch
  • 71. SQL HiA Resultatsett Et resultatsett er en temporær indeks, av og til assosiert med en temporær tabell (ved beregn. eller kompl. søk) som inneholder data som representerer resultatet av et SELECT-statement ved spesielle komplekse spørringer. Innholdet i resultatsettets løvsider er pekere (ROWIDs) til rader i tabeller som tilfredsstiller SELECT-statementet. ….. RowID
  • 72. SQL HiA RowID SELECT …..SELECT ….. Resultat-sett av løv-pekere Resultat-sett av løv-pekere RowID 1 RowID 2 RowID 3 ... RowID 1 RowID 2 RowID 3 ... Resultat-sett av temporær tabell-data Resultat-sett av temporær tabell-data ….. ….. ….. ….. ….. ….. ….. …..
  • 73. SQL HiA Resultatsett - RowID - Single tabell Resultat-sett av løv-pekere Resultat-sett av løv-pekere AABC AABE AABC AABE ROWID SNr Navn PNr AABB 5 Nilsen 5002 AABC 2 Olsen 6400 AABD 1 Hansen 9000 AABE 4 Berg 6400 Selger (ID = SNr) SELECT SNr, Navn FROM Selger WHERE PNr = 6400
  • 74. SQL HiA Resultatsett - RowID - Join Resultat-sett av løv-pekere Resultat-sett av løv-pekere ROWID SNr Navn PNr AABB 5 Nilsen 5002 AABC 2 Olsen 6400 AABD 1 Hansen 9000 AABE 4 Berg 6400 Selger (ID = SNr) SELECT Selger.SNr, Selger.Navn, Selger.PNr, Adr.Sted FROM Selger, Adr WHERE Selger.PNr = Adr.PNrID AND Selger.PNr = 6400 ROWID PNrID Sted GGHA 5002 Bergen GGHB 6400 Molde GGHC 9000 Tromsø Adr (ID = PNr) Selger-RowID Adr-RowID -------------------------------------- AABC GGHB AABE GGHB
  • 75. SQL HiA Resultatsett - RowID - Beregnede verdier Resultat-sett av RowID til tmpTbl Resultat-sett av RowID til tmpTbl ROWID SNr Navn PNr AABB 5 Nilsen 5002 AABC 2 Olsen 6400 AABD 1 Hansen 9000 AABE 4 Berg 6400 Selger (ID = SNr) SELECT Selger.SNr, Selger.Navn, SUM(Mg) FROM Selger, Salg WHERE Selger.SNrID = Salg.SNrID GROUP BY Selger.SNr, Selger.Navn XXAA XXAB XXAC XXAD ROWID SNr VNr Mg YYAA 5 8 30 YYAB 2 1 20 YYAC 2 3 10 YYAD 1 5 50 YYAE 1 8 40 YYAF 4 1 70 YYAG 4 3 50 YYAH 4 5 20 Salg (ID = SNr + VNr) RowIDSNrID Navn Sum(Mg) -------------------------------------------- XXAA 1 Hansen 90 XXAB 2 Olsen 30 XXAC 4 Berg 140 XXAD 5 Nilsen 30 Temporær tabell med resultat-rader
  • 76. SQL HiA Sletting av Resultat-sett Resultat-sett slettes vanligvis ved: - Eier cursor/sqlHandle disconnectes - Eier cursor/sqlHandle rekompilerer SELECT-statementet. - Transaksjonen utfører COMMIT eller ROLLBACK. - Transaksjonen endrer gjeldende isolation mode. Hvis cursor context preservation er satt på, gjelder følgende endringer fra regelen ovenfor: - COMMIT sletter ikke resultatsettet - ROLLBACK sletter ikke resultatsettet ved RL isolation level og ikke bruk av DDL. bOk = SqlSetParameter ( hSql, DBP_PRESERVE, TRUE, ‘‘ )
  • 77. SQL HiA X-lås / S-lås X-lås Settes alltid automatisk ved INSERT, UPDATE eller DELETE (DML). Varigheten er inntil COMMIT/ROLLBACK. S-lås Settes alltid ved SELECT (DQL). Varigheten er avhengig av programmert isolasjons-nivå, men slippes alltid ved COMMIT/ROLLBACK. Typen av isolasjons-nivå har innvirkning på andre brukeres tilgang til databasen og tidsgyldigheten av resultatsettet. Låser implementeres i SQLBase vha en intern HashTabell.
  • 78. SQL HiA Isolation Level - Consistency / Concurrency RR (Read Repeatability) Alle sider som brukeren aksesserer (Fethed) er låst for andre inntil commit på transaksjonen. Garanterer lese-konsistens, men forårsaker mye venting. Default. CS (Cursor Stability) Kun den siden som i øyeblikket prosesseres (Fetched) blir låst. En rad om gangen blir sendt til output message buffer på serveren og over nettverket til klienten. Forårsaker større nettverkstrafikk. Rader i resultatsettet kan bli endret av andre. RO (Read Only) Kun leseadgang. Ingen låser settes. Ved lesing av en side med lås, leses history-fil(er). RL (Release Locks) Slipper låsen med en gang resultatsettet er ferdig generert. Gir andre brukere gode aksesseringsmuligheter. Ved fetch settes en S-lås (i tilfelle av en uncommited update fra en annen transaksjon), men slippes straks etter fetch. 4 isolasjons-nivåer: Gjelder for alle cursors i en transaksjon
  • 79. SQL HiA Isolation Level bok = SqlSetIsolationLevel ( hSql, sIsolationLevel ) sIsolationLevel = RR CS RO RL RR (Read Repeatability er default). Isolation Level som settes gjelder for alle cursors i transaksjonen for denne brukeren. Endring av Isolation Level medfører en implisitt Commit.
  • 80. SQL HiA RR - Read Repeatability RR (Read Repeatability) Alle sider som brukeren aksesserer er låst for andre inntil commit på transaksjonen. Garanterer lese-konsistens, men forårsaker mye venting. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås S-lås Resultatsett Database sider (pages) S-lås
  • 81. SQL HiA CS - Cursor Stability CS (Cursor Stability) Kun den siden som i øyeblikket prosesseres (Fetched) blir låst. En rad om gangen blir sendt til output message buffer på serveren og over nettverket til klienten. Forårsaker større nettverkstrafikk. Rader i resultatsettet kan bli endret av andre. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås Resultatsett Database sider (pages) Fetch
  • 82. SQL HiA RO - Read Only RO (Read Only) Kun leseadgang. Ingen låser settes. Ved lesing av en side med lås, leses history-fil(er). xx Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Lås fra annen bruker Resultatsett Database sider (pages)
  • 83. SQL HiA RL - Release Locks RL (Release Locks) Slipper låsen med en gang resultatsettet er ferdig generert. Gir andre brukere gode aksesseringsmuligheter. Ved fetch settes en S-lås (i tilfelle av en uncommited update fra en annen transaksjon), men slippes straks etter fetch. Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 S-lås som slippes straks resultatsettet er ferdig generert Resultatsett Database sider (pages) Fetch S-lås settes ved Fetch-operasjon (pga evnt uncommited update), men slippes straks etter.
  • 84. SQL HiA FetchThrough bOk = SqlSetParameter ( hSql, nParameter, nNumber, sString ) Syntaks bOk = SqlSetParameter ( hSqlA, DBP_FETCHTHROUGH, TRUE, ‘‘ ) Eksempel Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Resultatsett Database sider (pages) Fetch DBP_FETCHTHROUGH
  • 85. SQL HiA Isolation Level Isolation LevelIsolation Level Locks (S-Locks)Locks (S-Locks) Data ConsistencyData Consistency RRRR Lås holdes gjennom hele transaksjonen. Mer enn en side kan være låst. CSCS Lås holdes kun på den siden som inneholder gjeldende rad. RORO RLRL Ingen lås. Ingen INSERT, UPDATE, DELETE. Lås slippes straks ved end-of-fetch (når resultatsettet er ferdig generert). User ConcurrencyUser Concurrency Høy Lav Middels Middels Høy Høyest Lav Høy
  • 86. SQL HiA Data Consistency - User Concurrency Data Consistency User Concurrency RO RR CS RL RO
  • 87. SQL HiA Kriterier for valg av Isolation Level 1. Buffere : Hvor kritisk er gjenfinningshastigheten (performance) i applikasjonen? Hvis kritisk performance, velg et isolasjonsnivå hvor input message buffer på server fylles helt med rader før oversending til client (unngå CS). 2. Contention : Hvis det forventes at mange brukere samtidig vil aksessere de samme sidene, ikke velg et isolasjonsnivå hvor S-låser plasseres på alle leste data inntil commit / rollback. 3. Update : Vil brukere i stor utstrekning benytte insert/update/delete? I så fall, velg et isolasjonsnivå som tillater disse operasjonene. 4. Consistency : Er konstistente data gjennom applikasjonen viktig? Hvis det er viktig at dataene vil beholde de samme verdiene inntil transaksjonen avsluttes, velg et isolasjonsnivå som holder S-lås inntil commit eller avslutt.
  • 88. SQL HiA Isolation Level - Kriterier Isolation LevelIsolation Level Kriterie 1 Buffere Kriterie 1 Buffere RRRR JaJa Kriterie 2 Contention Kriterie 2 Contention Kriterie 3 Update Kriterie 3 Update Kriterie 4 Consistency Kriterie 4 Consistency CSCS RORO RLRL NeiNei JaJa JaJa NeiNei JaJa JaJa JaJa JaJa JaJa NeiNei JaJa JaJa NeiNei JaJa NeiNei
  • 89. SQL HiA Flerbruker-teknikk 1. Benytt Release Locks (RL) isolation level. 2. Benytt ROWID valideringsteknikk i tilknytning til UPDATE og DELETE. 3. Ikke endre DBP_NOPREBUILD fra default verdi (off). Anbefaling ved SQLBase flerbrukerteknikk:
  • 90. SQL HiA Fetch / Update av resultatsett rader i SQLBase (1) SqlFetchNext ( hSql, nFetch ) SqlFetchPrevious ( hSql, nFetch ) SqlFetchRow ( hSql, nRow, nFetch ) Row 1 Row 2 Row 3 Row 4 Row 1 Row 2 Row 3 Row 4 Slot Slot RowSerialNr RowUpdateSerialNr Fetch rRowID 1 2 3 Les Page Les nBit1 for DeleteTest 4 Les Row (med pRowID) fra Page for test på Delete/Insert (RowSerialNr) og Update (RowUpdateSerialNr) Resultatet fra testene ovenfor returneres gjennom nFetch nFetch = FETCH_Delete Slettet siden forrige henting FETCH_EOF Slutten / Begynnelsen av resultatsettet FETCH_Ok Henting ok, raden er ‘korrekt’ FETCH_Update Oppdatert siden forrige henting Page Row ResultatSett
  • 91. SQL HiA Fetch av resultatsett rader i SQLBase (2) Les rRowID i ResultatSett rad Les Page ved å ved å benytte PageNumber i rRowID Les nBit1 i SlotTable ved å benytte SlotKomponent i rRowID IF nBit1 = 0 Row er slettet (av annen bruker) ELSE Les Row fra Page ved å benytte offset i SlotTable. Les pRowID IF RowSerialNumber(pRowID) != RowSerialNumber(rRowID) Raden er slettet og gjenbrukt av annen rad ELSE IF RowUpdateSerialNumber(pRowID) != RowUpdateSerialNumber(rRowID) Raden er endret ELSE Raden i ResultatSett og Page er identiske
  • 92. SQL HiA RowID validitering StartStart OkOk Prepare / Execute Select.Prepare / Execute Select. RowID Ok RowID Ok Changed-row processing Changed-row processing EndEnd FetchRowsFetchRows User changes a rowUser changes a row Prepare / Execute a DMLPrepare / Execute a DML Error processing Error processing CommitCommit No No YesYes
  • 93. SQL HiA SQL Error nError = SqlError (hSql) Returnerer siste gjeldende error kode for gitt sqlhandle. nError = 0 ved ingen sql-error. bOk = SqlErrorText (nError, nType, strError, nLength, nRealLength) Henter feilmelding fra ERROR.SQL for gitt nError. nError : Gitt error nType : SQLERROR_Reason Error code reason SQLERROR_Remedy Error message strError : Begrunnelse eller message tekst nLength : Maksimal lengde av strError nRealLength: Aktuell lengde av strError bOk = SqlGetErrorText ( nError, strText) Returnerer error fra ERROR.SQL for gitt nError. bOk = SqlGetError (hSql, nError, strErrorString) Slår av backend error mapping og returnerer real backend error. Samme som SqlError og SqlGetErrorText ved SQLBase. bOk = SqlGetErrorPosition (hSql, nPos) Returnerer offset error-posisjon i gitt SQL-statement.
  • 94. SQL HiA SQL Error bOk = SqlExtractArgs (wParam, lParam, hSql, nError, nPos) Ekstraherer error-informasjon fra SAM_SqlError argumentene wParam og lParam. wParam: Verdien av wParam argument i SAM_SqlError lParam : Verdien av lparam argument i SAM-SqlError hSql : Receive Sql Handle. Centura bestemmer denne fra wParam. nError : Receive Error Number. Centura bestemmer denne verdien fra low-order word i lParam. nPos : Receive Error Position Number (offset innen SQL-statement). Centura bestemmer denne verdien fra high-order word i lParam.
  • 95. SQL HiA SQL Error Application Actions … On SAM_SqlError Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos ) … … When SqlError … …
  • 96. SQL HiA SQL Error StartStart When SqlE. When SqlE. SqlE-WhenStatem.SqlE-WhenStatem. ReturnReturn SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return SqlE-WhenStatem.SqlE-WhenStatem. SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return Default Error handling. Default Error handling. EndEnd Yes No Yes No Yes No

Editor's Notes

  1. SQL er standard databasespråk for relasjons-databaser.
  2. Indekser er hjelpeinformasjon for raskere å kunne gjenfinne poster (records) i en database. Ofte benyttes såkalte B-trær som indekser (typisk på fremmednøkler). På ID benyttes av og til såkalte Hashtabeller. Hashtabellene inneholder transformerte ID (tranformert til en post-adresse).
  3. Hash1 gir dårlig spredning. Bl.a. vil ID_1 = abc og ID_2 = cba gi samme adresse. Has2 gir en noe bedre spredning idet nøkkelen nå utgjør et posisjons-system ved at endret rekkefølge av elementene i ID gir ulik adresse.