Christoph Muthmann
Architektur und Administration
- InsideSQL.org Blogs
- Frank Kalis
- tosc
- Klaus Oberdalhoff
- cmu
- Sascha Lorenz
- Olaf Pietsch
- Christoph Ingenhaag
- Uwe Ricken
Architektur und Administration
Aug 31st
ERworld 2010 is the FIRST Online Conference Dedicated Completely to Data Modeling and the Data Management Professional—BY Data Professionals, FOR Data Professionals, and 100% Focused on Data Professionals. CA ERwin realizes the importance of hearing from our community of Customers, Experts and Partners. Here, we will highlight these premier sessions across all areas of Database Design and Modeling including Data Profiling, Process Modeling, ERP integrations and collaborative Model Management.
Website: www.erwin.com/erworld
Aug 24th
Ich habe schon einige Zeit über die Frage nachgedacht: Wofür steht eigentlich DBA? Die meisten interpretieren es als Datenbank-Administrator, aber einige eben auch als Datenbank-Architekt. Die Unterschiede sind fliessend und es gibt viele Überschneidungen. Die Diskussionen mit Glenn Berry vor einiger Zeit, der sich selber auch als Database Architect sieht, haben diese Überlegungen noch mal neu in Gang gebracht. Auf einer englischen Web-Site habe ich mal diese Beschreibung gefunden:
Erfahrung im System Design, Business Intelligence, Programmierung und dazugehörige Fertigkeiten sind Grundlagen um ein Datenbank-Architekt zu werden. Die primäre Funktion eines Datenbank-Architekten ist es die Struktur von Tabellen und Datenbanken zu definieren um effiziente System-Antwortzeiten zu erreichen, die Duplizierung von Daten zu reduzieren und Systemlogik zu integrieren. Fortwährende Wartung der Datenbanken inklusive Löschungen, Archivierungen und Optimierungen bilden einen Kernbereich des Aufgabengebiets.
Schon mein Vater war Architekt, hat allerdings Häuser geplant und den Bau überwacht. Ich sehe meine Aufgaben ähnlich, wobei ich zusätzlich auch noch Teile der Administration übernehme, wie sich unschwer aus meinen blog-Einträgen herauslesen lässt.
Jul 20th
Auch wenn ich die Ursache dieses Problems noch nicht klären konnte, will ich hier eine kurze Beschreibung geben und eine Lösungsmöglichkeit aufzeigen.
Vor einer Serverumstellung hatte ich schon mal auf dem neuen System einige Testdatenbanken restored und schon ein paar Logins angelegt. Diese Logins hatten die Datenbanken als Default-Datenbank. Während der Umstellung wurden die produktiven Datenbanken (Full + Differential) auf das neue System restored. Die vorher angelegten Logins blieben erhalten. Alle weiteren Logins wurden angelegt.
Nur bei den vorher angelegten Logins bekamen die Anwender Fehlermeldungen:
Error: 18456, Severity: 14, State: 11. Login failed for user 'Domäne\Konto'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors.
Bei der Suche nach der Ursache habe ich zuerst die Liste der Status-Codes gefunden, welche sich ohne den Support bearbeiten lassen.
Status 11 sagt also "Valid login but server access failure". Bei der weiteren Suche bin ich dann auf ein SQL gestossen, was mir die Berechtigungen der Logins anzeigt
SELECT t2.name,t1.*
FROM sys.server_permissions t1 , sys.server_principals t2
WHERE t1.grantee_principal_id = t2.principal_id
AND t1.TYPE<>'R'
ORDER BY name;
Bei der Liste fiel auf, dass für die problembehafteten Logins kein Eintrag vorhanden war. Nun galt es nur noch die fehlende Berechtigung zu setzen:
USE MASTER
GO
GRANT connect sql TO [Domäne\Konto];
und schon konnten die User sich anmelden.
Jul 16th
Heute bekam ich von meinem Bruder den Hinweis auf ein nettes kleines Tool für Screenshots. Gerade wenn man häufiger Dokumentationen mit Grafiken erstellt, auf denen auch mal der Mauszeiger sichtbar sein soll, oder bestimmte Bereiche doch lieber unscharf sein sollen, kann dies hilfreich sein.
Man findet dieses Tool hier als kostenlosen Download. Man sollte beachten, dass .NET Framework eine Vorraussetzung ist, aber wer das Management Studio installiert hat, hat dies ja bereits.
Ein weiteres Tool heißt Screen-OCR und ermöglicht es einfach mal Texte vom Monitor aus Bildschirmausschnitten und Grafiken in die Zwischenablage zu kopieren. Autor ist Martin Richter, ein deutscher Visual-C++ MVP.
Jul 13th
Falls es auf der Platte mal eng wird, kann man mit Data-Compression (Daten-Komprimierung) einige Objekte verkleinern und wieder Platz schaffen. Allerdings setzt dieses Feature die Enterprise Edition vorraus.
Doch sollte man nicht übersehen, dass der eigentliche Vorteil dieser Option darin besteht, das IO-Geschäft zu beschleunigen und damit den Abfragen, die sich mit großen Tabellen beschäftigen mal etwas Beine zu machen.
Vorraussetzung für den sinnvollen Einsatz von Data-Compression ist aber nicht nur die Enterprise Edition, sondern auch noch verfügbare CPU-Zeit, da Data-Compression das IO-Geschäft durch eine erhöhte Rechenleistung reduziert.
In meinem Produktionsumfeld gab es einen Join über 23 Tabellen, von denen jede ca. 2 GB groß war. Das Ergebnis dieses Joins waren ca. 15 GB, die in eine neue Tabelle geschrieben wurden. Der Server verfügt über 32 GB RAM. Normalerweise benötigte diese Abfrage ca. 14 Stunden und die CPU-Belastung währenddessen kam über 10% kaum hinaus. Wir haben dies nun so umgestellt, dass alle zugrundeliegenden Tabellen auf PAGE-Ebene komprimiert werden. Die Abfrage benötigt jetzt weniger als zwei Stunden und die CPU-Belastung lag bei ca. 30%.
In der Online-Doku gibt es ausführliche Informationen zur Komprimierung. Hier möchte ich nur einige wenige Code-Schipsel beitragen um mal die Richtung vorzugeben:
Welche Objekte gibt es und wie ist die Komprimierung eingestellt?
SELECT o.OBJECT_ID,
S.name AS [schema],
o.name AS [Object],
I.index_id AS Ix_id,
I.name AS IxName,
I.type_desc AS IxType,
P.partition_number AS P_No,
P.data_compression_desc AS Compression
FROM sys.schemas AS S
JOIN sys.objects AS O
ON S.schema_id = O.schema_id
JOIN sys.indexes AS I
ON o.OBJECT_ID = I.OBJECT_ID
JOIN sys.partitions AS P
ON I.OBJECT_ID = P.OBJECT_ID
AND I.index_id= p.index_id
WHERE O.TYPE = 'U'
ORDER BY [schema], [object], i.index_id;
Welche Einsparungen habe ich bei der einen oder anderen Komprimierungs-Methode zu erwarten?
EXEC sp_estimate_data_compression_savings 'dbo','meineTabelle',NULL,NULL,'PAGE';
EXEC sp_estimate_data_compression_savings 'dbo','meineTabelle',NULL,NULL,'ROW';
Wie kann ich Objekte komprimieren?
ALTER TABLE dbo.meineTabelle rebuild WITH (data_Compression = PAGE);
-- Indizes
ALTER INDEX IX_meineTabelle_1 ON dbo.meineTabelle rebuild WITH (data_Compression = PAGE);
Die Daten-Komprimierung ist also neben Indizes eine weitere Möglichkeit Abfragen zu beschleunigen, indem die IO-Last reduziert wird.