SQL Server Master-Class Seminare – Für Alle, die es genau wissen wollen – Start im Mai mit Extended Events

Mein Erster Blog Post hier ist teils in eigener Sache, auf der anderen Seite aber für Euch und alle, die Wiss- und Lernbegierig in Sachen SQL Server sind:

Ich werde häufig darauf angesprochen, ob ich nicht mal ein Buch schreiben möchte, um mein Wissen so weiterzugeben, oder Deep-Dive Seminare anbiete, wie es einige andere Kollegen in den USA tun.

Um ein Buch zu schreiben, habe ich leider nicht die Zeit. Ein komplettes Buch würde mich zu sehr von der Praxis abhalten - und Praxis ist das A und O - zumal es ständig neue Dinge zu lernen gibt.

In Seminaren und Vorträgen hingegen, hat man einen kurzen Zyklus, und sieht den Erfolg direkt. Abgesehen davon, das ich mein Wissen gerne weitergebe, macht die Interaktion einfach Spaß.

Ich habe mir überlegt, und mich auch unter Kollegen umgehört, was an anderen Angeboten, die ich selber oder andere kennengelernt haben, störte, und kam zu folgenden Kern-Punkten:

  1. Reine Präsentation mit zwar Deep-Dive Inhalten, aber kaum eine Chance, diese mit Übungen direkt vor Ort zu festigen (sehr typisch für die USA, ob PreCon-“Workshops” oder Seminare, das ist eher immer Vortragsstil und Demos, aber keine echten “Hands-On”) – und nach der Schulungswoche hat man oft keine Zeit mehr dafür.
  2. Viele Themenkomplexe innerhalb einer oder mehrer Wochen, die man gar nicht alle mehr benötigt, aber Bestandteil der 5 Tage sind. – Und diese 5 Tage sind dann auch komplett blockiert.
  3. Weite und damit teure Anreise.

Und nun ist es soweit: ab diesem Sommer biete ich eine eigene Deep-Dive Trainingsreihe, “SQL Server Master-Classes” an.

 SQL Server Master-Classes

Und was ist hier anders?:

  1. Es sind immer Übungen und auch Zeit für diese eingeplant, so dass man das gerade erlernte gleich ausprobieren kann. In den SQL Server Master-Classes, die “Workshop” in der Bezeichnung tragen, beträgt der Praxisanteil ca. 40%.
  2. Server Master-Classes sind jeweils 1 - max. 3-tägige Veranstaltungen, die jeweils einen Themenkomplex abdecken.
    Z.B. 1 Tag “Concurrency” mit allem, was zum Thema Transaktions-Isolation, Locking & Blocking gehört, oder 2 Tage “Indexe, Statistiken und Partitionierung”, denn das Thema ist ein einem Tag nicht zu schaffen. Beides lässt sich aber einzeln buchen, obwohl es insgesamt natürlich zum Thema “Performance” gehört.
  3. “Learn from a Master” - Zum einen sind dies die ersten regulär angebotenen offenen Seminare mit einem Certified Master (MCM + MCT) als Instruktor in und aus Deutschland
    Microsoft-Certified-Master
    - zum anderen kann ich für die in Frankfurt laufenden Seminare einen absoluten Knüllerpreis für Bahnfahrer anbieten: 99,- Euro für Deutschlandweite An- und Abreise. (Details dazu auf der webseite: www.sarpedonqualitylab.com/SQL_Master-Classes.htm)
  4. Nur um Sicherzugehen: der Vergleich mit MOC-Kursen wird gar nicht erst versucht. Hier geht es nicht nur um Best Practices, sondern es soll erlernt werden, was dahinter steckt, um den BESTEN Weg zu ermitteln, und nicht die “allgemeine Best Practice”.
  5. Natürlich wird sich auch ganztägig um das leibliche Wohl gesorgt. Die Seminare finden in einer hochwertigen Location statt, und ein Mittagsmenü sowie Pausensnacks (Kaffee, Tee, Kuchen uä.) und “Getränke-Flat” gehören dazu.

Und nun zu den Inhalten:

Folgende Themenkomplexe sind derzeit vorbereitet:

  • Workshop Tracing mit Extended Events in SQL Server (1 Tag)
  • Workshop Fortgeschrittene Techniken für Tracing mit mit Extended Events in SQL Server (1 Tag)
  • Concurrency - Transaktionen, Isolation Level und Sperren (1 Tag)
  • Indexe, Statistiken und Partitionierung (2 Tage)
  • Optimierung von Prozeduren und Funktionen (1 Tag)
  • Performance und Analysetechniken & -Tools + Workshop (2 Tage)
  • Baselining & Benchmarking (1 Tag)
  • Sicherheitsworkshops (Essentials, Vertiefung für Entwickler, Vertiefung für Administratoren, je 1 Tag)
  • Wiederherstellungsstrategien und Techniken (1 Tag)
  • Workshop Hochverfügbarkeit (2 Tage)
  • Beyond Relational mit SQL Server - Filestream, FileTable, FullTextSearch, Geospatial (1 Tag)
  • Workshop Replikation (1 Tag)

Und los geht es mit XEvents:

  • Workshop Tracing mit Extended Events in SQL Server (1 Tag)
    • Frankfurt am Main, 17.5.2013
  • Workshop Fortgeschrittene Techniken für Tracing mit mit Extended Events in SQL Server (1 Tag)
    • Frankfurt am Main, 18.5.2013

Bis zum 29.3. läuft noch der Super-Early-Bird, und bis zum 22.4. der Early-Bird!
Für den ersten Termin gibt es keine freien Plätze mehr. Daher haben wir einen 2. Termin zum 13. und 14.Juni gepant. Anmeldungen sind ab jetzt möglich. (dafür gibt es auch wieder einen Early-Bird-Tarif)
Mitglieder der PASS Deutschland e.V. erhalten einen Rabatt von 10%

Hier geht es zur aktuellen Liste und Anmeldung: www.sarpedonqualitylab.com/SQL_Master-Classes.htm

happy learning,

Andreas

------------------------------------------------------------------------

Andreas Wolter | Microsoft Certified Master SQL Server

MCT, MCITPDD, MCITPBID, MCITPDA, MCDBA, MCSA, MCTS
Sr Technical Consultant & Architect Datenbanken & BI

Sarpedon Quality Lab

Locking & READONLY Filegroups vs READONLY Databases // Sperren & READONLY Dateigruppen vs READONLY Datenbanken

(en)
The Topic Locking and Read-Only for filegroups and databases is one of the ongoing myths around SQL Server in forums – and at least half of the information unfortunately wrong.
Since I recently fell into the trap myself, I want to write down, how it really is.

To have a definite picture, I made 3 test series under 3 different isolation levels:
  • Read Commited (the default)
  • Read Uncommitted (equal to the often misunderstood “NOLOCK”)
  • Repeatable Read

     

    The Setup:


    Tested under:
    Microsoft SQL Server 2012 - 11.0.2376
    A Test using SQL Server 2008 R2 produced identical results

    The base is a simple table, which has a Clustered Index. Altogether it consists of 36 pages
    (In case you wonder about the name – I had also tested with a single-Page table)

(de)
Das Thema Sperren im Zusammenhang mit Readonly Filegroups und Datenbanken geistert immer wieder durch die Foren - und mindestens zur Hälfte leider mit Falschinformationen angereichert. Da ich kürzlich selber in die Falle tappte, möchte ich hiermit schwarz auf weiß festhalten, wie es sich wirklich verhält.

Um ein eindeutiges Bild zu erhalten, habe ich Testreihen unter 3 verschiedenen Isolation Levels durchgeführt:

  • Read Commited (also dem Standard)
  • Read Uncommitted (gleichbedeuted mit dem ebenfalls gerne missinterpretierten “NOLOCK”)
  • Repeatable Read

    Das Setup:

    Getestet unter:
    Microsoft SQL Server 2012 - 11.0.2376
    Ein Test unter SQL Server 2008 R2 ergab identische Ergebnisse

    Basis ist eine simple Tabelle, welche mit einem Clustered Index versehen ist. Insgesamt besteht sie aus 36 Pages.
    (Falls ihr Euch über den Namen wundert: ich hatte auch Test mit einer single-Page Tabelle gemacht)

 

Databases

 

Read-Only Filegroup


USE
LockingDemo_RW
go
exec sp_help'BigTable'

Data_located_on_filegroup
PRIMARY

index_name    index_description
PK__BigTable__3213E83FFF01B718    clustered, unique, primary key located on PRIMARY

USELockingDemo_RO

Data_located_on_filegroup
PRIMARY

index_name    index_description
PK__BigTable__3213E83FFF01B718    clustered, unique, primary key located on PRIMARY

Identical structure so far except the database LockingDemo_RW_FG_RO – here the Table resides on filegroup FG_RO Also ein identischer Aufbau, bis auf die Datenbank LockingDemo_RW_FG_RO – hier ist die Tabelle auf der Filegroup FG_RO

USELockingDemo_RW_FG_RO

Data_located_on_filegroup
FG_RO

index_name    index_description
PK__BigTable__3213E83FC5587D01    clustered, unique, primary key located on FG_RO

The first/upper query shows the total amount of data, the lower is used as the test query: Die die erste/obere Abfrage zeigt die Gesamtdatenmenge, die untere wird als Testabfrage verwendet:

1)
SELECT * FROM BigTable

(1000 row(s) affected)

Table 'BigTable'. Scan count 1, logical reads 36, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 

2) – The Testquery / die Testabfrage

SELECT
* FROM BigTable

    WHERE id BETWEEN 100 AND 200

(101 row(s) affected)

Table 'BigTable'. Scan count 1, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 

This is what the test looked like (abbreviated): So sah der Testlauf aus (abgekürzt):

--====================

--  1

--====================

 SET TRANSACTION ISOLATION LEVEL READ COMMITTED

 

USELockingDemo_RW

go

 BEGINTRAN

 SELECT * FROM BigTable

    WHERE id BETWEEN 100 AND 200

 COMMITTRAN

 

USELockingDemo_RO

go

 BEGINTRAN

 

SELECT * FROM BigTable

    WHERE id BETWEEN 100 AND 200

 

COMMITTRAN

 

USELockingDemo_RW_FG_RO

go

 BEGINTRAN

 SELECT * FROM BigTable

    WHERE id BETWEEN 100 AND 200

 COMMITTRAN

 

USEmaster

 --====================

-- 2

--====================

 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

 ...

 --====================

-- 3

--====================

 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

 ...

 

Parallel to that, an extended events session was running (Lock-escalation isn’t happening in this scenario) Parallel dazu lief eine Extended Events session
(Lock-Escalation tritt in diesem Szenario nicht auf)

 CREATE EVENT SESSION [Locking] ON SERVER

ADD EVENT sqlserver.lock_acquired(

    ACTION(package0.event_sequence,sqlserver.database_id,sqlserver.is_system,sqlserver.session_id)

    WHERE ([sqlserver].[database_id]>=(23) AND [sqlserver].[database_id]<=(25)))

ADD TARGET package0.event_file(SET filename=N'D:\SQLData\SQLData1\Locking.xel')

WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)

GO 

 

Results

(Locks with granularity / resource_type = DATABASE left out)

1. Read Committed

Resultate

(Sperren mit Granularität / resource_type = DATABASE ausgelassen)

1. Read Committed

  Locks under Read Committed

2. Read Uncommitted

(for obvious reason I left out the sub-totals :-)

2. Read Uncommitted

(aus offensichtlichem Grund habe ich die Zwischensummen weggelassen :-)

 Locks under Read Uncommitted

3. Repeatable Read

3. Repeatable Read

 Locks under Repeatable Read

A note about Statistics und eXclusive Locks on ReadOnly-Databases:

Yes, one can indeed watch X-Locks on Read-Only databases. And this happens when auto-created stats jump in.
This works only starting with SQL Server 2012. The statistics themselves are stored in Tempdb.
In order to create those, SQL Server generates SCH_S and METADATA locks on several system objects (here: sysallocunits, sysschobjs, sysobjvalues, syssingleobjrefs, sysobjkeycrypts):

Eine Bemerkung zu Statistiken und eXklusive-Sperren auf schreibgeschützten Datenbanken:

Ja, tatsächlich kann man auch auf Read-Only Datenbanken hin und wieder X-Locks beobachten. Und zwar wenn auto-created Statistics einspringen.
Das funktioniert erst seit SQL Server 2012. Dabei werden die Statistiken selber in der Tempdb hinterlegt.
Um sie zu erzeugen, generiert SQL Server SCH_S und METADATA Locks auf diverse Systemobjekte (hier: sysallocunits, sysschobjs, sysobjvalues, syssingleobjrefs, sysobjkeycrypts):

image

This is of course not the most common scenario, but it does happen (especially in AlwaysOn scenarios with read-only secondaries involved) and belongs to a complete picture.

-

Besides that one can see on first sight, that there is no diffference in the Locking behaviour beetween the table on a ReadWrite Filegroup (here Primary) and the table on the ReadOnly filegroup.

Only if the whole database is ReadOnly, SQL Server  saves himself the Page- and Key- locks.
Even there an Intent shared Lock is placed on the table.

Conclusion:

Putting Tables onto a ReadOnly-Filegroup does not save Locks.
But it often does make a lot of sense, to break up databases in this manner.
Just thinking of: less backup, faster restore, NTFS-compression etc.
Das ist sicherlich nicht das am meisten übliche Szenario, aber es tritt auf (insbesondere in AlwaysOn Szenarien mit read-only Secondaries) und gehört zu einem vollständigen Bild.

-

Abgesehen davon erkennt man auf den ersten Blick, das kein Unterschied im Sperrverhalten zwischen der Tabelle auf einer ReadWrite Filegroup (hier Primary) und der Tabelle auf der ReadOnly Filegroup besteht.

Nur wenn die gesamte Datenbank ReadOnly ist, spart sich SQL Server die Page- und Key- Locks. Selbst dort jedoch wird ein Intent-Share-Lock auf die Tabelle gesetzt.

Fazit:

Tabellen auf eine ReadOnly-Dateigruppe zu verlegen spart keine Sperren.
Aber es macht natürlich trotzdem oft sehr viel Sinn, Datenbanken so aufzuteilen.
Ich denke da nur an: Weniger Backup, schnellere Wiederherstellung, NTFS-Komprimmierung  etc.

Andreas

Sarpedon Quality Lab

Upcoming Conferences 2012: PASS SQLSaturday in Munich, SQLCon in Mainz, PASS SQLRally in Copenhagen, PASS Summit in Seattle, PASS Camp in Darmstadt

..ough
After I already launched the SQL Server 2012 together with Microsoft at Cologne this February, this year’s second half I will be speaker at 5 Conferences almost in a row:

 

SQLSaturday #170 - Munich 2012

 

Basta! 2012 Speaker

 

SQL PASS Rally Nordic

 

  • From October 22nd – 25th I will hold several sessions on:
    AlwaysOn and ReadOnly Routing”, “Data Corruption Survival with CHECKDB”,  “Security” and “Tracing with Extended Events
    in the track
    SQL Server 2012 Toolbelt for DBA’s and Developer
    in Seeheim, close to Darmstadt, Germany at the PASS Camp

 

SQL PASS Summit 2012

 

what a year..!

I hope to see you around at some of those places.

“Brought to you this summer”: Microsoft Certified Master SQL Server

(en)
as some of you already may have heard: this June I passed my Lab Exam for the Microsoft Certified Master SQL Server 2008.
- almost exactly 3 months after my first attempt. In fact the Exam has already taken place in the middle of May. - Unfortunately this time I had to wait more than 30 days until I received my result, and it took another couple of weeks, until my name made it onto the official MCM-List: http://www.microsoft.com/learning/en-us/mcm-certification.aspx

The MCM is the highest technical certification that Microsoft offers (http://www.microsoft.com/learning/en/us/certification/master-sql.aspx), and unlike the MCITP or even MVP the MCM is only awarded for a so called knowledge exam plus a practical lab exam of approximately 5 1/2 hours practical problem solving on a SQL Server box.
In fact, as of September 2012, I am the only Microsoft Master for SQL Server in Germany outside of Microsoft and affiliates. :-)

At TechNet’s Master Blog you can now also find a short introduction of myself (Thank you, Bob Taylor): http://blogs.technet.com/b/themasterblog/archive/2012/08/20/introducing-our-latest-sql-server-2008-microsoft-certified-master-andreas-wolter.aspx

Thanks to all the people that believed in me, and to those that made me pursue it even more determined :-)
Among them: Paul Randall and Kimberley Tripp from SQLSkills - my number one teachers, in general terms, since several years, Jonathan Kehayias and Bob Beauchemin who added valuable knowledge in SQL OS and Developing, Robert Davis, who graded my first Lab within hours, and last but not least: Ralf Dietrich, my long term sparring partner for SQL Server and uncertified Master in Germany ;-)

Also I have to apologize to all my customers for often letting them wait long because I made my studies number one priority. It will be made up by even better and more effective consulting skills :-)

 

(de)
wie viele sicher schon gehört haben, habe ich diesen Juni das Lab Exam für den Microsoft Certified Master SQL Server 2008 bestanden.
- fast genau 3 Monate nach meinem ersten Versuch. Tatsächlich war das Exam schon Mitte May. – Leider musste ich diesmal mehr als 30 Tage auf meine Ergebnisse warten, und es dauerte weitere Wochen, bis mein Name es auf die offizielle MCM-Liste machte: http://www.microsoft.com/learning/en-us/mcm-certification.aspx

Der MCM ist die höchste technische Zertifizierung, die Microsoft anbietet (http://www.microsoft.com/learning/en/us/certification/master-sql.aspx), und anders als der MCITP oder sogar MVP wird der MCM nur nach einem sogenannten knowledge exam plus einem praktischen lab exam von rund 5 1/2 Stunden praktischem Problemlösen an einer SQL Server box verliehen.
Bislang (Stand Oktober 2012) bin ich sogar der einzige von Microsoft unabhängige Master für SQL Server in Deutschland. :-)

Auf dem Master Blog von TechNet finden sie eine kurze Vorstellung über mich (Thank you, Bob Taylor): http://blogs.technet.com/b/themasterblog/archive/2012/08/20/introducing-our-latest-sql-server-2008-microsoft-certified-master-andreas-wolter.aspx

Mein Dank geht an alle, die an mich glaubten, und die, welche mich das Ziel noch entschlossener verfolgen ließen :-)
Unter ihnen: Paul Randall und Kimberley Tripp von SQLSkills – meine, im weitesten Sinne, Nummer eins Tutoren seit einigen Jahren, Jonathan Kehayias und Bob Beauchemin, die wertvolles Wissen in SQL OS und Developing beisteuerten, Robert Davis, der mein erstes Lab innerhalb von wenigen Stunden benotete, und last but not least: Ralf Dietrich, mein langjähriger Sparring Partner für SQL Server und uncertified Master in Deutschland ;-)

Bei meinen Kunden muss ich mich entschuldigen, dass ich sie oft lange warten ließ, da meine Studien oberste Priorität bei mir wurden. Das wird durch noch bessere und effizientere Consulting-Skills wettgemacht werden :-)

  MCM 2008

Andreas Wolter

CEO | Sr Technical Consultant & Architect Databases & BI

SARPEDON Quality Lab

Certification-Status as of Oct. 2012 (SQL Server Version in brackets):

MCM (2008), MCT (2005 – 2012), MCSA (2008), MCITPDD (2005 - 2008), MCITPBID (2008), MCITPDA (2005-2008), MCDBA (2000), MCSA (Win 2003), MCTS (2005 – 2008) 

Andreas Wolter

Geschäftsführer | Sr Technical Consultant & Architect Datenbanken & BI

SARPEDON Quality Lab

Zertifizierungs-Status Stand Okt. 2012 (SQL Server Version in Klammern):

MCM (2008), MCT (2005 – 2012), MCSA (2008), MCITPDD (2005 - 2008), MCITPBID (2008), MCITPDA (2005-2008), MCDBA (2000), MCSA (Win 2003), MCTS (2005 – 2008)

 

Sessions auf der SQLCon 2011

Auch dieses Jahr bin ich wieder mit bis dato zwei Sessions auf der SQLCon 2011 – 26. – 29. September in Mainz vertreten.

Update (09/2011): Den Vortrag “Reporting Services in SQL Server Denali” habe ich zugunsten eines mir noch mehr am Herzen liegenden Themas gestrichen. (Außerdem werden die Reporting Services selber kaum viele Neuereungen in Denali erfahren)
Dafür halte ich eine Session zu den Sicherheits-Features & Techniken von SQL Server für Entwickler:

“Schutz gegen SQL Injection sollte mittlerweile zum Repertoire jedes Entwicklers gehören. Jedoch gibt es noch andere Wege, an sensible Daten zu gelangen oder sie zu manipulieren. In dieser demointensiven Session (Achtung: Code, Code) werden wir uns vor allem anderen Techniken widmen, die man im Repertoire haben sollte, die Sicherheit seiner Daten zu stärken. Dazu gehören Basics wie Schema-Design für Security, Besitzerketten und ihre Fallstricke, Codesignierung und Verschlüsselung für die kritischsten Daten.“

”Wer Berichte mit Reporting Services erstellt, wird feststellen, dass ganz schnell nach weiteren verlangt wird. Und früher oder später kommt der Ruf nach einem einheitlichen Aussehen. Die Unterstützung dafür out of the box ist eher schwach. Dennoch kann man mit geschickter Kombination der zur Verfügung stehenden Möglichkeiten eine starke Effizienz-Steigerung beim Erstellen neuer Berichte erreichen.“

 

Ich würde mich freuen, den einen oder anderen persönlich, “offline”, begrüßen zu können.

Andreas Wolter

Sarpedon Quality Lab