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.