IBM DB2 historie (2)

Dnes se podíváme na DB2 verze 4 a databáze na nemainframových platformách z ní vycházející.

2.4.2010 00:00 | Radim Kolář | přečteno 8234×

DB2 Version 4

Verze 4.0 vyšla 30. listopadu 1995 a byla opět plná revolučních změn. Verze 4.0 byla dlouhou dobu mojí nejoblíbenější DB2 verzí vůbec. Z tohoto místa ji sesadila až DB2 LUW 9.7, kterou považuji za nejrevolučnější DB2 v historii. DB2 4 jsem používal až do doby než vyšla osmička. Ze čtyřky na osmičku jsme přemigrovali protože na současných operačních systémech již čtyřka nejenže nebyla oficiálně podporována, ale už ani neběžela. Čtyřka se mi líbila, protože obsahovala vše co potřebujeme pro vývoj aplikací a neobsahovala nic co nepotřebujeme. Byla to neuvěřitelně kompaktní databáze s minimálními systémovými nároky. Dnes je tomu asi těžké uvěřit, ale jádro DB2 mělo po odečtení knihoven pouhé 4 MB. Čtyřka byla taky první verze DB2 s kterou jsem měl co do činění. Oproti Oracle 6.5 byla výrazně rychlejší a hlavně jednoduší na použití. Jak se říká - byla to láska na první pohled.

Začneme technickou novinkou - byl zaveden nový diskový formát (Type 2) B-Tree indexů. Tento nový typ se používá dodnes a velmi výrazně zvyšuje dostupnost databáze protože na rozdíl od předchozího formátu nevyžaduje zamykání celého indexu při jeho aktualizaci. Protože Type 2 index byl už prakticky lockfree (až na next index key lock v cursor stability izolačním levelu) mělo smysl implementovat nové izolační levely uncommited read a read stability. Čtyřka tedy podporovala všechny 4 standardní izolační levely, ačkoliv jsou v terminologii DB2 jinak nazývány. V DB2 se levelu serializable říká Repeatable read, Repeatable read se říká Read stability a read committed se říká cursor stability. DB2 pro i5/OS má navíc ještě izolační level NO COMMIT při kterém se všechny commity ignorují a nedochází proto k žádným persistentním změnám v databázi. V DB2 9.7 přibyl pak ještě jeden izolační level - v DB2 terminologii nazývaný read commited, který pracuje stejně jako u Oracle a MS SQL databází. Jedná se o pseudo MVCC implementaci založenou na statement snapshotech kde se navzájem neblokují readers a writers. Současně došlo k rozšíření SQL DML příkazů o klauzuli WITH (nezaměňovat s WITH v CTE) pomocí které šlo specifikovat izolační level pro jeden SQL příkaz.

Indexy typu 2 kvůli zamykání (potřeboval by se na to page lock) neodmazávají staré hodnoty z indexu ale označují je příznakem smazané. Čas od času musí administrátor spustit údržbu indexů aby se uvolnilo již nepotřebné místo v indexech. V novějších verzích počínaje 8 je tato činnost již volitelně automatizována. Údržba je trojího druhu: 1. můžeme starý index smazat a vytvořit nový - používá se pokud byla z indexu odstraněna většina dat 2. smazat smazané záznamy a pokud bude index stránka příliš prázdná tak ji sloučit s vedlejší stránkou 3. smazat celou stránku pokud jsou všechny záznamy smazané - velmi rychlé a používá se pro tabulky kde s daty zacházíme stylem FIFO. Většina nových funkcí kupříkladu UNIQUE WHERE NOT NULL byla podporována jen pro nový typ indexu.

Type 1 indexy byly označené za zastaralé a jejich odstranění se plánovalo na verzi 6. Databáze vytvářela standardně nový druh indexů, pouze v případě že nad tabulkou byl již vytvořen index typu 1 tak nově vytvořený index byl také typu 1. Při reorganizaci indexů (údržba prvního typu viz výše) byly automaticky překonvertovány na typ 2. Zajímavé je, že podpora indexů typu 1 byla odstraněna mnohem později než se původně plánovalo - až ve verzi 9.7 tedy více než za 14. let po jejich uvedení. Existovaly totiž instalace kde se typ 1 indexů pořád používal a kde se nenašla za 12 let chvíle času na jejich konverzi protože by to znamenalo během reindexace uzamknout tabulku pro zápis. Tento zajímavý fakt dokládá že ve světě mainframů je 24/7 provoz databáze a uptime pojat úplně jinak než jsme z malých systémů zvyklí. Více podrobnostech o nových Type 2 indexech se dočtete zde.

Nejpokrokovější ale bylo že tato verze implementovala uložené procedury, triggery, uživatelem definované funkce a uživatelem definovatelné datové typy. O těchto věcech se v té době hodně psalo. Autoři se shodovali, že je to ten směr kterým by se měly databáze vyvíjet. Největší pozornost se věnovala uloženým procedurám. Jejich hlavní výhodou oproti dosavadní praxi bylo, že aplikace již nemusela posílat do databáze sady příkazů, ale stačilo poslat jen jeden - zaslání uložené procedury. Tento postup eliminoval prodlevy, které vznikaly při posílání příkazů přes síť, což se začalo používat čím dál tím víc protože čtyřka už plně podporovala klient/server model. Zejména velké zrychlení tak nastávalo u dávkového zpracování pokud k němu nebylo potřeba využívat data uložená mimo databázi. Jako programovací jazyk byl pro uložené procedury bylo použito mírně rozšířené SQL, COBOL, C a REXX. Možnost definovat si své vlastní datové typy byla také velmi lákavá a diskutovalo se jaká data by se měli v databázi pomocí uložených procedur zpracovávat místo dosavadního pouhého ukládání. Uvažovalo se o obrázcích, audiu a videu.

Další věcí která mě nadchla byla podpora inline views - možnost použití SELECTu ve FROM clausuli. Bylo to velmi jednoduché na použití a znatelně to šetřilo čas. V DB2 byly inline views dokonce i zapisovatelné - šly použít v UPDATE a DELETE, což byl na svou dobu unikát. Přibyla SQL92 standardní klauzule CHECK pro omezení vkládaných dat do tabulek. S její pomocí se daly zohlednit hodnoty jednoho či více sloupců a omezení v CHECK klauzuli uměl používat i optimalizátor SQL dotazů pro eliminaci zbytečných porovnání. Pokud totiž podle CHECK nesměl sloupec nabývat některých hodnot a tyto hodnoty uživatel hledal ve WHERE, tak nebylo potřeba prohledávat tabulku jelikož se tam hledaná hodnota nemohla vyskytovat. A poslední inovací na poli SQL byly Common Table Expressions které podporovali už i rekurzi. Dalším významným rozšířením dotazovacích schopností jazyka SQL byla nová podpora OUTER JOIN. Pro zlepšení administrace přibyl příkaz CANCEL THREAD pro odpojení uživatele od databáze (Dřive se při nutnosti odpojení uživatele prostě ukončila přímo klientská aplikace) a možnost nastavit RESTRICT ON DROP příznak u tabulek zabraňující nechtěnému smazání tabulek administrátorem.

Velké změny nastaly v oblasti škálovatelnosti. Přibyla optimalizace partition exclusion u fullscanu partitioned tabulek, maximální počet připojení do databáze byl navýšen z původních 10 000 na 25 000, ale hlavní novinkou byla možnost vytvoření data sharing group kde jednotlivé uzly přistupují ke sdíleným databázovým souborům. Dnes tuto technologii známe jako shared disk cluster. Cluster DB2 instancí podporoval až 800 000 spojení, maximální počet členů clusteru byl 32. Jedná se o podobnou technologii jako používá dnes Oracle RAC jen zamykání je řešeno lépe (sdílení zámků pomocí CF) a není tudíž potřeba tolik vzájemné komunikace mezi jednotlivými uzly nebo sesynchronizovat zámky v celém clusteru při výpadku uzlu. Pokud dojde k výpadku, tak data zamčená uzlem zůstanou sice zamčená, ale zbytek dat je normálně přístupný i pro zápis. Pro uvolnění zámků držených nedostupným uzlem je potřeba znovu spustit uzel aby provedl crash recovery při které dojde k rollbacku inflight transakcí a uvolnění zámků. Pokud je počítač na kterém běžel nedostupný uzel také nedostupný tak je tento uzel nastartován na jiném počítači v data sharing group. Uzel na jiném počítači je spuštěn jen za účelem crash recovery - nepřijímá uživatelská spojení aby negeneroval nepředvídanou zátěž systému. Za normálních okolností je tato činnost plne automatizována.

Připomeňme si ještě jednou když mluvíme o těchto pokročilých SQL rysech že se psal rok 1995. Verze DB2 zde popsané se týkaly její mainframové verze, především verze pro operační systém MVS/ESA. DB2 začala postupně vycházet i na jiných platformách, kterým se v terminologii IBM říkalo distributed platforms, případně open system platforms a znamenalo to všechny nemainframové platformy.

V roce 1987 byla vydána speciální verze "Extended Edition" tehdy nového operačního systému OS/2 1.0, který obsahoval DB2. OS/2 1.0 byl 16-bitový operační systém a měl to být nástupce PC-DOSu. IBM měla s OS/2 velké plány a brala tento operační systém zpočátku velmi vážně. OS/2 byl první nemainframový operační systém na který byla DB2 portována a dědictví původního kódu v DB2 LUW syntaxi pro administraci instanci (GET DBM CFG) přetrvalo dodnes. Na OS/2 platformě se DB2 nejmenovala ještě DB2 ale Database Manager 1.0

Další verze DB2 nazývaná SQL/400 pro operační systém AS/400 vyšla v roce 1988. AS/400 operační systém je dost specifický. Nejedná se totiž o operační systém jako ho běžně známe například z z/OS, MVS, MS-DOSu nebo Unixu. AS znamená aplikační server a AS/400 je aplikační server a operační systém v jednom. DB2 se v AS/400 zabydlela a je jeho standardní součástí dodnes. OS AS/400 se od té doby několikrát z čistě marketingových důvodů (neprodávalo se ho tolik kolik by si výrobce přál) přejmenoval, v současnosti se jmenuje IBM i. Nejzajímavějším rysem IBM i je spouštění programů ve virtuálním stroji TIMI, který umožňuje binární kompatibilitu napříč procesory a platformami podobně jako virtuální stroj Javy.

Další OS/2 verze - OS/2 Extended Edition 1.1 vyšla v roce 1989. SQL jazyk byl rozšířen o UNION, INTERSECT a EXCEPT a přibyly holdable cursors - kurzory co zůstanou otevřené i po provedení COMMIT. Také bylo možně rozšířit DB2 C preprocesor o podporu pro uživatelem definované C kompilátory.

O OS/2 Extended Edition 1.3 (1.2 pravděpodobně ani nebyla) se mi nepodařilo sehnat žádné podrobnější informace co se DB2 týče a tak si alespoň můžete prohlédnout grafické rozhraní a query builder.

Další verze OS/2 z roku 1991 - 2.0 byla již 32-bitový operační systém využívajícím schopností procesoru Intel 386, ačkoliv některé části zůstaly stále s šestnáctibitovým API. Nás ale zajímá, že nová 32-bitová DB2 byla nyní součástí balíku (nikoliv už OS edice) OS/2 Extended Services 1.0.

V roce 1993 IBM vydala DB2 pro 32-bitový OS/2 poprvé samostatně. Produkt se jmenoval DB2/2 V1 a byl založen na DB2 2.3. Podobná verze vyšla i pro AIX pod názvem DB2/6000 V1. V další verzi DB2/2 1.2 bylo už možné dělat online backup/rollforward recovery, což přineslo výrazné zlepšení dostupnosti databáze i na pouhém IBM PC.

DB2 se pak rozšířila na ne IBM unix platformy pod názvem DB2 Common Server Technology 1.0. Tento produkt existuje dodnes a v současnosti se jmenuje DB2 LUW (Linux, Unix, Windows). Podporované operační systémy byly HPUX, Solaris, a betaverze pro Windows NT. K tomuto produktu jsem našel administrační příručku, která prakticky beze změn platí dodnes.

DB2 Common Server technology 2.0 byla založena na mainframové DB V4 a vyšla pro OS/2, AIX, HP, Sun, SCO, SINIX a Windows NT. Této databázi se říkalo objektově-relační protože podporovala uživatelem definované data typy. Dnes se tomu asi budeme usmívat, protože to s dnešními objektovými databázemi nemělo prakticky nic společného, ale byla to první databáze co uměla datové typy definované uživatelem. Panovalo okolo toho ze strany aplikačních programátorů velké nadšení - zkoušelo se k čemu se tato vymoženost dá v praxi využít, přečtěte si dobový dokument srovnávající různé databáze co do podpory multimédií.

Krátce po vydání vydala IBM minor revizi DB2 2.1 obohacenou o volitelné rozšiřující moduly, které umožňovaly pracovat s textem, obrázky, videem a audiem pomocí SQL uložených procedur a nových datových typů. Vývojáři mohli začít směle experimentovat.

Dalším velkým zlomem bylo vydání DB2 Parallel Edition V1 pro platformu RS/6000 SP2. Jednalo se o implementaci shared nothing clusteru určnou zejména pro data warehousing. Architektura shared nothing má prakticky lineární škálovatelnost v závislosti na počtu uzlů. Na rozdíl od data sharing group u mainframů nebyl na RS/6000 vyžadován žádný speciální hardware. Tato technologie se za následujících 15 let sice dvakrát přejmenovala, ale používá se dodnes a je podporována i na Linuxu či Windows.

V roce 1995 vyšel na platformách AIX a OS/2 produkt WWW Gateway for DB2 V1. Zpřístupňoval data z DB2 databáze přes HTTP rozhraní. Produkt obsahoval HTTP server, ale neběžel jako modul v serveru jak bychom dnes čekali ale jako CGI script. Obsahoval makrojazyk a dokonce byl i patentován. Podrobnější informace o makrojazyku najdete v druhém patentu.

V roce 1996 vyšla IBM DB2 2.1.2 - první komerční databáze s podporou Javy a aplikačního rozhraní JDBC. IBM tím dala jasně najevo, že to s podporou tehdy ještě velmi nové technologie Java myslí opravdu vážně.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1685