Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk.

Liknende presentasjoner


Presentasjon om: "SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk."— Utskrift av presentasjonen:

1 SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk

2 SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer

3 SQLHiA 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 010231024204720483071 c:\centura\.dbs

4 SQLHiA Lister av ulike typer database-sider 1PageGroupLogPriorNext TypeNoPtrPagePage Data3107 1st page in product table 7PageGroupLogPriorNext TypeNoPtrPagePage Data32119 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 SQLHiA Grupper av database-sider Data pagesSelve dataene i databasen Row pagesTabell-rader Extent PagesKolonner som ikke får plass i Row pages Long VarChar pagesLong VarChar kolonner Overflow pagesPlassmangel ved clustered hashing Designed overflow pagesPreallokering ved clustered hashing Dynamically created overflow pagesDesigned overflow page full Index pagesInneholder B + -tre indekser Control pagesGenerelle kontroll-opplysninger Database control blockVersjonsnr, log-info,... Free extent listListe av ikke-allokerte pages Group free page listGruppe-allokerings info (B + -tre) Group extent mapLog pages --> Physical pages info Bitmap pagesFreespace info for hver tabell Row count pageAntall rader pr tabell Table data pageSiste rad serial nr, page nr for siste rad, tabell størrelse, antall overflow pages.

6 SQLHiA Row Pages 1PageGroupLogPriorNext TypeNoPtrPagePage Data3107 Row Page 1st page in product table 7PageGroupLogPriorNext TypeNoPtrPagePage Data32119 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 SQLHiA Row Pages Page Header Row Page Header Freespace Page Footer Slot Table Slot 5Slot 4 Slot 3Slot 1Slot 2

8 SQLHiA Row Pages Page Header Row Page Header Physical Page No. Physical Page No. Page Type Page Type 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 Free Space Free Space Extent Page No. Extent Page No. Freespace Slot Table Entry 1Entry 2Entry 3 Page Footer Log Pointer Slot 5Slot 4 Slot 3Slot 1Slot 2 Entry 4Entry 5 Row Header Row Serial No. Update Serial No. Nbr Columns 1 4 Berg2 8 Grimstad3 7 Snekker Col IDLengdeData 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 SQLHiA 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 SQLHiA RowID-Entydig rad-identifikator RowID 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 SQLHiA RowID RowIDSNrNavnPNr CAAD5Nilsen5002 BACV2Olsen6400 ERCB1Hansen9000 EADD4Berg6400 Selger (ID = SNr) SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 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 SQLHiA Extent Pages Page Header Row 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 Free Space Free Space Extent Page No. 7 Extent Page No. 7 Slot Table Slot 2 Page Header Row 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 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 SQLHiA Long VarChar Pages Page Header Row 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 Free Space Free Space Extent Page No. 1014 Extent Page No. 1014 Slot Table Slot 2 Page Header Row 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 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 SQLHiA Overflow Pages-Designed Overflow Pages Page 1 Page 2 Page 3 Page N... Page 1 Page 2 Page 3 Page N... Avsettes plass til eventuelle overløps-rader for hver N page

15 SQLHiA Overflow Pages-Dynamically Created Overflow Pages Page 1 Page 2 Page 3 Page N... Page 1 Page 2 Page 3 Page N... Hvis et ikke er plass til overløps-poster i Designed Overflow Pages, opprettes dynamiske overløps-sider.

16 SQLHiA Indekser •B-TrærIndeks bygget opp som tre-struktur. Benyttes både på primary keys og foreign keys. •Hash-tabellerNø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 SQLHiA CREATE INDEX Oppretter en indeks CREATEINDEX index name UNIQUECLUSTERED HASHED, ON table name(column name) ASC DESC PCTFREE integer constantSIZE integer valueROWS BUCKETS Max size=6+number of+sum of<=255 columns inlength of all indexcolumns in index

18 SQLHiA 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 SQLHiA Clustered Index / Non-Clustered Index Index Data ClusteredNon-Clustered

20 SQLHiA Indekser i form av trestruktur …..

21 SQLHiA Binært tre 42 81 7 7 Søk etter tallet 15 Hver node inneholder maksimum 2 barn. Minimum-høyden av et binært tre som inneholder N noder er [log 2 N] + 1. Eks: Et tre med 100 noder vil ha minst 7 nivåer.

22 SQLHiA Multiway tre 42 81 95 107 7 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 61

23 SQLHiA 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 SQLHiA 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å 12152531415991 214872 1-4-8-1112-1315-18-1921-2425-2631-3841-43-4648-49-5059-6872-7884-8891-92-99 84 Eks: B-tre av orden 3 Løv Database

25 SQLHiA B-trærEks:Innsetting i et B-tre(1) 8,11,1216,1741,5222,23,3158,59,61 16:-41:58 22:- Løv Forenkling: Tenker oss at hver node kan inneholde max tre nøkler og tre barn

26 SQLHiA B-trærEks:Innsetting i et B-tre(2) 8,11,1216,17,1841,5222,23,3158,59,61 16:-41:58 22:-

27 SQLHiA B-trærEks:Innsetting i et B-tre(3) 1,811,1241,5222,23,3158,59,61 11:1641:58 22:- 16,17,18

28 SQLHiA B-trærEks:Innsetting i et B-tre(4) 1,811,1241,5222,23,3158,59,61 11:1641:58 22:- 16,1718,19

29 SQLHiA B-trærEks:Innsetting i et B-tre(5) 1,811,1241,5222,23,3158,59,61 11:-41:58 16:22 16,1718,19 18:-

30 SQLHiA B-trærEks:Innsetting i et B-tre(6) 1,811,1241,5222,2358,59,61 11:-41:58 16:22 16,1718,19 18:- 28,31

31 SQLHiA B-trærEks:Innsetting i et B-tre(7) 1,811,1241,5222,2358,59,61 11:-58:- 16:22 16,1718,19 18:- 28,31 28:-

32 SQLHiA B-trærEks:Innsetting i et B-tre(8) 1,811,1241,5222,2358,59,61 11:-58:- 22:- 16,1718,19 18:- 28,31 28:- 16:-41:-

33 SQLHiA 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 SQLHiA 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 SQLHiA Hashing / Nøkkel-transformering / Randomisering Hashing KeyTransformed Key

36 SQLHiA Nøkkel-transformering 123456789...123456789... PNr 123456789...123456789... ID PNr = IDEn-entydig sammenheng mellom PNr (Postnummer) og ID

37 SQLHiA Nøkkel-transformering 6 4 7 2 1 KundeNrTverrSum Distrikt

38 SQLHiA Nøkkel-transformering 6 4 7 2 3 KundeNrSiste siffer i tverrsummen av siste siffer i produktene 6 4 7 2 1 2 3 4 6 8 21 8 KundeNr Vekttall Produkt

39 SQLHiA Nøkkel-transformering 32191 51877 77638 PNrID PNr = IDEn-entydig sammenheng mellom PNr (Postnummer) og ID 32191 51877 77638 Ubenyttet 1 … 10000

40 SQLHiA Hash-tabeller 34 67 8 8 21 73 62 68 86 6 6 7 7 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 3 3 4 4 1 1 2 2 5 5 8 8 ID Trans 344 677 81 213 738 627 687 869 34 67

41 SQLHiA Nøkkel-tranformering-Folding Nøkkel- transformering ID = 29384756PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6 7 6 9 4 7 7 0 + + 1

42 SQLHiA Nøkkel-transformering-Divisjon-rest-metoden Nøkkel- transformering ID = 29384756PostNr [ 1 - 1000 ] 2 9 3 8 4 7 5 6:9 9 7 1 7 5

43 SQLHiA Nøkkel-tranformering-Uheldig tranformering HSize = 10000 KeySize = 8 HValue Max = 8 * 127=1016 1016 10000 Tranformering av hvert tegn i Key til tilhørende ordinal-verdi:

44 SQLHiA 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 SQLHiA Ulike nøkkel-transformeringer 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 SQLHiA 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 SQLHiA 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 XORKey2 =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 135ASCII 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 SQLHiA FlerbrukersystemClient / Server Database DBMS Application_2 SQL-Request Data Application_3 Application_1 ClientServer

49 SQLHiA 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 MIDPIDCount... ACI41139... MIDPIDCount... ACI4139... MIDPIDCount... ACI4114... Accept Order for 100 Accept Order for 125 Joe’s ProgramProducts TableMary’s Program

50 SQLHiA 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 MIDPIDCount... ACI41139... MIDPIDCount... ACI4139... MIDPIDCount... ACI41139... Accept Order for 100 Refuse Order for 125 Joe’s ProgramProducts TableMary’s Program ROLLBACK

51 SQLHiA Inkonistens problem i et flerbrukersystem uten lås DELETE FROM Orders WHERE... SELECT * FROM Orders OrderNrAmount 112961$31.500 113012$03.745 UPDATE ProgramOrders TableReport Program OrderNrAmount 112961$31.500 113012$03.745 OrderNrAmount 112961$31.500 113012$03.745 113102$05.000 Answer: 112961$31.000 Answer: 113012$03.745 INSERT INTO Orders VALUES (113102, $05.000) COMMITAnswer: 113102$05.000

52 SQLHiA Låse-mekanismer UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT... FROM Offices COMMIT OrdersOfficesProducts UUU OkL A L BOk OkL A Wait Ok OkUUOk L B UUOk Transaction ADBMSTransaction B

53 SQLHiA Shared Lock / Exclusive Lock Unlocked Shared Lock Exclusive Lock Unlocked Shared Lock Exclusive Lock Ok No OkNo Transaction B Transaction A S-låsShared LockSettes på database-siden når en bruker leser (SELECT) fra databasen. X-låsExclusive LockSettes 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 SQLHiA Shared Lock / Exclusive Lock UPDATE Orders SELECT FROM Offices UPDATE Orders UPDATE Offices COMMIT UPDATE Products SELECT... FROM Offices COMMIT OrdersOfficesProducts UUU OkEL A EL BOk OkSL A SL A,BOk OkSL AUOk OkEL A OkUU Transaction ADBMSTransaction B SL = Shared Lock EL = Exclusive Lock

55 SQLHiA Dead Lock UPDATE Orders UPDATE Products OrdersProductsU OkEL A EL BOk W Ok W Transaction ADBMSTransaction B SL = Shared Lock EL = Exclusive Lock UPDATE Products UPDATE Orders

56 SQLHiA 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 SQLHiA Database access cycle Connect Database operations Disconnect Prepare (Compile) Execute Fetch (for a SELECT) Select, Insert, Update, Delete,...

58 SQLHiA Connect / Disconnect SqlDatabaseDEMO SqlUserSYSADM SqlPasswordSYSADM SqlConnect SqlDisconnect Predefinerte variableDefault-verdier Centura-funksjoner

59 SQLHiA Connect / DisconnectEksempel 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 SQLHiA SqlHandle Name of DbConnection Sql Handle: hSql Row Position in Result Set Input message buffer Output message buffer Work Space in Memory

61 SQLHiA Compiling and Exexuting SQL statements SqlPrepare:Kompilerer et SQL statement SqlExecute:Eksekverer et SQL statement SqlPrepareAndExecute:Kompilerer og eksekverer et SQL statement

62 SQLHiA SELECT 1.Prepare (compile) SELECT statement 2.Execute SELECT statement 3.Benytt SqlFetch… for å hente en rad inn i INTO variable SqlFetchNextHenter neste rad i et resultatsett SqlFetchPreviousHenter forrige rad i et resultatsett SqlFetchRowHenter en gitt rad i et resultatsett SqlGetResultSetCountReturnerer antall rader i et resultatsett SqlSetResultSetSetter 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 SQLHiA 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 SQLHiA SqlImmediate SqlConnect SqlPrepare SqlExecute SqlFetchNext (SELECT) SqlClearImmediate Connect en intern SqlHandle, Prepare and Execute a SQL Statement. Disconnect SqlHandle fra SqlImmediate

65 SQLHiA Funksjoner for database-parametre Set / Get SqlSetParameterSetter databaseparametre SqlSetParameterAllSetter databaseparametre SqlSetInMessageSetter størrelse på InputMessageBuffer (1-32K) SqlSetIsolationLevelSetter isolasjonsnivå i tilknytning til S-lås SqlSetLockTimeoutSetter ventetid (-1,0,1…1800s) SqlSetOutMessageSetter størrelse på OutputMessageBuffer (1-32K)

66 SQLHiA DBP_* parametre DBP_AUTOCOMMITOn: Automatisk Commit ved SQL-statem. DBP_BRANDUlike databaser (DBV_BRAND_SQL, …) DBP_FETCHTHROUGHOn: Henter rader direkte fra datab.server DBP_LOCKWAITTIMEOUTTall som viser ventetid (-1,0,1…1800s) DBP_NOPREBUILDOn:Ingen prebuild av resultatsett ved ResultSetMode og RL. S-lås settes på gjeldende side. DBP_PRESERVEOn: Bevarer resultatsett ved Commit DBP_ROLLBACKONTIMEOUTOn: Rollback ved timeout DBP_VERSIONDatabase server versjon

67 SQLHiA DBP_BRAND DBV_BRAND_ALLBASEHewlett-Packard ALLBASE DBV_BRAND_AS400IBM AS/400 DBV_BRAND_CINCOM-SUPRACincom Supra DBV_BRAND_DB2IBM DB2 DBV_BRAND_INFORMIXInformix DBV_BRAND_INFORMIX-ONLINEInformix Online DBV_BRAND_ORACLEOracle DBV_BRAND_ORACLE7Oracle v.7 DBV_BRAND_OS2EEIBM OS/2 EE DBV_BRAND_SQLSQLBase DBV_BRAND_SYBASESQL Server

68 SQLHiA DBP_LOCKWAITTIMEOUT VerdiBeskrivelse 1-1800Ventetid for en lås ( 1 sek - 30 min, 300 s default ) -1Vent for evig 0Ingen venting

69 SQLHiA Input / Output Message Buffer (as seen from Client) Database DBMS Application SQL-Request Data Input Message Buffer Output Message Buffer hSql1 hSql2 Input Message Buffer Output Message Buffer Input Message Buffer Output Message Buffer hSql1 Input Message Buffer Output Message Buffer Application 1 Application 2 Output Message Buffer

70 SQLHiA Resultatsett Database DBMS Application SQL-Request Data SELECT SNr, Navn, PNr FROM Selger WHERE PNr = 6400 SNrNavnPNr 5Nilsen5002 2Olsen6400 1Hansen9000 4Berg6400 Tabellen Selger SNrNavnPNr 2Olsen6400 4Berg6400 Resultatsett ClientServer Fetch

71 SQLHiA 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 SQLHiA RowID 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 SQLHiA Resultatsett-RowID-Single tabell Resultat-sett av løv-pekere Resultat-sett av løv-pekere AABC AABE AABC AABE ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 6400 Selger (ID = SNr) SELECT SNr, Navn FROM Selger WHERE PNr = 6400

74 SQLHiA Resultatsett-RowID-Join Resultat-sett av løv-pekere Resultat-sett av løv-pekere ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 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 ROWIDPNrIDSted GGHA5002Bergen GGHB6400Molde GGHC9000Tromsø Adr (ID = PNr) Selger-RowIDAdr-RowID -------------------------------------- AABCGGHB AABEGGHB

75 SQLHiA Resultatsett-RowID-Beregnede verdier Resultat-sett av RowID til tmpTbl Resultat-sett av RowID til tmpTbl ROWIDSNrNavnPNr AABB5Nilsen5002 AABC2Olsen 6400AABD1Hansen 9000AABE4Berg 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 ROWIDSNrVNrMg YYAA5830 YYAB2120 YYAC2310 YYAD1550 YYAE1840 YYAF4170 YYAG4350 YYAH4520 Salg (ID = SNr + VNr) RowIDSNrIDNavnSum(Mg) -------------------------------------------- XXAA1Hansen 90 XXAB2Olsen 30 XXAC4Berg140 XXAD5Nilsen 30 Temporær tabell med resultat-rader

76 SQLHiA 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 SQLHiA 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 SQLHiA 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 SQLHiA 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 SQLHiA 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 Resultatsett Database sider (pages) S-lås

81 SQLHiA 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 SQLHiA RO-Read Only RO(Read Only)Kun leseadgang. Ingen låser settes. Ved lesing av en side med lås, leses history-fil(er). x x 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 SQLHiA 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 SQLHiA 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 SQLHiA Isolation Level Locks (S-Locks) Data Consistency RR Lås holdes gjennom hele transaksjonen. Mer enn en side kan være låst. CS Lås holdes kun på den siden som inneholder gjeldende rad. RO RL Ingen lås. Ingen INSERT, UPDATE, DELETE. Lås slippes straks ved end-of-fetch (når resultatsettet er ferdig generert). User Concurrency HøyLav Middels HøyHøyest LavHøy

86 SQLHiA Data Consistency - User Concurrency Data Consistency User Concurrency RORRCSRLRO

87 SQLHiA 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 SQLHiA Isolation Level-Kriterier Isolation Level Kriterie 1 Buffere Kriterie 1 Buffere RR Ja Kriterie 2 Contention Kriterie 2 Contention Kriterie 3 Update Kriterie 3 Update Kriterie 4 Consistency Kriterie 4 Consistency CS RO RL Nei Ja Nei Ja Nei Ja Nei Ja Nei

89 SQLHiA 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 SQLHiA 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 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_DeleteSlettet siden forrige henting FETCH_EOFSlutten / Begynnelsen av resultatsettet FETCH_OkHenting ok, raden er ‘korrekt’ FETCH_UpdateOppdatert siden forrige henting Page Row ResultatSett

91 SQLHiA 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 SQLHiA RowID validitering Start Ok Prepare / Execute Select. RowID Ok RowID Ok Changed-row processing Changed-row processing End FetchRows User changes a row Prepare / Execute a DML Error processing Error processing Commit No Yes

93 SQLHiA 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_ReasonError code reason SQLERROR_RemedyError 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 SQLHiA 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 SQLHiA SQL Error Application Actions … On SAM_SqlError Call SqlExtractArgs ( wParam, lParam, hSqlError, nErr, nPos ) … When SqlError …

96 SQLHiA SQL Error Start When SqlE. When SqlE. SqlE-WhenStatem. Return SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return SqlE-WhenStatem. SAM SqlE. SAM SqlE. ReturnValue blir Sql* function return ReturnValue blir Sql* function return Default Error handling. Default Error handling. End Yes No Yes No Yes No

97 SQLHiA End


Laste ned ppt "SQLHiA DAT 2800 Databaser I Flerbrukerproblematikk."

Liknende presentasjoner


Annonser fra Google