Posted By: medved (A~z na v~eky Mikov~ce.) on 'CZdatabases'
Title:     Re: IDENTITY - Sybase
Date:      Tue May  9 16:24:19 2000

> >     Se sybase jsem nikdy nedelal, ale pri padu serveru se podobna vec deje
> v
> > Oracle u sekvenci. Tam se ovsem da vypnout cachovani sekvenci, coz u
> mensiho
> > poctu insertu nevadi a pak derave rady nenastavaji. Treba vam to pomuze. 
> 
> Predpokladam, ze presne tomu odpovida u Sybase "burning set factor"
> (ktery je mam dojem bohuzel jen jeden pro cely databazovy server, nikoli
> pro konkretni sekvence, nebo presnejsi sybasi terminologii pro konkretni
> identity - pokud se mylim, budu vdecny za opravu).
> 
> Nevi nahodou nekdo nejake presnejsi vysvetleni, co se stane, kdyz tendle 
> faktor nastavim na hodne malou hodnotu, krome intuitivniho "bude to
> pomalejsi"?

Takze jak to vlastne s tou Identity vlastnosti je:

Sybase ASE funguje tak, ze mnozina potencionalnich hodnot sloupce se roseka na 
x bloku - kazdy o velikosti urcene IDENTITY BURNING SET FACTOR parametrem, 
ktery je vyjadren v desetimiliontinach teto mnoziny - pokud tedy mame 
IDENTITY nastavenou nad sloupcem povolujicim hodnoty od 1 do 10 000 000, 
potom IDENTITY BURNING SET FACTOR nastaveny na 100 vytvari bloky po 100 
hodnotach.

A ted jejich pouziti:

Pri startu ASE (nebo vytvoreni tabulky s identity) se v pameti ASE alokuje 
blok moznych identity hodnot a na disk se k tabulce zapise pocatecni hodnota 
tohoto bloku (na zacatku tedy implicitne 1). Pote pri insertech jsou 
jednotlivym uzivatelum prirazovany skupiny identity hodnot podle IDENTITY 
GRAB SIZE parametru - implicitne po jedne hodnote, ale lze to prenastavit na 
vice - treba pro pripad, ze procesy typicky zapisuji po desitkach ci stovkach 
zaznamu.
Jakmile hodnoty v bloku dojdou, tak se vygeneruje novy blok a opet se zapise 
k tabulce pocatecni hodnota tohoto bloku (101). Potiz je v tom, co se stane 
pokud ASE spadne nebo ho shodite s 'no wait' - v takovem pripade se posledni 
hodnota identity nikam nezapise a pri dalsim startu ASE 'pro jistotu' vezme 
nasledujici blok, nez je ten zacinajici pocatecni hodnotou zapsanou u tabulky 
- ASE totiz musi jeste zapsat do stranek tabulky operace, ktere na nej cekaji 
v trans. logu (roll forward) a tak nemuze se podivat na maximalni hodnotu 
sloupce v tabulce. Pri roll-forwardu ale uz mohou ostatni uzivatele pracovat.
(v ASE se veskere DML operace pisi do transakciho logu a tim okamzikem je 
provedena zmena dat - k samotne zmene datovych stranek dojde az 'nekdy 
pozdeji' - nebo pri checkpointu).

V ASE 12.0+ je mozne jeste pro kazdou tabulku nastavit identity_gap parametr, 
ktery rika kolik (pocet) hodnot se ma generovat do jednoho identity bloku 
(ale opet opakuji vycerpani tohoto bloku = zapis na disk!). 

> Dik
> 
> Pavel
> 

Bye

Medved

Si vis pacem, para bellum.

Search the boards