Donnerstag, 4. Dezember 2008

entwickler.com Magazine Konferenzen Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag




April 2006
aus Der Entwickler Ausgabe: 5.2003
Nachgebessert
InterBase 7.1: Das jüngste Update des Datenbankservers unter die Lupe genommen
von Karsten Strobel

Anders als viele der mitunter flatterhaften Angehörigen der IT-Berufe werden Datenbankfachleute meist der konservativen Fraktion zugerechnet. Sie sind ewig skeptisch und stets besorgt, wenn sie an die ihnen anvertrauten, stetig wachsenden und wachsenden Datenspeicher denken. Kaum einer, der nicht ein Lied singen kann von falschen Verheißungen des Herstellers seines Produktes. Um diese Leute von den Segnungen einer neuen Softwareversion zu überzeugen, ist vor allem eines nötig: Vertrauensbildende Maßnahmen.


Etwa ein 3/4 Jahr nach dem Release des Version 7.0 [1] legt Borland nach und veröffentlicht unter der Nummer 7.1 ein Wartungsupdate der hauseigenen relationalen Datenbank. Mit dem kleinen Versionsschritt gibt sich der Hersteller bescheiden, denn die neue Version bringt nicht nur etliche, teils lange erwartete Fehlerkorrekturen, sondern auch einige neue Features, die vielleicht auch einen größeren Zählschritt gerechtfertigt hätten. Der deutsche Markt scheint für den Absatz des Produktes von einiger Bedeutung zu sein, denn - wie schon bei der Vorstellung der Version 6.5 [2] - kamen unter anderem der Direktor der InterBase Abteilung Jon Arthur und der leitende Entwickler Charly Caro zu einer von der Firma better office [3] veranstalteten Deutschlandtour aus Kalifornien eingeflogen, um die neue Software unter das Entwickler-Volk zu bringen.

Gleichschaltung
Das Registrieren der Software, also die namentliche Anmeldung der erworbenen Lizenz bei Borland, ist mit der neuen Version zur Pflichtübung geworden. Lizenzschlüssel, die für die Version 7.0 erworden wurde, funktionieren zwar weiterhin, jedoch braucht man zur Aktivierung nun einen besonderen Schlüssel, den man per Online-Registrierung oder nach telefonischer Anmeldung erhält. Anders als bei vielen der neueren Microsoft-Produkte ist die Registrierung aber nicht an Merkmale der verwendeten Hardware gebunden; nach einem Umbau der Hardware ist also keine Neuregistrierung fällig. Neu ist auch das Installationsprogramm, das künftig wohl einheitlich für die verschiedenen Borland-Produkte eingesetzt werden soll und das sich auch unter Linux und Solaris in der selben Art wie unter Windows präsentiert.

Verwechslungstragödie
In Ihren Vorträgen wiesen die InterBase-Macher auf die stattliche Anzahl von mehreren Hundert Bugfixes und Verbesserungen hin. In den Release Notes findet man allerdings bedeutend weniger Änderungshinweise. Das Gefälle der Zahl der im Begleitdokument beschriebenen und den tatsächlich vorgenommenen Modifikationen mag darin begründet sein, dass sich hinter so schlichten Sätzen wie Verbesserung der Garbage Collection und der Index Behandlung ganze Kaskaden von Eingriffen verbergen. Bemerkenswert ist hier der verbesserte Umgang mit Indices, die eine großen Anzahl von Dubletten aufweisen. Wenn Sie zum Beispiel einen Index auf ein Tabellenfeld vom Typ BOOLEAN kreieren, wobei von einhunderttausend Mitgliedern nur hundert Einträge den Wert true, und alle anderen false erhalten, dann wird natürlich die Suche nach den true-Kandidaten durch den Index stark beschleunigt, wogegen die Suche nach false-Einträgen durch den Index nicht begünstigt, eher sogar beeinträchtigt wird. Dennoch kann es nützlich sein, einen solchen Index zu erzeugen, nämlich dann, wenn man bei der Suche regelmäßig nach den wenigen true-Kandidaten fahndet. Leider machte bisher eine Designschwäche von InterBase dieses Vorgehen zu einer Performance-Falle: Wird nämlich eine große Anzahl von Datensätzen dieser Art gelöscht, dann muss die Datenbank zu jedem Record- auch den Index-Eintrag aufspüren und entfernen. Bei den true-Werten ist dies kein Problem, aber die false-Werte machen aufgrund der schwachen Index-Selektivität der Datenbank (und dem Anwender) das Leben schwer, weil durch indizierte Suche die Menge der zu durchsuchenden Index-Einträge für diesen Wert nur auf 99,9 Prozent der Gesamtheit begrenzt werden kann. Den Rest musste - bis einschließlich zur Version 7.0 - die Datenbank zu Fuß durchsuchen, um ein individuelles Index-Mitglied zu finden. Die neue InterBase-Version führ in Indices nun neben dem indizierten Wert jeweils noch einen für den Anwender unsichtbaren Verweis auf die Datensatznummer des betreffenden Datensatzes. Beim Löschen eines Datensatzes wird der Indexeintrag anhand der Kombination aus indiziertem Feld und dem unsichtbaren Anhängsel gesucht und dadurch wesentlich schneller gefunden.


Ähnlich subtile Verbesserungen wurden am Garbage Collector, dem Aufräumer-Thread, der den Speicherplatz nicht länger benötigter Datensatzversionen freigibt, in den Algorithmen zur Verkettung solcher Versionen und an der Multithreading-Steuerung vorgenommen. Das wichtigste Ziel dieser Maßnahmen ist, die Langzeitstabilität einer Datenbankanwendung zu verbessern. Damit ist nicht nur das Vermeiden von Abstürzen, sonder auch eine möglichst gleichbleibende Performance über lange Zeiträume hinweg gemeint. Auch die krassen Performanceprobleme beim Verbinden mit einem Windows Server 2003, sowie die Einschränkungen beim Ausführen des Datenbankservers auf Rechnern mit Hyperthreading-Hardware wurden beseitigt. Dokumentiert und tatsächlich beseitigt wurde übrigens endlich auch der seit langem bekannte Fehler beim abwechselnden Ausführen verschiedener Gespeicherten Prozeduren mittels Execute Procedure [4], der schon zu vielen Frustrationen und mitunter zu unerwarteten Änderungen der Anwendungsdaten geführt hat.


Ebenfalls in die Rubrik Stabilität und Zuverlässigkeit fällt eine Änderung an der Restore-Funktion des gbak-Dienstprogramms. Diese Verbesserung erweist sich dann als nützlich, wenn es aus irgendeinem Grund zu inkonsistenten Zuständen in der Datenbank gekommen ist, und eine solche Datenbank mit regelwidrigem Inhalt per Backup-Befehl gesichert wurde. Deklariert man zum Beispiel für eine vorhandene Tabelle nachträglich für ein Feld das NOT NULL-Attribut (mit einigen Managementtools ist das möglich), obwohl in der Tabelle bereits ein Datensatz mit NULL-Status vorhanden war, so hat man sich bereits unrichtige Daten eingehandelt, was aber erst beim nächsten Update eines solchen Datensatzes auffallen würde. Wird für die Datenbank nun ein Backup ausgeführt, so konnte man die gesicherten Daten bisher nicht mehr wiederherstellen, denn während der Restore-Phase wurde auf solche Verstöße mit einer Fehlermeldung und Programmabbruch reagiert. Das Standardverhalten der neuen gbak-Version ist hier toleranter, sofern nicht die Option -VALIDATE angegeben wird. Zwar lebt diese Neuerung eigentlich davon, dass man sie nicht braucht, aber in der Praxis kann damit doch der eine oder andere Nervenzusammenbruch vermieden werden.

Gebremster Start mit .NET
Borland hat das jüngste InterBase-Release mit neuen Treibern ausgestattet. Neben aktualisierter Versionen des schon seit längerem verfügbaren InterClient JDBC Treibers für Java-Entwickler und der IBX-Komponenten, ist der neue ADO.NET Provider eine Überraschung. In den Release Notes wird in wenigen Absätzen die Installation und Anwendung dieses Treibers in Microsofts Visual Studio beschrieben. Für den von Borland schon angekündigten aber noch nicht ausgelieferten C#Builder ist an selber Stelle nur ein Hinweis auf die dort mitgelieferte Dokumentation und Beispiele zu finden. Die Implementierung des ADO.NET Providers für InterBase entspricht der von Borland entwickelten Borland Data Provider- (BDP-) Architektur. Dieser Ansatz bietet eine datenbankneutrale Connection-Klasse, die zur Entwurfszeit per Parametrierung mit einem der unterstützten Datenbankserver verbunden werden kann. Durch den Verzicht auf produktspezifische Klassen will Borland die Unabhängigkeit der Anwendung vom Datenbankprodukt verbessern und nebenbei auch die Life-Visualisierung von Daten schon während der Programmentwicklung ermöglichen, was mit dem Microsoft Pendant noch nicht machbar ist.


Die Installation des ADO.NET Providers nach Borland-Machart klappt auch wie beschrieben (Abb.1). Mit der Anwendung hapert es leider noch. Eine sehr knappe und schwer aufzufindende readme-Datei teilt dem genervten Entwickler zutreffend mit, dass das interaktive Erzeugen von typisierten Datasets mit der aktuellen BDP-Version zu Fehlermeldungen führt, was in einem späteren Update (das ich etwa zeitgleich mit dem C#Builder erwarte) behoben werden wird. Somit sollte man diesen Bestandteil der neuen InterBase-Version zunächst nur als Vorboten einer neuen Technologie ansehen, mit dem Einsatz in realen Entwicklungsprojekten aber noch etwas warten.


Abb. 1: Borland Data Provider für ADO.NET

Aufgemöbelt
Beim Erscheinen von InterBase 7.0 wurde ein Nachfolger für die etwas hausbackene Managementoberfläche IBConsole angekündigt. In den damaligen Release Notes wurde eine Web-Adresse abgedruckt, unter der Beta-Versionen eines verbesserten IBConsole Plus verfügbar gemacht werden sollten. Davon ist nun keine Rede mehr. Die Pläne wurden aufgegeben, wohl zugunsten eines neuen Projekts, nämlich eine plattformübergreifende Oberfläche für verschiedene Datenbankprodukte. Auch dies ist aber noch Zukunftsmusik. Nach wie vor wird also das mit InterBase V6 eingeführte IBConsole mitgeliefert, das zwar mit den inzwischen zahlreich erschienenen Konkurrenzprodukten von Drittanbietern nicht konkurrieren kann, aber mit der Version 7.1 doch eine sehr nützliche Erweiterung erfahren hat: Der schon bisher als Freeware verfügbare IB-PerformanceMonitor von Team-B Mitglied Craig Stuntz [5] wurde in das Programm integriert. Damit steht nun ein brauchbares Werkzeug zur Verfügung, um die neuen Überwachungs- und Managementfunktionen von InterBase 7 auch wirklich nutzen zu können. Abbildung 2 zeigt die wahrscheinlich wichtigste Funktion dieses Tools, nämlich den Abbruch von gestartete Sitzungen, Transaktionen oder SQL-Statements.


Abb: 2: IBPerformanceMonitor jetzt in IBConsole integriert

Neues von heute ...
Neben den vielen sichtbaren und unsichtbaren Fehlerkorrekturen und Systemverbesserungen gibt es auch ein paar neue Features zu entdecken. Interessant ist vor allem die Unterstützung sogenannter Savepoints, die nach Maßgabe des SQL 1999 Standards implementiert wurden. Stellt man sich den Ablauf einer Datenbanktransaktion als eine Wegstrecke vor, die ein Programm zurücklegt und dabei Änderungen an den Daten in der Datenbank vornimmt, dann kann man Savepoints als Streckenpfosten verstehen, die das Programm während des Ablaufens der Strecke selbst in den Boden rammt und zwar entweder durch Aufruf einer API-Funktion oder - innerhalb von Stored Procedures bzw. Triggers - mit der neuen Anweisung SAVEPOINT <savepoint name>. Damit ist es dem Programm, das die Transaktion gestartet und die Savepoints gesetzt hat, jederzeit möglich, zu einer früheren Stelle auf der Strecke zurückzukehren, solange die Transaktion noch nicht beendet worden ist. Wenn sich das Programm zur Rückkehr zu einem dieser Streckenpfosten entschließt, werden damit alle seitdem durchgeführten Änderungen zurückgenommen. Es handelt sich quasi um ein teilweises Rollback einer Transaktion zurück zu einer vorher definierten Stelle. Listing 1 zeigt eine Einsatzmöglichkeit dieser neuen Technik am Beispiel einer Stored Procedure, die versucht, zwei Datensätze zu aktualisieren und im Falle eines Fehlers bei einem der beiden Updates (zum Beispiel Deadlock) die Änderung zurücknimmt, um auf eine andere Strategie auszuweichen.


Listing 1

create procedure Schreibe_Saldo (Betrag numeric(18,2), Soll integer, Haben integer)
as
begin
SAVEPOINT vor_dem_update;
begin
update Saldo set Betrag = :Betrag where Konto=:Soll;
update Saldo set Betrag = :Betrag where Konto=:Haben;

when any do
begin
ROLLBACK TO SAVEPOINT vor_dem_update;
insert into Saldo_Ungueltig (Konto) values (:Soll);
insert into Saldo_Ungueltig (Konto) values (:Haben);
end
end
end


Nicht ganz so spektakulär ist die zweite Neuerung in der SQL-Sprache, nämlich der DROP GENERATOR-Befehl. In früheren Version musste man sich, um einen Generator wieder loszuwerden, mit waghalsigen und undokumentierte Manipulationen an den Systemtabellen behelfen. Bei unsachgemäßer Vorgehensweise kann man dabei ziemlichen Schaden anrichten, und vielleicht hat sich Borland deshalb entschlossen, solche Eingriffe überflüssig zu machen. Des Weiteren wurden die Zeichensätze für osteuropäische Sprachen erweitert. Die volle Unterstützung von UNICODE 3.1 [6] fehlt zwar noch, soll aber im Laufe des Jahres als Patch nachgeliefert werden.

.. .und von morgen
Inzwischen wird im InterBase-Team die Version 8 ins Auge gefasst. Wie üblich gab es über zukünftige Neuerungen keine offizielle Ankündigung, aber es wurde zumindest die Richtung angesprochen, in die die Reise geht. Ganz oben auf dieser Liste standen hierbei die Punkte Grundlagenarbeit am Optimierer und Sicherheitsfunktionen. Der erste Punkt, mit dem die Verbesserung der Algorithmen gemeint ist, die eine vermeintlich optimale Zugriffsstrategie für die Ausführung eines SQL-Kommandos ermitteln sollen, wird wahrscheinlich ewig auf der Wunschliste stehen bleiben, denn es gibt kein Datenbankprodukt, dessen Optimierer sich in jeder Hinsicht optimal verhält. Nachdem aber dieser Bereich seit Jahren kaum Aufmerksamkeit erfahren hat und es hier etliche bekannte Schwächen gibt, würde eine Revision dieser Programmteile dem Produkt sicher gut tun. Bei Sicherheitsfunktionen ist an Datenverschlüsselung gedacht, und zwar sowohl in der Client/Server-Kommunikation, als auch bei der Speicherung der Anwendungsdaten auf der Serverfestplatte. Auch verbesserte Replikations- und Fehlertoleranz-Funktionen sowie einige Erweiterungen der SQL-Sprache sollen realisiert werden. Mit dem nächsten großen Releaseschritt ist erfahrungsgemäß nicht vor Jahresfrist zu rechnen.


Durchaus zufrieden zeigten sich die InterBase-Manager auch mit dem kommerziellen Erfolg ihres Produktes. Allen Unkenrufen zum Trotz habe man die geplanten Umsätze übertreffen können, womit InterBase inzwischen wieder - zwar nicht in absoluten aber in gewichteten Zahlen - zu den erfolgreichsten Unternehmensteilen gehöre.

Fazit
InterBase 7.1 ist in erster Linie ein Wartungsrelease, das etliche dringend benötigte Bugfixes bringt und in Punkto Zuverlässigkeit gegenüber der Version 7.0 einen großen Forschritt bedeutet. Die kleineren Erweiterungen des Produktes sind zwar nützlich und im Rahmen eines kostenlosen Updates natürlich sehr erfreulich. Im Vordergrund steht bei der neuen Version aber die Erhöhung der Stabilität, womit die Version 7 wahrscheinlich erst jetzt für die vielen vorsichtigen Zeitgenossen, die aus bitterer Erfahrung nicht zu den ersten Anwendern eines Hauptreleases gehören wollen, diskutabel wird.

Links und Literatur


    Hat Ihnen dieser Artikel gefallen? Dann abonnieren Sie das Entwickler Magazin direkt über unser Online-Formular.



zur vorherigen Seite
zurück
an den Anfang der Seite
nach oben
Diesen Artikel drucken
drucken
Diesen Artikel weiterempfehlen
empfehlen
Software & Support Verlag GmbH