Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

21. Mai 2007 um 22:45

Das Datenbank-Lied

Roy Osherove hat auf seinem Blog ein selbstgetextetes Lied über eine Datenbank mit schlechter Performance geschrieben und dazu auch gleich vertont.

Text und MP3 befinden sich in seinem Artikel "It's Time For Violence: A song about Databases".

Text-Ausschnitt:

That stored procedure aint lookin' well

Who wrote that trigger should go to jail

and that index, It is slower than a snail

What the hell

Viel Spaß!

gefunden bei The Daily Grind
21. Mai 2007 um 18:57

Verbindungseinstellungen

Wenn man sich mit einer Anwendung zum SQL-Server verbindet, dann kann und sollte man über die Sitzungsseinstellungen das Verhalten des SQL-Servers konfigurieren. Das ist recht kompliziert, weil

Die für eine Session tatsächlich geltenden Optionen kann man auf zwei Arten herausbekommen. Entweder auf die "harte Tour": @@OPTIONS enthält die Werte in kodierter Form. Um sie im Klartext zu bekommen, kann man sich behelfen.

select
name as "SetOption",
(case when @@options&number=number then 1 else 0 end) as "Status"
from master..spt_values
where type=(select type
from master..spt_values
where number=0 and name='@@options')
and number != 0

Das Ergebnis sieht beispielsweise so aus:

SetOption                           Status
=======                             =====
disable_def_cnst_check              0
implicit_transactions               0
cursor_close_on_commit              0
ansi_warnings                       1
ansi_padding                        1
ansi_nulls                          1
arithabort                          1
arithignore                         0
quoted_identifier                   1
nocount                             0
ansi_null_dflt_on                   1
ansi_null_dflt_off                  0
concat_null_yields_null             1
numeric_roundabort                  0
xact_abort                          0

Alternativ kann man auch DBCC verwenden. Hier werden nur die Optionen angezeigt, die tatsächlich aktiv sind. Ein ARITHIGNORE = OFF wird also nicht angezeigt.
dbcc useroptions

Wie man sieht, werden aber auch so nützliche Sachen wie DATEFORMAT oder LANGUAGE angezeigt:

SetOption                  Value
=======                    =====
textsize                   2147483647
language                   Deutsch
dateformat                 dmy
datefirst                  1
lock_timeout               -1
quoted_identifier          SET
arithabort                 SET
ansi_null_dflt_on          SET
ansi_warnings              SET
ansi_padding               SET
ansi_nulls                 SET
concat_null_yields_null    SET
isolation level            read committed
18. Mai 2007 um 20:24

Überstunden und die Gesundheit

Neulich erzählte ein Kollege, dass in seinem Team ziemlich viele Kolleginnen und Kollegen gesundheitliche Probleme haben. Sie führen das auf die anhaltend hohe Arbeitsbelastung zurück. Vertreten war Tinnitus (mehrfach), Bandscheibenvorfall, Schlafstörungen und psychische Probleme (wenn ich mich richtig erinnere). Damals dachte ich noch, dass ich in dem Team nicht gerne wäre. Interessant fand ich auch, dass unser Boss das primär als Führungsproblem im Team ansah.

In der Süd-Deutschen-Zeitung steht jetzt ein Artikel ("Unsinn Überstunde") zu diesem Thema drin, der den Zusammenhang zwischen Überstunden (=Arbeitsbelastung?) und Gesundheitsschäden sehr gut belegt.

Wie viele Untersuchungen zeigen, steigen die Beschwerden mit der Wochenarbeitszeit an. Rücken- und Magenschmerzen, Schlafstörungen und Herzprobleme nehmen zu. Die Leistungsfähigkeit leidet. Unternehmen, die ihre Mitarbeiter dazu anhalten, möglichst lange zu arbeiten, schaden sich damit selber.

Aus eigener Erfahrung kann ich eine Feststellung bestätigen:

Schon ab der siebten Stunde fällt die Leistungsfähigkeit ab, die Fehleranfälligkeit nimmt zu. Bei der Wochenarbeitszeit ist nach 35 bis 38 Stunden Ende der Fahnenstange.

Daher mache ich am späten Nachmittag nach Möglichkeit am liebsten Routinetätigkeiten bei denen ich nicht viel nachdenken muss. Späte Anfragen oder Hilfegesuche kosten mich erheblich mehr Kraft als am nächsten Morgen.

gefunden auf Peter's Peregrinatio
18. Mai 2007 um 20:23

Trigger – wie viele Sätze sind betroffen?

Gestern las ich bei coreworxx den Artikel "UPDATE Trigger – schon mal reingefallen?" und wollte auch gleich einen Kommentar schreiben. Weil ich dazu aber einen Google-Account einrichten müsste, antworte ich lieber hier und setze einen Trackback…
Schade, weil ich jetzt erst mal den Kontext herstellen muss, damit man nicht erst den einen Artikel lesen muss, um diesen zu verstehen. Übrigens liebe ich es Artikel über SQL-Themen zu lesen: also bitte nicht abschrecken lassen…

Andreas Gümbel beschreibt in dem Artikel, wie man mittels der Tabellen INSERTED und DELETED mitbekommt wie die Werte des geänderten Datensatzes vor und nach der Änderung kommt. Hier eines seiner Beispiele:

CREATE TRIGGER [TRIGGER_NAME_Update] ON [dbo].[myTableName]
FOR UPDATE
AS
DECLARE @myInsertId int
SELECT @myInsertId=myTableId FROM INSERTED
[weitere Verarbeitung …]

Das ist völlig korrekt beschrieben.
Aber dennoch würde ich von diesem Statement abraten. Es geht strikt davon aus, dann immer nur ein einziger Datensatz geändert wird. Um die optimale Performance zu erreichen werden in Datenbanksystemen aber immer möglichst alle betroffenen Datensätze mit einem Schwupps geändert.
Ich merke immer wieder, dass es gerade altgedienten Programmierern schwer fällt, dass man jetzt nicht mehr mühsam alles über eine Schleife machen muss: In SQL macht man das mit einem einzigen Befehl. Hier mein Lieblingsbeispiel: Alle Mitarbeiter der Datenbankbetreuung bekommen eine 10%ige Gehaltserhöhung…

UPDATE Stammdaten.Mitarbeiter
SET Gehalt = Gehalt * 0.1
WHERE team='Datenbanktechnologie'

Das Statement dauert fast genau so lange wie der Update eines einzelnen Datensatzes. Deswegen macht man eher selten einen Update auf einen Satz. Und selbst wenn man jetzt fest überzeugt ist, dass man niemals mehrere Sätze gleichzeitig wird. Sollte man das dennoch vorsehen, weil sich meiner Erfahrung nach sehr schnell die Randbedingungen ändern und "Puff" knallt der Trigger mitten im laufenden Betrieb an die Wand.
Das ist übrigens eine Tuningmaßnahme, die ich immer wieder bei Performanceanalysen empfehlen muss: Mengenupdates anstelle von Schleifen. In der ersten Runde geht es meist auf gar keinen Fall, weil man ja in dem jeweiligen Objekt keine Infos darüber hat, welche anderen Objekte sonst noch betroffen sind. Wenn der Druck von Seiten der Kunden steigt, geht es meistens doch…

Daher: Im Trigger selber bitte immer die Verarbeitung von mehreren Datensätzen vorsehen.

17. Mai 2007 um 12:51

Übersichtsartikel: SQL-Server-Replication

Robyn Page bietet in dem Artikel "SQL Server Replication Crib Sheet" einen sehr schönen Übersichtsartikel rund um die Replikation des SQL-Servers. Das freut mich besonders, weil ich in letzter Zeit immer wieder zu dem Thema und nach Übersichtsartikel dazu befragt wurde. 🙂

Neben den ausgezeichneten weiterführende Links im Artikel von Robyn Page (ganz unten), möchte ich Folgende explizit nennen:

17. Mai 2007 um 12:50

Ist offshore Luftblase Nummer eins?

Wenn man sich die neueste Gulp-Umfrage anschaut, dann wird mit überwältigender Mehrheit "offshore", also das Auslagern von IT-Dienstleistungen nach Übersee (z.B. Indien oder Malaysia), als Luftblase Nummer eins angesehen. Ich frage mich dabei allerdings, ob das Geschäftsmodell wirklich platzt oder ob hier der Wunsch der Vater des Gedankens ist. Befragt wurden immerhin die Leute, die IT-Dienstleistungen anbieten bzw. einkaufen. Die meisten Befragten haben daher durchaus ein eigenes Interesse daran, dass die IT in D bleibt. Das gilt auch für den normalen Projektleiter, der natürlich lieber mit Ansprechpartner in D zu tun hat oder gar um seinen Job fürchten müsste, wenn die IT abgegeben wird.

Ich persönlich halte auch nichts davon, die Aufgaben in "Billiglohnländern" erledigen zu lassen. Meine persönliche Erfahrung ist, dass die Erfassung der Anforderungen der ein ganz zentraler Schritt im Projekt ist. Dazu ist der intensive Kontakt zu den betroffenen Abteilungen ganz wichtig. Und das nicht nur in der Anfangsphase, sondern die ganze ZEit: begleitend müssen Stände abgestimmt werden, wenn die Software die notwendige Akzeptanz haben soll.
In allen Projekten ändern sich im Laufe der Zeit wichtige Randbedingungen oder gar die Bedürfnisse. Wenn diese Infos nicht immer wieder aktiv von den Entwicklern abgeholt werden, bleiben sie auf der Strecke. Und damit letztlich auch das Projekt.

Um dem Rechnung zu tragen, gibt es ja sogar schon Firmen, die die "Inder" für die Zeit des Projektes einfliegen, damit der Kontakt da ist. Ich weiß allerdings nicht, ob das dann noch unter "offshore" läuft. 🙂

GULP – Knowledge Base: Umfrage-Ergebnis: Luftblasen 2007

17. Mai 2007 um 12:49

neue Demo-DB

Kaum passt man mal nicht auf, da verpasst man etwas wichtiges. Aber zum Glück hat mich der Newsletter des SQL-Server-Magazine noch darauf hingewiesen: Es gibt eine neue Demo-Datenbank für den SQL-Server-2005.

Sie heißt "AdventureWork Light" und ist eine kleine niedliche DB, die alles enthält, was man braucht. Tatsächlich fand ich die neue Adventure-Works auch so klobig, das ich für meine Schulungen immer noch die "Northwind" verwendete. Und das nicht bloß aus Faulheit, damit ich meine Schulungen nicht ändern muss, sondern auch für völlig neue Schulung, wie die zum Thema "XML mit dem SQL-Server-2005".

Die AdventureWorks ist zwar viel vorbildlicher als die Northwind, aber eben so komplex, dass ich schon eine ganze Stunde investieren müsste, um den Schulungsteilnehmer die DB-Struktur zu erklären…

Die Neue ist hingegen klein und recht leicht zu verstehen. Ob das eine Alternative ist, muss ich mal schauen, wenn ich versuche meine erste Schulung darauf umzustricken…

Der Dwnload findet sich auf der Seite "SQL Server 2005 Samples and Sample Databases February 2007" gut versteckt. deswgeen hier auch noch der direkte Link.

15. Mai 2007 um 20:32

Unit-Testing ohne Ende

Heute habe ich zum dritten mal in den letzten Tagen Kollegen von meine Erfahrungen mit den Unit-Tests für Datenbank-Objekte erzählt. Dazu benutze ich die "Visual Studio Team Edition for Database Professionals", die ich eigentlich wegen anderer Dinge angeschaut habe.
Das interessant daran ist, dass ich mittlerweile zwar schon recht deutlich ein paar Nachteile sehe, aber schon denke, dass es sich schon fast alleine wegen der Units-Tests lohnt die sehr teure Lizenz anzuschaffen.

Es wird einem echt viel Arbeit abgenommen und man muss sich nur um wenige Dinge selber kümmern. Man kann alles Testen, das sich mit SQL ausdrücken lässt: Prozeduren, Funktionen, Views, Trigger, sogar Assemblies.
Ich denke, es eignet sich besonders gut für entwicklungsbegleitendes Testen.

Hier ein paar Schattenseiten, die ich schon fand:

  • Für Negativ-Tests muss man gewünschte Fehlermeldungen in einem Catch-Block auffangen und schauen, ob der gewünschte Fehler auftrat. Wenn nicht, muss man einen Fehler werfen. Das geht schon, ist aber unnötig aufwändig: Es wäre schön, wenn man eine Test-Bedingung "Fehler xy tritt auf" angeben könnte.
  • Es gibt keine Test-Bedingung, die ein ResultSet mit einer Datei vergleicht. Allerdings war es nur ein geringer Aufwand so eine Erweiterung selber zu schreiben.
  • Man kann nicht automatisch die gleichen Tests mit verschiedenen Datenbanken (z.B. mit verschiedenen Datenmengen oder Konstellationen) hintereinander ausführen. Mann muss dazu selber etwas außen rum machen, dass die DBs "austauscht" und die Tests dann neu startet. Dazu hatte ich noch keine Lust, äh Zeit, wird mir aber vermutlich nicht erspart bleiben.

Ich glaube, dass ich langsam aus dem Hype rauskomme und in die Phase "get real" reinrutsche… 😉

13. Mai 2007 um 13:17

digitales Zeichenbrett

Ich habe mich schon immer gefragt, wie heutzutage die Comics entstehen. Hier sieht man den Stand der Technik.


Wacom Digital Drawing TabletWatch more funny videos here

Wenn man bedenkt, dass man das früher mit Papier und Bleistift gemacht hat…

11. Mai 2007 um 21:22

TreeSize – Wer macht sich hier so dick?

Einer der Werkzeuge, die ich seit den 90er Jahren immer auf meinem aktuellen PC installiere, ist "TreeSize". Das Werkzeug erfasst auf Zuruf alle Dateien in einem bestimmten Verzeichnis oder einer Partition und stellt die dann recht übersichtlich dar. In die Liste mit den Verzeichnissen kann man dann rein "drillen" und bekommt jeweils den aktuellen Platzbedarf angezeigt. Dabei kann man wählen, ob die Dateigröße angezeigt und summiert werden soll oder der tatsächlich belegte Plattenplatz. Die beiden Werte weichen bei ungünstigem Verhältnis zwischen Cluster- und Dateigröße teilweise ganz erheblich ab. Gleiches gilt, wenn man die Dateien komprimiert speichert, dann aber in die andere Richtung.

Man ruft es bequem über das Kontextmenü im Explorer auf und dann rödelt er eine Zeit lang vor sich hin. Er zeigt dabei immer den aktuellen Zwischenstand an. Es ist schon spannend, was man da für dicke Brummer entdeckt…

Das Tool gibt es in den Ausgaben "Professional", "Personal" und eine kostenlose für Privatleute. Erstere nutze ich in der Firma. Letztere reicht für den heimischen Bedarf eigentlich aus. Die mittlere hatte ich noch nicht.
Leider haben beiden mir zugänglichen Varianten einen unschönen Tick: Sie folgen offenbar Verknüpfungen auf Netzlaufwerke und wundern sich dann laut (Info-Message), dass hier bestimmt Dinge nicht gehen. Jedenfalls meckern beide Varianten, wenn ich den Ordner "Dokumente und Einstellungen" mit in der Auswahl drin habe. Die Anzeige stimmt dann trotzdem. 🙂

Dennoch kann ich es wärmstens empfehlen. Für mich ist das Tool ein absolutes Muss!
Ich nutze noch eine alte Version 1.74, die ist sehr stabil und zuverlässig. Die aktuelle Version 2.1 kann vermutlich schon einiges mehr, das habe ich aber noch nicht ausprobiert. (Zum Ausprobieren von Tools muss ich in der richtigen Stimmung sein.)

Weiterführende Links:

Alternativen:

  • SequoiaView – als es 2002 rauskam, da waren alle wegen der Darstellung völlig aus dem Häuschen, aber irgendwie tut sich da nichts mehr. Mir persönlich ist die Listendarstellung lieber…
  • OverDisk – habe ich aber noch nicht ausprobiert
  • Folder Size – geht auch in die Richtung, machte das System aber etwas träge, als ich es ausprobierte

Im Heise-User-Forum hat Matt Drayton übrigens noch eine Reihe von Alternativen gesammelt. 😉

11. Mai 2007 um 20:13

Oh, its oPhone

Ich habe mich fast weggeschmissen vor Lachen bei dieser iPhone-Parodie. Einfach super! Witzige Spots ist man ja eigentlich von Microsoft nicht gewohnt, aber vielleicht beginnen hier neue Zeiten…
In meinen Augen ist das besser als manche Comedy. Was mich zu der Vermutung verleitet, dass es vielleicht gar nicht von MS ist?

gefunden in Prometeo und Tobbis Blog
10. Mai 2007 um 22:33

Humor bei der Arbeit

Jetzt ist auch das durch eine Studie belegt: Lachen bei der Arbeit ist gesund und beugt Frust vor. Und Chefs, die mit Ihren Mitarbeitern lachen und scherzen sind bessere Führungskräfte. Manchmal ist es schon erstaunlich, dass es erst einer Studie bedarf, um derartige Wahrheiten "managementfähig" zu machen… 😉

Kern der Lehre: Mitarbeiter, die viel lachen, sind stressresistenter, selbstbewusster und sehr viel kreativer. Witze können Konfliktsituationen die Schärfe nehmen, Kritik besonders pointiert zusammenfassen, Teams zusammenschweißen.

Dem kann ich nur zustimmen. Außerdem macht die Arbeit so noch mehr Spaß und erhöht dadurch letztlich die Produktivität…