Datenbanken II
Transcription
Datenbanken II
Datenbanken II Ausarbeitung zum Thema: Oracle 10g und MS SQL Server 2005 ein Vergleich Thomas Wächtler MatrNr.: 39221 Thomas Wächtler Matrikelnummer: 39221 Inhaltsverzeichnis 0. Einführung 1. Komponenten 2. Architektur des SQL Server 2005 2.1 SQLOS 2.2 Relational Engine 2.3 Protocol Layer 3. Werkzeuge des SQL Server 2005 3.1 Object Explorer 3.2 Profiler 3.3 Tuning Anvisor 3.4 Activity Monitor 3.5 Configuration Manager 3.6 SQLCMD 4. Services des SQL Server 2005 4.1 Replikation 4.2 Reporting 4.3 Analysis 4.4 Notification 4.5 Integration 5. Vergleich SQL Server 2005 und Oracle 10g 5.1 Daten Verwaltung 5.2 Indexierung 5.3 Concurrency Control und Locking 5.4 Backup und Recovery 5.5 Datenbank Tuning 5.6 Partitionierung 5.7 Clustering 6. Quellen Seite 1 Thomas Wächtler Matrikelnummer: 39221 0. Einführung Microsoft SQL Server 2005 ist ein RDBMS (relationales Datenbank Management System) welches das alte SQL Server 2000 nach 5 Jahren Entwicklungszeit abgelöst hat. Wie Oracle mit PL/SQL hat auch Microsoft zusammen mit Cybase den SQL Standard mit der Sprache Transact-SQL (T-SQL) um Variablen, Funktionen, Prozeduren und Objekt Relationale Erweiterungen ausgebaut. Mit einer maximalen Speicherkapazität von einem ExaByte bietet der SQL Server 2005 die drittgrößte mögliche relationale Datenbank an, die nur noch von PostgreSQL und Oracle übertroffen wird. Der SQL Server 2005 ist ausschließlich für Windows-Plattformen entwickelt worden und bietet die Windows-typische grafische Benutzeroberfläche. Die mit der Version 2005 eingeführte enge Verknüpfung mit dem .NET Framework ermöglicht es Entwicklern einfacher über die integrierte API auf die Datenbank zuzugreifen und .NET Code direkt in der Datenbank Engine auszuführen. Der SQL Server ist von seiner Konzeption her ein direkter Konkurrent von Oracle und DB2 von IBM. Im Folgenden soll ein Einblick in den Aufbau, die Komponenten und Services des SQL Server 2005 gegeben werden. Weiterhin soll ein Vergleich zu Oracle 10g im Bereich der technischen Aspekte angestellt werden, der jedoch nicht auf Vorteile bzw. Nachteile hinweisen soll, sondern die Unterschiede beider DBMS aufzeigen soll. 1. Komponenten Der SQL Server 2005 beinhaltet neben der für ein DBMS wichtigsten Komponente, der Datenbank Engine, viele weitere Komponenten und Services. Datenbank-Engine: Die Engine ist das Kern Element des gesamten Pakets und beinhaltet Services zur Speicherung, Verarbeitung und Sicherung der Daten. Sie ist für den kontrollierten Zugriff auf die Daten, sowie für eine schnelle Verarbeitung von Anfragen und Transaktionen zuständig. Integration Services: Der Service wird verwendet um Daten Seite 2 aus verschiedenen Datenquellen Thomas Wächtler Matrikelnummer: 39221 zusammenzuführen und bilden somit die Grundlage für den Bereich Business-Intelligence, bei dem das Datawarehousing eine wichtige Rolle spielt. Hier werden ETL-Prozesse genutzt um Daten zu extrahieren, zu transformieren und die so bearbeiteten Daten in eine andere Datenquelle zu laden. Analytical Services: Sie sind für analytische Verarbeitung der durch die Integration Services bereitgestellten Daten zuständig. Es werden verschiedene Services für OLAP und Data Mining angeboten. Es werden MOLAP, ROLAP, HOLAP durch die OLAP-Engine unterstützt. Für Data Mining wird die DMX query language genutzt. Reporting Services: Eine Umgebung in der tabellarische, grafische oder formfreie Reports generiert werden, die klassisch oder per Web-Interface ausgewertet werden können. Hierzu werden die Integration Services genutzt, was ermöglicht, auch nicht persistente Datenquellen für Reports zu verwenden. Notification Services: Ein Service der Benachrichtigungen sendet, wenn ein bestimmtes Ereignis in der Datenbank eintritt. Dieser Service registriert sich als Trigger auf dem Datenbank-Server und versendet beim eintreten eines zuvor festgelegten Events eine Nachricht über den Service Broker, der die unterschiedlichen Komponenten zusammen synchronisiert, auf Basis des Nachrichtenaustauschs. Wird z.B. für die schnelle Übermittlung von Daten, die von Analyse Diensten erstellt wurden, verwendet. Replication Services: Wird zur Wiederherstellung und Synchronisierung der Daten in der Datenbank genutzt. Funktioniert wie eine Art Client/Server. Der DB-Server sendet eine Nachricht an alle Clients, diese wiederum aktualisieren ihren Datenbestand. .NET Framework: umfasst Klassenbibliotheken (API's), Dienste, und eine Laufzeitumgebung. Es ermöglicht die Ausführung von Programmen, die speziell für das Framework programmiert wurden. Es erleichtert durch vorgegebene Standards, die Kommunikation zwischen verschiedenen Microsoft Diensten, wie dem SQL Server und z.B. dem Visual Studio, indem es Seite 3 Thomas Wächtler Matrikelnummer: 39221 Schnittstellen bereitstellt, die von beiden genutzt werden können. SQL-Server Management Studio: ist eine Umgebung in der die Komponenten des SQL Server verwaltet, konfiguriert und entwickelt werden. Ermöglicht den Zugriff auf den SQL Server über grafische Tools und Editoren. Weiterhin gibt es Werkzeuge für Monitoring, Management, Backup und Restore. 2. Architektur des SQL Server 2005 Der Microsoft SQL Server 2005 ist in 3 Hauptbestandteile aufgeteilt: SQLOS beinhaltet die Grundlegenden Dienste, die zur Ausführung des SQL Server notwendig sind. Es beinhaltet die Verwaltung von Threads und Speicher, sowie die Ein- und Ausgabeoperationen. Die Ralational Engine implementiert die relationalen Datenbankkomponenten, wie Tabellen, Anfgragen und Stored Procedures und das Typsystem mit dem die Datenbanken arbeiten. Der Protocol Layer ist die Schnittstelle zu anderen Anwendungen, außerhalb des SQL Server. 2.1 SQLOS SQLOS implementiert Funktionen, die sonst vom Betriebssystem übernommen werden, wie Ablaufplanung von Threads, Speicherverwaltung, Resourcenmanagement, Fehlerbehandlung und Deadlock Erkennung. Da eine Datenbank anders als ein Filesystem, wie es das Betriebssystem zur Verfügung stellt, auf die schnelle und effektive Verarbeitung von Daten spezialisiert ist und auch viel mehr Daten zu verwalten hat, wurde eine eigene Speicherverwaltung für den SQL Server programmiert. Auch weitere bereits erwähnte Bestandteile mussten dafür angepasst werden. SQLOS beinhaltet eine API, die es Programmierern ermöglicht, auf die im System vorhandene Hardware zuzugreifen, ohne dabei die technische Komplexität der Hardware verstehen zu müssen. Die Hauptbestandteile des SQLOS sind Nodes, Schedulers und Tasks. Die oberste Ebene bilden die Memory Nodes, denen die CPU Nodes untergeordnet sind. Jeder CPU Node beinhaltet mehrere Scheduler, der wiederum die einzelnen Tasks ordnet um sie dann auf der CPU auszuführen. SQLOS bietet somit Support für Programmierung paralleler Prozesse. Seite 4 Thomas Wächtler Matrikelnummer: 39221 2.2 Relational Engine Die relationale Engine implemtiert die Logik für die relationale Datenbank auf Basis der durch SQLOS bereitgestellten API. Hier werden die Datentypen definiert, die dann die Objekte charakterisieren, die in Tabellen gespeichert werden. Weiterhin werden hier Objekte wie Tabellen, Indizes, Logs und andere definiert, die gespeichert werden können. Sie beinhaltet eine Storage Engine, die die Speicherung von Daten auf persistenten Datenträgern und den schnellen Zugriff auf diese Daten verwaltet. Diese Engine implementiert Log- basierte Transaktionen, sodass alle Änderungen dem ACID Prinzip genügen. Sie beinhaltet weiterhin den Query- Prozessor, der die gespeicherten Daten abruft. Die SQL Anfrage definiert, welche Daten verändert oder gelesen werden sollen, der Query- Prozessor optimiert und übersetzt die Anfrage, sodass SQLOS sie versteht und teilt sie in Sequenzen auf, die beschreiben, welche Operationen nacheinander durchgeführt werden müssen um die Daten letztendlich zu ändern oder zu erhalten. 2.3 Protocol Layer Der Protocol Layer implementiert das externe Interface zum SQL Server. Alle Operationen, die auf dem SQL Server aufgerufen werden können, werden mittels eines von Microsoft definierten Formats kommuniziert, welches sich Tabular Data Stream (TDS) nennt. TDS ist ein Protokoll, das verwendet wird um den Transfer der Daten zwischen Datenbank-Server und Client durchzuführen. TDS kann in andere Kommunikationsprotokolle wie TCP/IP oder Pipes eingebaut werden. 3. Werkzeuge des SQL Server 2005 3.1 Object Explorer Der Objekt Explorer ist das zentrale Element zur Administration des SQL Server. Er bietet eine grafische Benutzeroberfläche, in der alle auf dem Server vorhandenen Datenbanken und Objekte Seite 5 Thomas Wächtler Matrikelnummer: 39221 (Tabellen + Spalten, Relationen, Indizes, Views, Stored Procedures und Trigger) angezeigt und verwaltet werden können. Hier kann man sich zu beliebigen Diensten verbinden und alle administrativen Tätigkeiten ausführen. Der Object Explorer verbindet sich zu Datenbank Instanzen, Analyse-, Integrations-, Reporting- Diensten. 3.2 Profiler Der Profiler dient zur Analyse von Aktivitäten, wie SQL Operationen, und gibt Ausführzeiten oder I/O-Lasten an. Er überwacht eine Instanz des SQL Server oder einen Analyse Service. Die Ergebnisse der Analyse können in einer Tabelle oder in einer Datei gespeichert werden, diese nennt man auch Ablaufverfolgungsdatei. Man kann so z.B. selbst programmierte Prozeduren überwachen, deren Ausführungszeiten analysieren und ggf. die Prozedur weiter optimieren. Probleme, die zu Fehlern führen können so ebenfalls analysiert werden. Vom Grundkonzept her ähnlich in der Funktionalität wie Profiler in der Anwendungsprogrammierung, wie dem Java Profiler. Aufgaben: • Schrittweises Untersuchen problematischer Abfragen • Untersuchen langsamer Abfragen • Erfassen von problembehafteten T-SQL Abfragen (Replikation auf einem Testserver) • Überwachung der Auslastung des SQL-Server (zur Optimierung) 3.3 Tuning Advisor Der Database Engine Tuning Advisor (DTA) dient der Analyse von SQL-Abfragen. Dies dient dem aufspüren sehr lang dauernder Transaktionen, für die der Advisor auch Verbesserungsvorschläge generieren kann. Dies umfasst sowohl Vorschläge für die strukturelle Anordnung der Daten und die Verteilung auf dem Speichermedium, als auch Vorschläge für mögliche Indizes auf bestimmten Spalten. Nach der Auswertung stellt der DTA ein Script für sinnvolle Änderungen und somit zur Optimierung der Datenbank zu Verfügung. Der DB-Administrator kann dann bequem die verschiedenen Vorschläge miteinander vergleichen und Änderungen an der Struktur der Daten vornehmen. Funktionsumfang: Seite 6 Thomas Wächtler • Matrikelnummer: 39221 Empfehlen von Indizes auf bestimmten Spalten, Partitionen nach Arbeitsauslastung und indizierten Sichten • Analysieren der Auswirkungen von vorgeschlagenen Änderungen • gezielte Optimierung auf bestimmte Gruppen von kritischen Anfragen • Berücksichtigen von Alternativen • Vorschläge zur Anpassung 3.4 Activity Monitor der Activity Monitor ermöglicht die Überwachung aller Usersessions und deren Connections zur Datenbank Engine. Hier können vergebene Sperren und somit auch Dead-Locks analysiert werden um diese dann mit Hilfe anderer Werkzeuge zu beheben. Es können sowohl alle aktuellen Sperren der aktuellen Session, als auch Sperren auf bestimmten Objekten angezeigt werden. 3.5 Configuration Manager Mit dem Configuration Manager lassen sich die verschiedenen bereits erwähnten Dienste verwalten. Außerdem können hier die Netzwerkprotokolle konfiguriert werden, über die der SQL Server mit anderen Clients kommuniziert. Mit diesem Tool lassen sich die Dienst starten, anhalten, fortsetzen und beenden, oder Eigenschaften eines einzelnen Dienstes geändert werden. Es lassen sich im Bereich Protokollverwaltung die Server und Client-Protokolle bearbeiten und auch Verschlüsselung erzwingen. Vom SQL Server unterstützte Protokolle zur Übertragung sind: Shared Memory, TCP/IP, Named Pipes und VIA. 3.6 SQLCMD Dies ist ein Werkzeug mit dem interaktiv T-SQL Kommandos ausführen kann. Es ist mit der MySQL Konsole oder iSQL Plus von Oracle vergleichbar. Der Verbindung über den Kommandozeileneditor SQLCMD wird eine höhere Priorität in der Hierarchie der aktuellen Verbindungen gegeben, als einer regulären Benutzer- oder Applikationsverknüpfung. Die Ressourcen für diesen Prozess werden schon beim Start des SQL Server reserviert. Zweck Seite 7 Thomas Wächtler Matrikelnummer: 39221 dieser Anwendung ist, das trotz voller Beanspruchung aller Ressourcen der Administrator die Möglichkeit hat, im Fehlerfall notwendige Eingriffsmöglichkeiten zu haben um. Dieses Tool ist also ausschließlich für administrative Zwecke gedacht. 4. Services des SQL Server 2005 Die Services des SQL Server 2005 verstehen sich als so genannte Add-ons. Sie sind für den Betrieb nicht notwendig, liefern aber sinnvolle Funktionalitäten. Sie laufen teilweise innerhalb des SQL Server, als auch als eigenständige Windows-Prozesse mit eigener API. Die Grundideen der einzelnen Services sind unter dem 1. Komponenten zusammengefasst. Hier soll nochmal etwas detaillierter auf die einzelnen Services eingegangen werden. 4.1 Replikation Replikationen sind Technologien zum Kopieren und Verteilen von Daten und zur anschließenden Synchronisierung der gesendeten/empfangenen Daten mit dem eigenen Datenbestand. Der SQL Server unterstützt die folgenden 3 Arten der Replikation: Transaction Replication: Jede bei der Master Datenbank eingegangene Änderung des Datenbestandes wird mit allen aktuell mit der DB verbundenen Clients synchronisiert Merge Replication: Änderungen sowohl bei der Master- Datenbank als auch bei den Clients werden verfolgt und periodisch bidirektional kommuniziert und dann in den jeweiligen Server/Clients zusammengefügt. Wenn mehrere Änderungen auf einem bestimmten Objekt getätigt haben, entsteht ein Konflikt, der gelöst werden muss. Dies geschieht entweder über vordefinierte Regeln oder Manuell. Snapshot Replication: Die Snapshot Replication erzeugt eine komplette Kopie der gesamten Datenbank (Snapshot als aktuelle Ansicht auf die gesamte Datenbank in diesem Moment) und versendet diese an alle Clients, sodass diese den aktuellen Stand der Master Datenbank haben. Seite 8 Thomas Wächtler Matrikelnummer: 39221 4.2 Reporting SQL Server Reporting Services (SSRS) ist dazu gedacht Reports aus verschiedenen Datenquellen zu generieren. Dabei gibt es mehrere Möglichkeiten innerhalb der ReportErstellung: • relationale, multidimensionale und XML- Datenquellen. Es können alle möglichen multidimensionalen aus Datenbanken oder durch den Analyse Service erstellte Daten verwendet werden. Über ODBC kann auch auf Datenbanken anderer Anbieter zugegriffen werden. • Layoutmöglichkeiten. tabellarisch - für spaltenbasierte Auswertungen, matix - für zusammengefasste Daten, diagramm - für grafische Auswertungen, formlos - für alles andere, Kombination mehrerer Layouts in einem Bericht • Ad-Hoc Berichte aus dem Berichtsgenerator • Drillthroughberichte und Interaktivität. Hyperlinks und Skriptausdrücke können nach belieben eingefügt werden • Parametrisierte Berichte. Parameter um DataSets zu filtern • Aggregationen. Zusammenfassungen von Daten mittels Summe, Mittelwert... um dies alles zu ermöglichen wird für die Reports eine spezielle Mark-Up Sprache namens RDL definiert. Somit können die Berichte auch in verschiedensten anderen Formaten exportiert werden (pdf, xml). User können direkt mit dem Report Manager kommunizieren, oder über eine vordefinierte Web-Schnittstelle darauf zugreifen. 4.3 Analysis SQL Server Analsysis Services (SSAS) stellt OLAP und Data-Mining Funktionalität zur Verfügung. Es werden sowohl Server- als auch Clientkomponenten zum Bereitstellen der OLAP Funktionen verwendet. Zur Architektur: • Die Serverkomponente ist als Windows-Dienst implementiert • Die Clients kommunizieren mittels eines SOAP-basierten Protokolls (XMLA) mit dem Service • Abfragen werden mittels SQL oder MDX formuliert Seite 9 Thomas Wächtler Matrikelnummer: 39221 Grundkonzept ist UDM, das es dem Entwickler erlaubt ein universelles Modell für alle physikalischen Datenquellen zu erstellen. Es werden verschiedene Algorithmen für das Data Mining bereitgestellt, welche nach bestimmten Mustern oder Trends suchen können. Es gibt 2 verschiedene Service-Objekte: • Datenbanken mit OLAP- und Data Mining Objekten, Cubes, Dimensionen, Attributen... • Assemblys, die benutzerdefinierte Funktionen enthalten, die die Standardsprachen MDX und DMX systemintern erweitern 4.4 Notification Notfication Services bieten Abonnenten Abonnements für bestimmte Benachrichtigungsanwendungen, d.h. ein Interesse an bestimmten Ereignissen innerhalb der Datenbank. Ein Ereignis kann nach einem vordefinierten Zeitplan übermittelt werden, oder sofort bei eintreten. Dabei können diese Nachrichten an verschiedene Geräte, wie Mobiltelefone versendet werden. Der Notification Service selbst ist eine Programmierumgebung in dem Anwendungen geschrieben werden können, die solche Nachrichten versenden. Die Anwendung muss nach der Programmierung auf der Notification Plattform bereitgestellt werden. 4.5 Integration SQL Server Integration Services (SSIS) ist eine Plattform zur Erstellung von Datenintegrationslösungen, die aus mehreren Datenquellen Daten Extrahieren, diese auf ein einheitliches Format transformieren und anschließend in eine neue Datenquelle zusammengeführt laden (ETL). Der SSIS besteht aus 4 Komponenten: • Dienst: Verwaltet die Speicherung und überwacht die Ausführung von SSIS Paketen • Objektmodell: Verwaltet API für Schnittstelle zum Zugriff auf SSIS-Tools • Laufzeit: Speichert Layout von Paketen und unterstützt die Protokollierung, Konfiguration, Verbindungen und Transaktionen • Datenfluss: stellt Puffer im Arbeitsspeicher bereit mit denen Daten von der Quelle Seite 10 Thomas Wächtler Matrikelnummer: 39221 zum Ziel verschoben werden, es verwaltet die Transformationen auf den Daten 5. Vergleich SQL Server 2005 und Oracle 10g Microsoft bietet mit dem SQL Server 2005 ein im Umfang und der Funktionalität ähnliches Produkt wie Oracle mit der aktuellen Version 10g. In diesem Kapitel sollen beide DBMS miteinander verglichen werden. Dieser Vergleich soll keinen Sieger küren, sondern die Unterschiede und Gemeinsamkeiten der Beiden Produkte erläutern. 5.1 Daten Verwaltung Oracle 10g: Das Oracle DBMS speichert Daten auf 2 verschiedenen Ebenen. Die erste ist die logische Ebene, wo die Daten in so genannten Tablespaces gespeichert werden und der physischen Ebene, wo die Daten in Dateien organisiert sind. Die logische Ebene besteht aus einem oder mehreren Tablespaces. In der logischen Ebene werden die Benutzerdaten im SYSTEM Tablespace gespeichert. Ein Benutzer kann auf dem USERS Tabelspace mehrere Tabellen, Stored Procedures, Sequencen etc. haben. Jeder Benutzer ist als Schema in der Datenbank gespeichert und kann auch nur auf Tabellen innerhalb zugreifen, die für sein Schema freigegeben sind. Diese Zugriffsrechte sind im Data Dictionary, das sich ebenfalls im SYSTEM Tabelspace befindet, definiert. In der physischen Ebene gibt 3 Stufen, in denen die Daten organisiert sind. Die kleinste Stufe sind die Daten Blöcke (auch ORACLE Block oder Seite). Diese Blöcke können Index Blöcke und auch Datenblöcke sein. Oracle allokiert Speicherplatz in Form solcher Blöcke. Die nächst höhere Stufe sind die Extends. Ein Extend ist eine bestimmte Anzahl an zusammenhängenden Daten Blöcken. Ein Extend wird allokiert um Informationen eines bestimmten Typs zu speichern. Die höchste Stufe sind die Segmente. In einem Segment sind mehrere Extends vorhanden, die zu einem Tabelspace gehören. Wenn ein Extend im Segment voll ist, allokiert das Segment einen weiteren Extend hinzu, diese werden also nur bei Bedarf angehängt. Ein Datenblock ist somit die kleinste Einheit im System und ist so auf einem physischen Datenträger gespeichert. Über den Header des Blocks kann nun auf diesen zugegriffen werden, wenn er von der Platte gelesen werden soll. Seite 11 Thomas Wächtler Matrikelnummer: 39221 SQL Server: Einen Tablespace wie bei Oracle gibt es beim SQL Server nicht. Hier werden die Daten in separaten Datenbanken gespeichert. Wobei jede Datenbank von der anderen sowohl logisch als auch physisch unabhängig ist. In einer Datenbank sind jeweils deren Tabellen, Sequenzen, Trigger, Stored Procedures etc. gespeichert. Sie bildet nach außen hin ein geschlossenes Gebilde, sowohl physisch als auch logisch. Bei Oracle ist der USER Tablespace für alle Tabellen zuständig. Dadurch sind unterschiedliche Schemata indirekt durch die Speicherung miteinander verbunden und eine Oracle Instanz muss alle Daten Schemata auch die gerade nicht benötigten Verwalten. Somit ist es nicht möglich mehrere unabhängige Instanzen des Oracle Server laufen zu lassen, die auf den selben Tablespace zugreifen müssen. Beim SQL Server können Datenbanken jedoch komplett als eigenständiges Gebilde verwaltet werden und somit die Daten effektiver voneinander getrennt werden, wenn der Anwender mehrere Datenbanken verwalten möchte. Ähnlich zu Oracle 10g werden die Daten physikalisch in so genannten 8KB großen Pages gespeichert, das ist die grundlegende Einheit für I/O-Operationen des SQL Server. Wie bei Oracle gibt es Extends, diese sind aber nicht von variabler Größe, sondern beinhalten immer 8 Pages. Dabei kann es passieren, dass ein Datenbank Objekt alle 8 Pages des Extend belegt (uniform extend) oder sich bis zu 8 Objekte den Platz teilen (mixed extend). Eine Eintrag in einer Spalte der Datenbank kann nur auf eine Page geschrieben werden, ist somit auf 8 KB beschränkt. Sollte die Größe doch überschritten werden, muss der Eintrag in eine neue Page (oder eine Reihe von Pages) geschrieben werden (Alloction unit) und ein Zeiger zu diesen in die ursprüngliche Page gesetzt werden. 5.2 Indexierung Indexe sind für den schnellen Datenzugriff und können somit die Dauer von I/O-Operationen stark verkürzen, was die Performance einer Transaktion entscheidend verbessern kann. Die folgende Tabelle zeigt, welche Indexverfahren von den jeweiligen Systemen unterstützt werden. Seite 12 Thomas Wächtler Matrikelnummer: 39221 Indextyp Oracle 10g SQL Server 2005 B-Baum Index ü ü B-Baum Index (geclustert) ü ü Hash Index (geclustert) ü O Heap Index (ungeclustert) O ü Reverse Key Index ü Bitmap Index ü Bitmap join Index ü Funktionsbasierter Index ü Bereichs Index ü O O O O O Index-organisierte Tabellen ü ü Volltext Index O ü Sowohl Oracle als auch SQL Server bieten den B-Baum Index an, der eine geordnete Liste von Schlüsseln enthält, die auf den jeweiligen Dateneintrag auf dem Datenträger verweisen. Beide bieten diese Art des Index auch für geclusterte Indexierung. Oracle eigen sind die Bitmap Indizes. Hier werden nicht die Inhalte der einzelnen Zeilen aus der Tabelle im Index verwaltet, sondern ein Zeiger auf den Eintrag gesetzt, der die Bedingung erfüllt. Somit wird weniger Speicherplatz verbraucht, was jedoch zum ermitteln der Werte einen etwas höheren Rechenaufwand mit sich bringt. Bitmap Join Indizes enthalten Zeiger auf die Daten in den jeweils zu verknüpfenden Tabellen, sodass im besonderen Fall Joins gespart werden können, wenn zuvor Regeln dafür definiert wurden. Zusätzlich zu den B-Baum Indizes bietet SQL Server 2005 den Volltext Index, der auf der Windows Suchfunktion basiert. Hierbei führt nicht der SQL Server den Such-Task aus, sondern das OS auf dem er installiert ist. Da Windows immer den Search Service installiert hat, wird diese Aufgabe vom Betriebssystem ausgeführt. Das Problem dabei ist, das auch das OS den Index verwaltet und somit kein Backup oder Recovery möglich ist. Die Volltextsuche ermöglicht es Teile eines gesuchten Eintrages in Form von Strings einzugeben und dazu die betroffenen Spalten auszugeben. 5.3 Concurrency Control und Locking Seite 13 Thomas Wächtler Matrikelnummer: 39221 Die Überwachung gleichzeitig stattfindender Operationen auf dem selben Datenbestand einer Datenbank und die Sicherstellung der Konsistenz der Daten während parallel ablaufender Transaktionen, ist ein wichtiger Bestandteil eines DBMS. Bestandteile sind das Locking und die Isolation Levels. Beide Anbieter bieten die Möglichkeit schon vor Beginn irgendwelcher Transaktionen Sperren auf bestimmten Tabellen anzulegen. In der folgenden Tabelle ist gegenübergestellt, welche Sperren auf Tabellen jeweils möglich sind. Sperre (Oracle) Sperren(SQL Server 2005) RS (Row Shared) IS (Intent Shared) RX (Row Exclusive) IX (Intent Exclusive) S (Shared) S (Shared) SRX (Shared Row Exclusive) SIX (Shared Intent Exclusive) X (Exclusive) X (Exclusive) - U (Update) - BU (Bulk-Update) Exclusive DDL Lock Sch-M (Schema Modification) Shared DDL Lock Sch-S (Schema Shared) Oracle sowie SQL Server unterstützen beide alle gängigen Sperrverfahren. Zusätzlich bietet SQL Server noch 2 weitere Verfahren an um Tabellen zu sperren. Das wäre zum einen das Update Lock, welches zwischen dem Shared und dem Exclusive Lock liegt. Diese Art des Sperren wird verwendet, wenn noch nicht feststeht, ob eine Änderung in einer Tabelle stattfindet, sollte es zu einer Änderung kommen wird dieses Lock in Exclusive Lock automatisch umgewandelt, wenn nicht, dann wird es ein Shared Lock. Die Besonderheit hier ist, das 2 Update Locks nicht mit einander kompatibel sind. D.h. wenn bereits ein Update Lock vorliegt, wird kein weiteres gestattet, ein Shared Lock ist jedoch noch möglich, was bei einem SIX Lock nicht mehr möglich ist. Das BU ist dazu gedacht, wenn große Datenmengen in eine Tabelle geladen werden, diese zu sperren. Besonders ist hier, das auch das Auslesen der Struktur der Tabelle dabei unterbunden wird, d.h. Sch-S ist ebenfalls verboten, was bei allen anderen Sperren (außer Sch-M) jedoch erlaubt ist. Oracle und MS SQL Server bieten verschiedene Isolation Levels: Seite 14 Thomas Wächtler Isolationlevel Matrikelnummer: 39221 Oracle 10g SQL Server 2005 Read Committed ü ü Read Uncommitted ü Repeatable Read O O Serializable ü ü Read Only ü Explizites Locking ü ü ü (Snapshot) ü Beide Systeme unterstützen des Read Committed Level. Bei diesem sieht die aktuelle Transaktion ausschließlich die vor dem Beginn stattgefundenen Änderungen und arbeitet mit diesen. Das kann ein Unrepeatable Read, oder ein Phantom Read verursachen. SQL Server bietet zusätzlich noch das Read Uncommitted, was es einzelnen Transaktionen ermöglicht, uncommittete Änderungen von anderen Transaktionen zu sehen und das Repeatable Read, was sicherstellt, das auch bei wiederholtem Lesen die selben Ergebnisse erzielt werden können. Beide unterstützen mit Serializable die höchst mögliche Isolations-Ebene, in der die Transaktion ablaufen, als würden sie nacheinander durchgeführt. Das von Oracle 10g verwendete ReadOnly Verfahren ist dem Snapshotverfahren des SQL Server in der Wirkungsweise sehr ähnlich. Oracle stellt mit Versionsvergabe für die einzelnen Transaktionen sicher, das Daten, die jede einzelne Transaktion benötigt, auch beim Update durch eine andere Transaktion noch vorhanden ist. SQL Server dehnt dies soweit aus, das ein komplettes Abbild der zu bearbeitenden Daten gemacht wird und in einer neuen Datenbank (TempDB) gespeichert wird. Somit hat jede Transaktion ihre eigenen konsistenten Daten und es müssen keine exklusiven Sperren auf die Tabellen vergeben werden. Weiterhin bieten beide Anbieter die Möglichkeit das Locking selbst zu bestimmen. Bei beiden kann das Isolation Level transaktionsbezogen geändert werden, siehe Tabelle. 5.4 Backup und Recovery Backups werden dazu benötigt, um bei System-Crashes sicher zustellen, das alle Daten, die in der Datnebank vorhanden waren, wieder zur Verfügung gestellt werden können. Recovery Seite 15 Thomas Wächtler Matrikelnummer: 39221 ist wichtig, wenn ein System während der Laufzeit einen kritischen Fehler erzeugt und abstürtzt und noch nicht beendete Transaktionen auf der Datenbank ausgeführt wurde. In diesem Fall helfen Logs diese Transaktionen nachzuvollziehen und sie ggf. zu wiederholen, oder ungültig zu machen. Es gibt 4 verschiedene Arten eine Datenbank in Oracle mithilfe eines Backups zu sichern: • Export/Import. Dies sind logische Backup Operationen, die logische Definitionen einer Datenbank in einer Datei speichern • Offline Backup. Wenn die Datenbank vom Netz genommen wird, werden hier alle Daten, Logs und Kontroll- Dateien auf einen anderem Datenträger gesichert • Online Backup. Hier wird das Backup während des laufenden Betriebes gemacht. Bei dieser Form des Backups müssen die Log-Files weiterlaufen um Änderungen während der Backup-Phase ebenfalls zu speichern. • RMAN Backups. Hierzu wird der Recovery Manager von Oracle benutzt. Sollte eine Datenbankanwendung abstürzen, obwohl noch nicht alle Transaktionen beendet wurden, kommt das Recovery ins Spiel. Oracle hat zu diesem Zweck 3 wichtige Log-Dateien, die jeden Vorgang überwachen: • Das Control File beinhaltet Informationen, wie den Datenbank Namen, Zeitstempel für die Erstellung der Datenbank, Namen der DDL Files und des Redo-Log-Files, sowie den letzten Checkpoint, an dem der Status der Datenbank vollständig gespeichert wurde. • In die Online Redo Log Files werden alle Änderungen gespeichert, die während des laufenden Betriebes gemacht werden. In den Redo- Records werden neue Änderungen gespeichert, die eine Transaktion vorgenommen hat, in den UndoRecords werden die Daten vor der Änderung gespeichert, damit das System in jeder Situation die Möglichkeit hat, den korrekten Wert beim Recovery zu setzten. • Die Archived Redo Log Files sind Redo Log Files, die nur noch Redo Informationen enthalten und bereits in ein Log Archiv gespeichert wurden. Der Recovery Manager bietet hier die einfachste Art und Weise seine Datenbank effektiv zu sichern. Der SQL Server 2005 bietet mehrere Strategien für das Recovery an: Seite 16 Thomas Wächtler • Matrikelnummer: 39221 Simple. Ermöglicht es lediglich zum letzten vollständigen Backup zurückzugehen, da das Transactionlog hier nicht gespeichert wird. • Full. Hier wird zusätzlich das Transaction Log gespeichert, sodass man zu jeder beliebigen Position vor dem Absturz zurückkehren kann • Bulk Logged. Hier werden die normalen Datenbankoperationen in den Transaction Logs gespeichert, jedoch nicht die Erstellung von Indizes oder das laden per Bulk Load (siehe Bulk-Update unter Concurrency Control und Locking) Die wichtigste Datei beim SQL Server ist das Transaction Log File, das wie das Redo Log File von Oracle, alle Transaktionen aufzeichnet, um jeden beliebigen konsistenten Punkt wiederherstellen zu können. Die Methode des SQL Server wird Systemintern geregelt, man muss sich nur für eine der 3 oben genannten Methoden entscheiden. Oracle bietet mehr Vielfalt, ist aber auch komplizierter zu handhaben. 5.5 Datenbank Tuning Datenbank Tuning kann von Indexoptimierung, über Abfrageoptimierung, bis hin zu Änderungen an der Speicherverwaltung gehen. Hier soll ein kurzer Überblick in nicht technische Aspekte des Tunings. SQL Server und Oracle bieten unterschiedliche Möglichkeiten Aggregat-Funktionen die sich auf Spalten einer Zeile beziehen effektiver in Indizes zu speichern. Oracle bietet die Möglichkeit Indizes auf eine Funktion zu legen, die zu einer speziellen Spalte gehört. SQL Server bietet die Möglichkeit einen Index direkt auf der Spalte, deren Inhalt durch eine Funktion berechnet wird. Diese beiden Ansätze sind im Prinzip äquivalent und nennt sich "function based index". SQL Server gibt zusätzlich die Möglichkeit beim erstellen/ändern einer solchen Spalte das Schlüsselwort PERSISTED zu verwenden um anzuzeigen, das diese Spalte auch physisch gespeichert werden soll. Im Unterschied zu SQL Server ist bei Oracle 10g die durch den funktionsbasierten Index indirekt definierte Spalte nicht physisch in der Datenbank vorhanden. Ein solcher Index (Oracle) oder eine Spalte mit entsprechendem Index (SQL Server) kann die Performance bestimmter Anfragen, die sich auf eine Aggregation mehrerer Einträge in einer Zeile beziehen, stark verbessern. Auch im Bereich der Optimierung von Views gibt es unterschiedliche Konzepte auf beiden Seite 17 Thomas Wächtler Matrikelnummer: 39221 Seiten. SQL Server bietet die Indexed Views und Oracle die Materialized Views. Um große und teure Joins zu vermeiden, bietet Oracle Materialized Views, die einen View als Tabelle in der Datenbank speichern und so auch Informationen in einer Tabelle vereinen, die sonst über komplexe Joins errechnet werden müssten. SQL Server hingegen erzeugt einen Index auf einem bestimmten View, der phsikalisch gespeichert wird. Verwendet man einen Clustered Index auf dem ensprechenden View hat man das selbe Ergebnis wie der Materialised View von Oracle bietet. Nachteile hierbei ist jedoch, das man auf einen Index keine Funktionen wie DISTINCT, SUM, etc. anwenden kann, somit ist die Oracle Variante was die Auswertung betrifft leistungsstärker, verbraucht aber auch mehr Speicherplatz im Vergleich zum Index auf dem View. Beide Ansätze beinhalten das Problem, das bei starker Änderung der einzelnen Spalten, die auf den View Einfluss haben, auch der View angepasst werden muss. Dies Beeinflusst die Materialized Views stärker als die Index Views, da dort nur der Index angepasst werden muss. Diese Methode ist also nur sinnvoll, wenn die Anfragen schwerer wiegen, als die Änderungen der Basis-Tabellen. SQL Server bietet mit dem Tuning Advisor ein sehr nützliches Tool an, das beim Finden von optimalen Indizes, Sichten und Partitionen hilft. Dabei wertet es voll automatisch die Datenbank nach Struktur und häufigen Anfragen aus und macht Vorschläge für Optimierungen (siehe auch 3.3 Tuning Advisor). 5.6 Partitionierung Partitionierung erlaubt es große Tabellen, Indizes und komplexe Strukturen in kleinere Stücke aufzuspalten. Dieses Verfahren wird hauptsächlich zur Übersichtlichkeit und Wartbarkeit der Daten eingesetzt, bietet aber unter bestimmten Umständen auch Performance Verbesserungen. mögliche Partitionierungsmethoden für Tabellen sind: • Aufteilen einer Tabelle indem die Tabelle horizontal aufgespalten wird, d.h. es werden die Zeilen einer Tabelle auf mehrere von der Struktur her gleiche Tabellen aufgeteilt. Ist z.B. bei einer Geschichts-Datenbank sehr nützlich, wenn sie in mehrere Zeiträume aufgeteilt wird. Seite 18 Thomas Wächtler • Matrikelnummer: 39221 Hash- Partitionierung benutzt eine Hash-Funktion um die einzelnen Zeilen einer Tabelle neuen Tabellen zuzuordnen. • Function Partitionierung bietet die Möglichkeit die Daten über eine bestimmte Funktion aufzuteilen • Listen Partitionierung. In Listen kann genau definiert werden, in welcher Reihenfolge die Zeilen auf die jeweiligen Tabellen abgebildet werden sollen. • gemischte Partitionierung erlaubt es mehrere Partitionierungs-Techniken anzuwenden. Wenn man z.B. eine Tabelle per Hash partitioniert und die Partitionen wieder mittels Listen in weitere Partitionen aufsplittet. mögliche Methoden für Indizes sind: • Lokale Indizes sind von der Partitionierung her genauso aufgebaut, wie die zu Grunde liegenden partitionierten Tabellen. D.h. ein partitionierter Index gehört genau zu einer partitionierten Tabelle. • global Partitionierte Indizes sind Indizes, die nicht nach Art der Tabelle partitioniert sind. Solch ein Index kann für eine partitionierte Tabelle, oder eine nicht partitionierte Tabelle angelegt werden • nicht partitionierte Indizes sind normale Indizes, wie sie normaler Weise für eine nicht partitionierte Tabelle verwendet werden Von Oracle und SQL Server werden folgende Möglichkeiten zur Partitionierung angeboten: Partition Typ Oracle 10g SQL Server 2005 Range ü ü Hash ü O Function O ü List ü ü Composite ü O Lokale Indizes ü ü Globale Indizes ü ü SQL Server verfolgt mit dem funktionsbasiertem Partitionieren eine andere Strategie, als Oracle mit hashbasiertem Partitionieren. Durch Funktionen kann der Anwender viel genauer Seite 19 Thomas Wächtler Matrikelnummer: 39221 bestimmen, wie die Tabelle aufgeteilt werden soll, wohingegen durch Hashing eine gleichmäßigere Verteilung der Daten möglich ist. Unterschiede bestehen aber besonders in der maximalen Anzahl an Partitionen, während Oracle bis zu 1 Million Partitionen pro Tabelle erlaubt, sind es beim SQL Server lediglich 1000. 5.7 Clustering Cluster sind eine Reihe von unabhängig voneinander positionierten Servern, die über ein Netzwerk miteinander verbunden sind, so dass sie als ein ganzes System zusammenarbeiten können. Im Datenbank Technischen Sinn ist dies also eine Datenbank, die auf verschiedenen Servern läuft, aber als eine Datenbank betrachtet wird. Clustering findet hauptsächlich bei sehr großen Datenbeständen Anwendung, wenn ein einzelner Server nicht mehr die Kapazitäten hat, sei es speicherplatztechnisch, oder leistungsmäßig, zur Abarbeitung der einzelnen Transaktionen. Oracle verfolgt eine andere Strategie beim Clustering als der SQL Server 2005. Oracle ermöglicht es eine Datenbank auf mehrere Server zu verteilen und nach belieben neue Knoten (Server) zum Cluster hinzuzufügen, wenn es der Umstand erfordert. Dies ist auch dicht an das Konzept zur Verwaltung der Daten innerhalb der Datenbank gekoppelt. Der Vorteil ist, das die Last gleichmäßig auf alle Server verteilt werden kann, was die Skalierbarkeit, Parallelität und Performance sehr stark verbessert. Außerdem gibt es nur ein DDL File, das die Struktur der gesamten Datenbank beinhaltet. SQL Server bietet eine indirekte Clusterung, indem eine Datenbank in mehrere Datenbanken per Partitionierung aufgeteilt werden. Nachteil hierbei ist, das nur der Server, auf dem die angefragte Partition vorhanden ist, diese auch verändern, bzw. auslesen kann. Somit ist die Geschwindigkeit von den einzelnen Rechnern abhängig und widerspricht dem eigentlichen Konzept der Clusterung. Vorteil der SQL Server Methode besteht nur dann, wenn die Datenbanken unabhängig voneinander sind. Das Problem der Oracle Methode ist die Überwachung der gleichzeitig stattfindenden Transaktionen. Im Prinzip ist das Cluster eine große Datenbank und damit ist die Bearbeitung der Daten sehr von der Implementierung der Datenbank Engine abhängig. Seite 20 Thomas Wächtler Matrikelnummer: 39221 6. Quellen Neutraler Vergleich von Oracle 10g und SQL Server 2005 ● http://www.wisdomforce.com/dweb/resources/docs/MSSQL2005_ORACLE10g_compare.p df Oracle Whitepaper zum technischen Vergleich ● http://www.oracle.com/technology/deploy/performance/pdf/twp_perf_oracle%20databa se%2010gr2%20vs%20ss2005.pdf Übersicht SQL Server 2005 ● http://www.datenbank-spektrum.de/pdf/dbs-16-34.pdf ● http://en.wikipedia.org/wiki/Microsoft_SQL_Server Oracle Architecture ● http://ugweb.cs.ualberta.ca/~c391/manual/chapt2.html ● http://www.ucertify.com/article/THE-ORACLE-10g-ARCHITECTURE.html Concurrency Control & Locking ● http://www.db.cs.ucdavis.edu/teaching/289F/handout-5-6.pdf ● https://www.indiana.edu/~dbateam/resources/tips/oracle_locking.ppt ● http://www.sws.bfh.ch/~schmd/db/MEMOS/Oracle%20Isolation%20Levels.pdf ● http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htm Partitionierung ● http://www.oracle.com/technology/products/bi/db/10g/pdf/twp_general_partitioning_10 gr2_0505.pdf Microsoft SQL Server 2005 ● http://msdn.microsoft.com/de-de/library/ms130214.aspx ● http://technet.microsoft.com/de-de/library/ms130214.aspx Seite 21