Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

8. November 2006 um 21:23

SQL Playback Programm

Was im ersten Moment wie eine neue Idee für ein Musikportal klingt, ist in Wirklichkeit eine gute Idee zur Qualitätssicherung.
Microsoft möchte gerne automatisierte Tests mit echten Daten und echten Anwenderszenarien durchführen. Damit können sie bei zukünftigen SQL-Server-Hotfixes und -SPs einfach ein "Replay" der eingeschickten Profiler-Traces machen und sehen, ob irgendwelche Fehler auftreten. Das ist zwar für uns Kunden schon einiger Aufwand (Auswahl der Szenarien, Aufzeichnen, Testen, einschicken), aber dürfte sich auch für uns lohnen, damit wir nicht erst einen Bug anmelden müssen, wenn der SP erst mal da ist.

Details beschreibt Steffen in seinem Artikel "SQL Playback Programm – Ihre Workload als Test für zukünftige SQL Server Versionen".

Das machen wir übrigens auch seit einigen Jahren, allerdings ist das wegen des notwendigen Datenschutzes nicht ganz so einfach: Man benötigt für einen genau festgelegten Zeitraum die schriftliche Erlaubnis des Anwenders, die Rechner dürfen nicht im Firmennetz hängen, müssen in speziell gesicherten Räumen stehen, muss danach alle Kopien "erasen" (einfach Löschen reicht nicht) und muss die Datenträger zurückschicken (oder darf sie im Auftrag des Kunden gleich zur Vernichtung schicken).

Trotz des ganzen Theaters lohnt sich der Aufwand: in unseren "normalen" Tests finden wir eben doch nicht alle Probleme…

8. November 2006 um 21:02

Die zwei Programmierer: Wer ist besser?

Als ich "The Parable of the Two Programmers" las habe ich mich natürlich für den jungen Newcomer gefreut. Und den Kopf geschüttelt als ich das Ende las.
Aber wenn ich es (ganz hypothetisch) aus der Sicht des Managers sehe, dann hätte ich von dem Jungen wegen seiner Arbeitseinstellung wohl auch nicht so doll viel gehalten, obwohl er eindeutig der Intelligenteste von allen war. Intelligenz alleine macht eben noch keinen guten Mitarbeiter aus. Aus der "globalen Sicht" also mit dem Vergleich zum anderen Team sieht das natürlich anders aus. Dann sieht es so aus als ob es sicher einen Versuch wert wäre so einen Genius "auf Linie" zu bringen.

Leider ist es im zweiten Fall (also bei dem Team) für einen Managers noch viel schwerer zu erkennen, dass das Team hier "überzogen" implementiert hat. Aber es ist ja zum Glück nur eine Parabel….

gefunden bei TheDailyGrind

8. November 2006 um 20:57

Indexes am SQL-Server-2005: nicht alles geht "online"

Durch die aktuelle Ausgabe des SQL-Server-Magazine wurde ich auf ein Problem aufmerksam: Wenn man LOBs (Large Objects) in einem Index speichert, dann kann man verschiedene Dinge nicht tun. Dazu reicht es schon, wenn das LOB-Feld nur auf der Index-Seite gespeichert ist, bspw. beim Clustered-Index.

online operations

Dazu steht in den "Guidelines for Performing Online Index Operations":

When you perform online index operations, the following guidelines apply:
Clustered indexes must be created, rebuilt, or dropped offline when the underlying table contains large object (LOB) data types: image, ntext, text, varchar(max), nvarchar(max), varbinary(max), and xml.

Kimberly L. Tripp beschreibt es in dem SQL-Server-Magazine-Artikel "Database Design for Performance" noch etwas genauer:

SQL Server 2005 allows any column to be in the leaf level of an index—including LOB types. If a LOB type is in the leaf level of an index, the index won't support online operations.

Das gilt also auch für Clustered-Indexes und betrifft im Wesentlichen "ALTER INDEX REBUILD". Wenn es rechtzeitig vorher weiß, dann sollte das kein Problem sein. Dann kann man nötigenfalls die Tabelle auf zwei aufteilen…

unerwartete Fehlermeldung

Meines Erachtens besteht aber auch ein Zusammenhang zu folgendem Phänomen: In bestimmten Fällen erscheint bei einem Update eine unerwartete Fehlermeldung:

The query processor could not produce a query plan from the optimizer because a query cannot update a text, ntext, or image column and a clustering key at the same time.

bzw.

Msg 8629, Level 16, State 3, Line 1 – Warnung: Der Abfrageprozessor konnte aus dem Optimierer keinen Abfrageplan erzeugen, da eine Abfrage nicht gleichzeitig eine text-, ntext- oder image-Spalte und einen Gruppierungsschlüssel aktualisieren kann.

Um bei einem UPDATE in das Problem zu laufen, müssen folgende Bedingungen erfüllt sein:

  • Die Tabelle hat einen Clustered Index.
  • Die Tabelle hat wenigstens ein Feld vom Typ IMAGE, NTEXT, TEXT, NVarchar(max), Varchar(max), Binary(max) oder XML.
  • Der Inhalt des Feldes wird nicht in dem Datensatz gespeichert.
  • Der Zugriffsplan ist so ausgelegt, dass mehrere Datensätze geändert werden (selbst wenn tatsächlich nur einer da ist).

-- ggf. Testtabelle löschen
if object_id('tempdb..#t1') is not null
drop table #t1
go
– Testtabelle anlegen
create table #t1 (
c1 int not null,
c2 int not null,
primary key clustered (c1,c2),
c3 text null,
c4 int identity)
go
– Tabelle mit Testdaten füllen
insert #t1 values (1,7,'test')
go
– Das geht problemlos:
update #t1 set c2=10, c3='test again' where c2=7
go
– Die Fehlermeldung verursachen:
update #t1 set c2=10, c3=replicate('x',8000)+replicate('y',8000) where c2=7

go
– ggf. Testtabelle löschen (aufräumen)
if object_id('tempdb..#t1') is not null
drop table #t1

Als Abhilfe kann ich zwei Möglichkeiten anbieten:

  1. Den Custered Index entfernen oder in einen "normalen" Index ändern.
  2. Das Statement wird in zwei Einzelteile zerlegt: einen auf die LOB-Spalten und einen auf die anderen.

8. November 2006 um 12:17

Process Monitor v1.0

Es gibt Neuigkeiten von Sysinternals. Nach dem Kauf durch MS hatte ich nicht ernsthaft mit neuen Tools gerechnet. So kann man sich täuschen…
In der TechnNet gibt es jetzt sogar einen eigenen Bereich "Sysinternals"!

Dort steht seit zwei Tagen das neue Killer-Tool für alle Windows-Entwickler:

Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. It combines the features of two legacy Sysinternals utilities, Filemon and Regmon, and adds an extensive list of enhancements including rich and non-destructive filtering, comprehensive event properties such session IDs and user names, reliable process information, full thread stacks with integrated symbol support for each operation, simultaneous logging to a file, and much more.

Hier gibt mehr Infos zum Process Monitor und den Download .

gefunden bei heise.de

|