Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

30. September 2008 um 21:36

COUNT, aber schnell!

Über den aktuellen SQL-Pass-Newsletter wurde ich auf den absolut interessanten Trick aufmerksam, wie man sehr schnell (im Sinne von "sehr performant") die Anzahl von Datensätzen in einer Tabelle ermittelt. Aber leider ist der Autor dem gleichen Fehler aufgesessen, wie ich zu Beginn meiner SQL-Server-Zeit.

Der erwähnte Trick ist sehr ausführlich im Artikel "Speeding up the Performance of Table Counts in SQL Server 2005" beschrieben. Möglicherweise ist er mit richtig vielen Datensätzen auch wirklich schneller als COUNT, aber ich kann es mir kaum denken. Das ist aber gar nicht so wichtig, weil meine Message ist: Vorsicht vor den geschätzten Kosten. Sie sind nicht richtig.

Wenn ich den Trick ausführe und den COUNT, dann zeigt auch mein Zugriffsplan in den geschätzten Werten an, dass der Trick schneller sei (der Code ist aus dem Artikel abgeleitet, nur leicht vereinfacht):

-- Trick:
SELECT SUM( p.rows )
FROM sys.partitions p
LEFT JOIN sys.allocation_units a
ON p.partition_id = a.container_id
WHERE p.index_id IN (0,1) – 0 heap table , 1 table with clustered index
AND p.rows IS NOT NULL
AND a.type = 1 – row-data only , not LOB
AND p.object_id = object_id('Person.Address')
– Hat "estimated subtree cost" von 0.028
go
– regulär:
SELECT COUNT(*)
FROM Person.Address
– Hat "estimated subtree cost" von 0.055

Wegen der "estimated subtree cost" zeigt das Management-Studio an, dass der erste Batch 33% der Zeit und der zweite 67% in Anspruch nähme. Das stimmt aber gar nicht. Der SQL-Profiler bringt es ans Licht: Der erste Batch dauert 35ms und der zweite nur 9ms. Der Prozentwert im Management-Studio spiegelt nur die geschätzten Kosten wieder. Wenn man die echte Zeit wissen will, dann muss man schon zu Kommissar Profiler gehen… 😉

PS: Schade, dass der Autor weder Kommentare zuließ, noch eine Mail-Adresse angab. Daraus schließe ich, dass er keinen Dialog wünscht. Ist das eine zulässige Annahme?

PPS: Ich sehe gerade, dass sich Steffen Krause ein paar Tage vorher mit dem gleichen Thema beschäftigte. Welch lustige Koinzidenz – er berücksichtigt aber die BLOBs nicht.

30. September 2008 um 19:00

VS Developer- und Database-Edition werden zu einem Produkt

Heute veröffentliche Microsoft eine Pressemitteilung in der alle möglichen tolles Features des Visual-Studio-2010 veröffentlicht werden. Das ist schon interessant, aber was mich glatt von Sockel haute: Die Developer- und Database-Editionen werden zu einem Produkt! Die Database-Edition ist einfach klasse, aber wahnwitzig teuer, weil die meisten Entwickler ohnehin auch schon die Developer-Edition haben. Das kam bei Microsoft inzwischen wohl auch an. Ich bin ziemlich aus dem Häuschen, weil uns damit das Leben zukünftig schon gewaltig erleichtert wird.

In VSTS 2010 werden die derzeit separat verfügbaren Development Edition und Database Edition miteinander zu einem einzelnen Produkt kombiniert. Um den Vorteil dieser Kombination schon jetzt zur Verfügung zu stellen, erhalten alle Software Assurance-Kunden und Besitzer einer Version von Visual Studio Team System 2008 (Developer oder Database Edition) die jeweils andere Vollversion ab 1. Oktober 2008 kostenlos.

Ich bin mir nicht sicher, ob das gut oder schlecht ist. Es ist gut, weil wir die Database-Editon aus Kostengründen nicht in der Firma hätten verteilen können. Es ist schlecht, weil damit die Database-Edition faktisch aufhört zu existieren. Wer weiß, ob die Weiterentwicklung der Database-Teile weiterhin so voran getrieben wird. Wer alles davon profitiert beschriebt Gerd Drapers in seinem Blog:

As an MSDN subscriber we want you to realize the benefit of this merged feature set now, which is why we are extending this exclusive offer. If you have either the Visual Studio Team System 2008 Development Edition with MSDN Premium subscription or the Visual Studio Team System 2008 Database Edition with MSDN Premium subscription, on October 1, 2008 you will have access to both the Development Edition and Database Edition through MSDN Subscriber Downloads. This change also applies to customers who purchased Visual Studio 2005 Team Edition for Software Developers with MSDN Premium Subscription and Visual Studio 2005 Team Edition for Database Professionals with MSDN Premium Subscription.

Der Blog-Artikel hat den Titel "Team Developer + Team Data = Team Developer!". Ich finde, sein Artikel klingt weniger nach Enthusiasmus als nach Wehmut. Das drückt mir dann schon eine Träne aus dem Knopfloch…

29. September 2008 um 22:18

intern gerechnet

Heute haben wir über die innerbetriebliche Beschaffung einen 8GB-USB-Stick bestellt. Der reicht derzeit noch, um unsere eigenen Double-Layer-DVDs in den Testraum zu schaffen (jaja, wir testen bevor sie produziert werden…). Was beim Erlanger Saturn im Angebot aktuell 12 Euro kostet und als Markenware (z.B. von Corsair) über Amazon 20 Euro, kostet intern knapp über 150 Euro – natürlich kein echtes Geld, sondern nur Verrechungsgeld, aber immerhin. Natürlich ist das die feinste Markenware mit Verschlüsselung ab Hersteller. Aber dennoch schluckt man bei solchen Preisunterschieden erst mal…

Da würde ich mir wenigstens wünschen, dass es bei solchen Luxusmodellen einen Schalter für den Schreibschutz gibt. Früher hatten das die ersten USB-Sticks. Das hatte den Vorteil, dass man damit Dateien auf fremde Systeme kopieren kann ohne sich versehentlich Schädlinge einzufangen. Warum gibt es die an Sticks eigentlich nicht mehr?

29. September 2008 um 21:30

benannte Constraints auf temporären Tabellen

Es gibt Dinge, die tut man einfach nicht. Ja, wirklich, da gibt es weltweite ungeschrieben Gesetze. Zum Beispiel nimmt man keine Stifte von anderen Leuten mit und von Kollegen schon gleich gar nicht. Dennoch passiert sowas immer wieder.

Genauso benutzt man in Prozeduren keine temporären Tabellen. Außer vielleicht in wenigen Ausnahmen, wo der Overhead kaum ins Gewicht fällt und sogar die Abläufe etwas vereinfacht. Aber auf diese Tabellen legt man keine benannten Constraints an. Warum auch? Will man die separat wieder entfernen können? Wenn überhaupt, dann also bitte nur "inline". Wer anderer Meinung ist, der möge weiter lesen…

Der Name von benannte Constraints muss auch auf temporären Tabellen datenbank-weit eindeutig sein. Wenn die Prozedur also parallel ausgeführt wird (dafür sind Prozeduren ja da), dann knallt es. Folgender Code in zwei Session gleichzeitig ausgeführt, ist ungesund:
IF object_id('tempdb..#bla') IS NOT NULL
DROP TABLE #bla

CREATE TABLE #bla
(ID int)

ALTER TABLE #bla
ADD CONSTRAINT c_bla_check CHECK (ID > 0)

In der zweiten Sitzung kommen dann diese netten Meldungen:

Msg 2714, Level 16, State 4, Line 1
There is already an object named 'c_bla_check' in the database.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

Das passiert mit jedem benannten Constraint, auch mit Fremd- und Primärschlüsseln – bei Indexen hingegen nicht. Dabei spricht wenig gegen anständige "inline" definierte Constraints in temporären Tabellen (außer der Performance, die verbraten wird, natürlich):

IF object_id('tempdb..#bla') IS NOT NULL
DROP TABLE #bla

CREATE TABLE #bla
(ID int
CHECK (ID > 0))

Diesen Hinweis bekam ich übrigens von meinem Kollegen Markus. Danke!

28. September 2008 um 23:05

Erweiterungen für CMS Made Simple

Heute schrieb ich meine erste eigene Erweiterung für das Content-Management-System "CMS Made Simple". Und was soll ich sagen? Es war wirklich einfach. Blöderweise fand ich keine echte Anleitung, aber für die "tags" gibt es genug Beispiele, die mit der Installation mitkommen, dass das kein Problem war. Leider kann ich den Sieg noch nicht mit der Welt teilen. Wir geben die Seite erst frei, wenn sie die anderen Features auch enthält. 😉

Falls einer mal ein "Module" für "CMSMS" schreiben will, der findet hier eine Anleitung dafür. Sie macht auf mich einen ordentlichen Eindruck. Aber das ist mir noch eine Nummer zu hart und für meine Zwecke wohl auch etwas over-sized…

28. September 2008 um 10:52

Datenpanne in Großbritannien: Soldaten auf USB-Sticks

"In Großbritannien häufen sich die Datenverluste bei Behörden." steht bei Heise-Online. Aber das glaube ich nicht. Ich denke, dass die Briten bzgl. der Information über solche Pannen schon weiter sind als wir. Ich glaube, dass es i den letzten Jahren genauso viele Pannen gab, die wurden aber einfach nur vertuscht. Außerdem bin ich davon überzeugt, dass es in Deutschland wenigstens genauso viele Datenpannen gibt. Die werden hierzulande vermutlich aber nicht veröffentlicht oder herunter gespielt.

Jedenfalls verschwanden in Britannien "drei USB-Speichermedien mit persönlichen Daten von bis zu 50.000 ehemaligen und aktuell dienenden Soldaten". Das ist ganz schön blöd für die betroffenen Soldaten…

24. September 2008 um 20:49

Free-Mail-Anbieter

Heute habe ich für einen freund mal eine Liste von Free-Mail-Anbietern gesucht. Das war gar nicht einfach. Ich poste einfach mal meine Fundstücke:

  • Eine recht kurze Liste "deutscher" Anbieter steht in der Wikipedia, z.B. fehlt hier Windows-Life. Wer mag, der kann das ja mal nachtragen.
  • Auch nicht länger, aber sehr informativ (naja, als Quelle wird ja auch Heise.de angeben).
  • Wer eine lange Liste sucht, der findet sie bei Kostenlos.de. Die Infos sind aber sehr spärlich.
  • Wer die Masse sucht, der ist bei Free
    Email Provider Guide
    gut aufgehoben. Allerdings sind nicht alle Links aktuell.

Viel Spaß.

23. September 2008 um 18:42

noreply@…de

Was soll ich von einer Firma halten, die mir eine Werbemail schickt um mich für deren Produkte zu interessieren, aber als Mailadresse "noreply@starmoney.de" angibt und noch am Ende schreibt:

Die E-Mail-Adresse noreply@starmoney.de ist keine Antwortadresse.

In der ganze Mail ist keine Mailadresse angegeben an die man sich wenden kann. Das interpretiere ich so, dass sie von mir keine Mail haben wollen. Aber meine Mail-Adresse sollte ich bei der Produktregistrierung angeben… Das kommt bei mir gar nicht gut an. So richtig überhaupt gar nicht. Wer den Dialog mit mir vermeiden will, der soll mich bitte auch mit seinen Monologen verschonen.

23. September 2008 um 00:03

user_id und suser_sid nicht zuverlässig

In den letzten Jahren hatten wir mehrere Fälle in denen die Funktion suser_sid am SQL-Server-2005 nicht anständig funktionierte. Ich habe ein paar Prozeduren geschrieben, die Logins anlegen. Darin wird meistens gefragt ob es den Login schon gibt ("IF suser_sid(N'LoginName') IS NULL …"). Wenn nicht, dann wird er mit CREATE-LOGIN angelegt. Alle paar Monate kommt es bei einem Kunden vor, dass genau hier die Meldung kommt, dass es den Login schon gibt. Das ist ziemlich eigenartig und bei uns intern nicht reproduzierbar. Beim Kunden auf dessen System kann man das dann aber sehr gut reproduzieren.

Deswegen bin ich wieder dazu übergegangen – wie damals – auf die System-Views zuzugreifen (z.B. sys.syslogins). Nicht schön, aber das funktioniert immer.

Heute trat das gleiche Problem erstmalig mit user_id() auf! Gleiches Szenario: Wenn es den User noch nicht gibt ("IF user_id(N'UserName') IS NULL EXEC sp_adduser …"), dann lege ihn an. Da kam bei einem Kunden die Meldung, dass es den User schon gäbe. Das finde ich ja sowas von lästig!

Ich rate daher – entgegen der Meinung von Microsoft – von der Verwendung von SUSER_SID und USER_ID ab. Dann wohl doch lieber die daten selber aus den System-Views lesen… 🙁

22. September 2008 um 23:53

kostenpflichtiges Kundenmagazin

Am Wochenende bekamen wir Post von Cortal-Consors: die erste Ausgabe von deren Kundenmagazin. Ich habe das mal durchgeblättert, fand aber nichts wirklich spannendes. Bis ich auf die Vorderseite sah: Die wollen glatt 3 Euro für deren Kundenmagazin haben. Coole Idee: für die zugesandte Werbung zahlt der Kunde natürlich gerne. Ich freute mich sicher auch darüber, wenn ich für die SPAM nicht nur die Zustellgebühren (Bandbreite) zahlen müsste, sondern auch noch eine kleine Gebühr vom Anbieter abgerechnet bekäme… 😉

22. September 2008 um 00:14

Verständnis

Nun bin ich ja wirklich der Letzte, der sich über Tippfehler lustig machen kann. Deswegen habe ich lange gezögert diese Panne zu posten, auf die mich Thomas aufmerksam machte. Aber wenigstens als Nordlicht hat man da so seine Assoziationen, deswegen bin ich so frei. Beim Ausgang zum überdachten Raucherplatz im Innenhof hing vor ein paar Wochen dieser Zettel:

Natürlich findet man unter dem Stichwort "Beschitung" bei Google sogar Treffer.

22. September 2008 um 00:10

Bodo Wartke über Apple und die Deutsche Telekom

Anlässlich des Geburtstages meiner Tochter beschäftigte ich mich wieder mit den verschiedenen Handies. Deswegen suchte ich auch wieder den Song von Bodo Wartke über den Exklusivvertrag von Apple mit der deutschen Telekom. Ich sah ihn vor ein paar Monaten in einem Weblog, habe aber vergessen wo. Damit ich ihn demnächst finde, hier der Link zu dem Sketch "Brief an Steve". Den finde ich absolut super.

Ein paar andere von ihm finde ich übrigens fast genauso gut:

Auf seiner Homepage sind übrigens ziemlich viele Termine eingetragen bei denen man ihn auch Live erleben kann. Zum Beispiel nächsten Monat in Fürth.