„Optimize for ad-hoc workloads“ – warum diesen Parameter aktivieren?

Heute wurde mir die Frage gestellt, ob ich den Parameter „Optimize for ad-hoc workloads“ kenne bzw ob ich wüsste wofür dieser da ist.
Ja, ich kenne diesen Parameter und ich weiß auch, dass wir ihn in unseren Best-Practises aktivieren. Also muss ich mich schon einmal damit beschäftigt haben… scheint aber schon lange her zu sein, denn ich brachte die Fakten einfach nicht mehr zusammen. Dieser Parameter ist auch schon recht alt, in den Dokumentation des SQL Server fand ich den Parameter erstmalig für den SQL Server 2008, da kann man mal die Details „vergessen“.

„Optimize for ad-hoc workloads“

Aber vielleicht sollte ich erst einmal klären, was ad-hoc in diesem Zusammenhang bedeutet… Man findet diesen Begriff in Verbindung mit dem SQL Server relativ häufig, aber macht man sich dann Gedanken was im Detail damit gemeint sein könnte, dabei ist es relativ einfach.

Ad-hoc Queries sind einfache Abfragen, also zum Beispiel Abfragen die ein Benutzer „einfach mal so“ in seinem Abfrage-Tool erstellt und ausführt. Also Abfragen die irgendwie immer anders aussehen, auch wenn sich vielleicht nur Werte oder die Sortierung geändert haben, somit kann der Ausführungsplan für diese Query erst bei Ausführung ermittelt bzw erstellt werden.
Als Gegensatz zu ad-hoc Queries sind Stored-Procedures und Prepared-Statements zu nennen, da die Abfrage bereits zum Zeitpunkt der Erstellung bekannt ist und entsprechend frühzeitig in Ausführungsplan erstellt wurde. Man hat hier eine fest definierte Abfrage/Funktion erstellt, welche nur (grob gesagt) einem verallgemeinerten Zweck dient, um zum Beispiel aus dieser Tabelle eine Auswahl erstellt und an welche nur die ID als Variable übergeben wird. Bei Ausführung der Stored Procedure wird dann immer der bereits bekannte Ausführungsplan herangezogen.

Was passiert bei der Ausführung von ad-hoc Queries?

Jedesmal wenn eine ad-hoc Query ausgeführt wird, sucht der SQL Server (die Datenbank Engine – der Optimizer) in seinem Plan Cache ob es zu dieser Query bereits einen Ausführungsplan gibt. Gibt es keinen gespeicherten Ausführungsplan so wird ein neuer für diese Abfrage berechnet und im Plan Cache gespeichert. Wenn nun eine Applikation immer wieder ein und dieselbe Abfrage ausführt, zum Beispiel für jede Kategorie in einem Kategorienbaum alle zugehörigen Produkte sucht:

Select * from Products where category_id = 1 and stock_value > 0
Select * from Products where category_id = 2 and stock_value > 0
Select * from Products where category_id = 3 and stock_value > 0
...

Da die Anfrage immer „anders“ ist, als die vorherige Abfrage, wird für jedes dieser Statements ein eigener Ausführungsplan im Plan Cache erstellt und belegt dort Platz. Im Idealfall kann man die Applikation anpassen und die Verarbeitung anpassen bzw optimieren, was aber tun wenn man dies nicht kann?

Beispiel eines Autoteile-Händlers: Gewisse Produkte gibt es für gewisse Marken => Ermittel alle Teile aller Kategorien für die Marke XYZ.
Jede Ergebniszeile nimmt einen gewissen Bereich im Speicher des SQL Servers ein, bei ~100.000 Kategorien/Teilen pro Automarke…
Irgendwann ist der Plan Cache voll und der SQL Server benötigt neuen Platz. Da der Plan Cache aber begrenzt ist, bleibt nur die Möglichkeit des „Aufräumens“. Aber woran orientiert sich der SQL Server beim Aufräumen im Plan Cache?

Wie optimiert der Parameter die Ausführung der ad-hoc Queries?

Durch die Aktivierung des Parameters „Optimize for ad-hoc workloads“ (von 0 nach 1) ändert sich die Art der Kompilierung eben dieser ad-hoc Queries bzw deren Speicherung im Plan Cache. Während vorher für jede Abfrage ein Ausführungplan kompiliert wurde und anschließend gespeichert wurde, wird jetzt nur noch ein sogenannter Plan Stub gespeichert, dadurch reduziert sich der Speicherbedarf enorm. In Beispielen die ich hierzu gefunden habe, werden Reduzierungen von ~90% erreicht. (Variiert von System/Abfrage – kann mit Statements ermittelt bzw überprüft werden) Diese Einsparung wird dadurch erreicht, dass nur noch ein Hash-Wert für diese Ad-hoc Queries ermittelt / gespeichert wird und kein vollständiger Ausführungsplan. Wird jetzt eine Abfrage ein zweites Mal ausgeführt, so wird auch hier erst einmal nur der Hash-Wert für die Ausführung berechnet und dann im Plan Cache gesucht. Ist ein gesuchter Ausführungsplan bereits vorhanden so wird nun der endgültige Ausführungsplan vollständig kompiliert und gespeichert. Durch diese optimierte Speicherung und Verarbeitung von Abfragen bzw Ausführungsplänen wird a.) Speicher im Plan Cache für relevantere Abfragen frei gehalten und gleichzeitig die Kompellierungslast von den Prozessoren genommen.

Fazit:

Wenn eine (oder mehrere) Applikation immer wieder eine Vielzahl von ad-hoc Queries ausführt, dann sollte man diesen Parameter „Optimize for ad-hoc workloads“ definitiv aktivieren. Im Grunde sollte dieser Parameter bei allen SQL Servern (es gibt auch Ausnahmen 😉 ) aktivieren, da die meisten Applikationen eine Vielzahl von immer wieder minimal andere Abfragen ausführen. Hier unterstützt diese Speicher-Optimierung den SQL Server bzw die Performance erheblich.

Wer sich selber mal ein Bild machen möchte, sollte sich die Abfragen von Kimberly Tripp anschauen, um sich einen Überblick über die jeweilige Auslastung bzw Mengenverhältnisse seines SQL Servers zu machen (Beispiel das Beitragsbild – hier ist der Unterschied zwischen ad-hoc und prepared Statements nicht so sonderlich – ich habe aber auch keinen Vorher/Nachher-Vergleich)

SELECT objtype AS [CacheType],
    COUNT_BIG(*) AS [Total Plans],
    SUM(CAST(size_in_bytes AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs],
    AVG(usecounts) AS [Avg Use Count],
    SUM(CAST((CASE WHEN usecounts = 1 THEN size_in_bytes
        ELSE 0
        END) AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs – USE Count 1],
    SUM(CASE WHEN usecounts = 1 THEN 1
        ELSE 0
        END) AS [Total Plans – USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs – USE Count 1] DESC
GO

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

TSQL – wichtige Informationen über die SQL Server Instanz ermitteln

Wir alle kennen es, wir sollen Informationen zu unseren SQL Servern liefern… entweder der Kunde oder ein Kollege will schnell einen Überblick über die wichtigsten Parameter des SQL Servers haben… Was liegt da näher als mal eben schnell ein TSQL-Statement auf dem angefragten Server auszuführen?

Die letzten solcher Anfragen wollte immer die selben Informationen zusammengefasst bzw ermittelt haben… als habe ich mir mittels TSQL ein „kurzes“ Skript zusammengestellt und nach meinen Bedürfnissen angepasst. Ich bzw wir verwenden dieses Skript nun auch für unsere eigene Dokumentation 😉

  • Server- / Instanznamen
  • letzter SQL Server Engine Start
  • welche SQL Server Edition / Version ist im Einsatz
  • Welche Werte für CPU / Hyperthreads / maxDOP werden genutzt
  • Konfiguration der RAM Nutzung
  • Anzahl / Namen / Größen der User-Datenbanken
SET NOCOUNT ON;
Go
-- Setting value of 'show advanced options' to 1
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO

-- DECLARATION
SET NOCOUNT ON
DECLARE @date datetime, @start int, @ver varchar(13), @config_value varchar(20), @run_value varchar(20), @sqlstart datetime, @Mem int, @optimal_maxdop int, @cpu_count int, @scheduler_count int, @hyperthread_ratio int
DECLARE @CM Table ( [Index] int, Name nvarchar(1000) NOT NULL, Internal_Value int, Character_Value nvarchar(1000) )

-- SET Current Date/Time
SELECT @date = getdate()

-- Get SQL Server Version
SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2005',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,29,13))

SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2008',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,35,12))

SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2008 R2',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,30,12))

SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2012',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,29,12))

SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2014',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,29,12))

SELECT @start = CHARINDEX ( 'Microsoft SQL Server 2016',@@version)
if @start = 1 SELECT @ver = rtrim(substring(@@version,29,12))

-- Get Informations and Calculation on MaxDOP
CREATE TABLE #MDP (
name nvarchar(1000),
minimun int NOT NULL,
maximun int NOT NULL,
config_value int NOT NULL,
run_value int NOT NULL
)
Insert into #MDP exec sp_configure 'max degree of parallelism'
SELECT @config_value=rtrim(convert(varchar(8),config_value)) ,@run_value=rtrim(convert(varchar(8),run_value)) from #MDP
DROP TABLE #MDP

-- Last SQL Server Start Date/Time
select @sqlstart = create_date from sys.databases where name = 'Tempdb'

-- Get Informations on CPU, Schedulers and Memory
Insert into @CM exec xp_msver select @Mem = Internal_Value from @CM Where Name = 'PhysicalMemory'
select
@scheduler_count=(SELECT count(*) FROM sys.dm_os_schedulers WHERE scheduler_id < 255) ,@cpu_count=cpu_count ,@hyperthread_ratio=hyperthread_ratio ,@optimal_maxdop=case when @scheduler_count >= 8 then 4
when @scheduler_count > 8 then 8
else CEILING(@scheduler_count*.5) end
from sys.dm_os_sys_info;

-- Main Statement
SELECT
CONVERT(CHAR(50), SERVERPROPERTY('MachineName')) AS [Hostname]
,isnull(CONVERT(CHAR(50), SERVERPROPERTY('InstanceName')), 'Default') [InstanceName]
,@@servername as [Servername]
,getdate() as [Current Date/Time]
,@sqlstart as [last SQL Srv Start]
,serverproperty('Edition') as [SQL Edition]
,@ver as [SQL Version]
,case serverproperty('IsClustered') when 0 THEN 'NO' when 1 THEN 'YES' end as [IsCluster]
,@cpu_count/@hyperthread_ratio as [CPU Count]
,@config_value as [MDP cfg]
,@run_value as [MDP run]
,(SELECT count(*) FROM sys.dm_os_schedulers WHERE scheduler_id < 255) as [No of Scheduler] ,@optimal_maxdop as [Optimal MDP] ,@Mem as [Memory (MB)] ,(SELECT value_in_use FROM sys.configurations WHERE name like 'min server memory (MB)') as [actual min memory] ,(SELECT value_in_use FROM sys.configurations WHERE name like 'max server memory (MB)') as [actual max memory] ,(select COUNT(name) AS MB from master..sysdatabases) AS [No Of DBs] ,(select SUM(size*8/1024) AS MB from master..sysaltfiles where fileid = 1 and dbid > 4) AS [Overall Database Size (MB)]
Go

-- Adding Informations for all User Databases
-- Declaration
DECLARE @SumDBSize VARCHAR(2)
DECLARE @temp INT
DECLARE @DBSize INT
DECLARE @Servername varchar(100)

-- Get/Set Servername
Set @Servername = ''
If @Servername = '' Set @Servername = @@SERVERNAME

-- Calculating DBSize
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[master].[dbo].[DatabaseFiles]'))
Set @temp = (SELECT round(SUM(db.size)/1024/1024,0) FROM [master].[dbo].[DatabaseFiles] as db where DATEDIFF(day, db.CreationDate, GETDATE()) = 0)
else Set @temp = (SELECT sum((size*8)/1024/1024 ) FROM sys.master_files)
Set @temp = (SELECT sum((size*8)/1024/1024 ) FROM sys.master_files)

Select
@Servername as 'Servername',
DB_NAME(sys.master_files.database_id) as 'DBName',
sum(sys.master_files.size * 8 / 1024 ) as 'DB-Size/MB',
sum(sys.master_files.size * 8 / 1024 / 1024 ) as 'DB-Size/GB'
from sys.master_files INNER JOIN sys.databases ON DB_NAME(sys.master_files.database_id) = DB_NAME(sys.databases.database_id) where DB_NAME(sys.master_files.database_id) not in ('master','model','msdb','tempdb') group by sys.master_files.database_id;
go

-- Reset value of 'show advanced options' to 0
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO

Vielen Dank an  für seinen Beitrag zu „Best Practices Empfehlungen für MaxDOP

Dieses TSQL kann natürlich jederzeit frei genutzt werden, vorab in einem Testsystem getestet werden, Gefahr/Risiko trägt der Ausführende.

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

SQLBits 2016 – die UK SQL Server Community lädt ein

Mittlerweile zum 15. Mal lädt die britische SQL Server Community zum SQLBits ein!

Alles begann mit einer kleinen Gruppe von Personen, die sich gerne mit dem SQL Server auseinander setzten und andere an ihrem Wissen teilhaben lassen wollten. Was lag da näher als einen Community Event sondergleichen ins Leben zu rufen…
Mittlerweile hat sich herum gesprochen, dass die SQLBits ganz besondere Tage mit ganz besonderen Sprechern und Inhalten sind, Sprecher aus der ganzen Welt kommen nach England, um Ihr Wissen und Ihre Erkenntnisse mit der Community zu teilen.

Es gibt wieder 4 verschiedene Tracks (DEV, DBA, BI und Azure) aus denen man wählen kann, so dass jeder sich genau seinen SQL Server Schwerpunkt vertiefen kann. Innerhalb dieser Tracks gibt es zahlreiche interessante Sessions im Rahmen der SQLBits.

Zum Beispiel :

Advanced Techniques For Super Scaling SQL Server with Chris Adkin

Sie als DBA oder Entwickler arbeiten an Anwendungen mit anspruchsvoll, unternehmenskritischen Leistungsanforderungen, dass sie mindestens ein ein Level 400 – 500 haben und so ein tieferes Verständnis für die Datenbank-Engine, um auch noch das letzte Quäntchen Leistung aus der Datenbank-Engine heraus zu holen. In dieser Session erhalten sie hierzu einen 360-Grad-Einblick in alle wichtigen Themengebiete, was die Datenbank-Engine tut, damit sie in Zukunft alle „schweren“ Probleme welche durch undokumentierte Waits und Spinlock-Aktivitäten auftreten können, in welche man mit den Standard SQL Server Tools kaum oder gar nicht Einsicht erhält. Sie lernen Techniken zur Durchführung tieferer Analysen der CPU-Auslastung kennen, Wait-Stats Analysen auf Thread-Ebene, ebenso die Fehlersuche nach schlechte Gerätetreiber bis hin zu Probleme im Netzwerk und/oder Storage-Bereich, alles über das Windows Performance Toolkit.

Increase Server Performance Step by Step - SQLBits 2016
Erfahren Sie wie man den Leistungsanforderungen von anspruchsvollen und kritischen Applikationen durch Skalierung begegnen kann. Session mit Chris Adkin auf der SQLBits

New features of SQL Server Reporting Services 2016 with Chris Testa-O’Neill

Sie haben Jahre lang auf Verbesserungen im Reporting Services gewartet, um noch bessere Berichte für Ihre Business-Anwender zu erstellen und liefern. Jetzt brauchen Sie nicht mehr zu warten, endlich ist es soweit, endlich kommen die neuesten Updates für Reporting Services im SQL Server 2016. Lassen Sie sich von Chris Testa-O’Neill in die neuen Funktionen des Reporting Services einweisen, in diesem eintägigen Workshop lernen Sie:

  • Microsoft Reporting-Strategie – Verstehen, wo Reporting Services passt in diese Strategie im Jahr 2016
  • Bericht Entwicklung Merkmale – Entdecken Sie die neuen Möglichkeiten für die Erstellung von Berichten
  • Abonnement Verbesserungen – Haben Sie eine bessere Kontrolle über das, was zu Ihren Benutzern
  • POWER Bi-Integration – Nahtlose Integration Ihrer SSRS Berichte mit Power BI-Berichte
  • SSRS und Datazen – Sehen Sie, wie Datazen vervollständigt das Reporting-Strategie

Weitere kleinere neue Features werden ebenfalls in diesem Workshop angesprochen, so dass sie sich ein vollständiges Bild aller neuen Features machen können.

Diese Session richtet sich an Berichtsentwickler, Berichterstattern und Berater, welche großen Berichte rechtzeitig für ihre Nutzer liefern möchten.

New Features in Reporting Services 2016 - SQLBits 2016
Session zu neuen Features in SQL Server Reporting Services 2016 mit Chris Testa-O’Neill auf der SQLBits

Columnstore Indexes – from basics to optimised analytics with Niko Neugebauer

Erfahren sie innerhalb nur eines Tages alles über die Grundlagen der Struktur der Columns Indizes sowie einen Schritt in die internen Details. Weiterhin werden Sie lernen, wie man Daten in eben die Columnstore Tabellen lädt und am Ende dieses Tages bringt ihnen Niko Neugebauer die fortgeschrittenen Konzepte des BatchModes und des Performance-Tuning näher.

Microsoft hatte bereits die Columns Indizes mit Nonclustered Columns im SQL Server 2012 eingeführt und SQL Server 2014 brachte Mircorsoft aktualisierbare Clustered Columns Indizes, nun mit SQL Server 2016 kommen zwei neue Bereiche mit den aktualisierbaren Nonclustered Columnstore Indexen – Operational Analytics und Operational Analytics In Memory hinzu.

Das erste Update bezieht sich dabei auf die traditionelle zeilenbasierte Speicherung, während sich Operational Analytics In Memory auf die Integration der InMemory Technologien des SQL Server (auch als Hekaton bekannt) konzentriert.

Bei diesem Tages-Training dreht sich alles um die Unterschiede in der Implementierungen, deren Vorteile und Grenzen und wie man das Beste aus allen Arten erhält und Ausprägungen der Columns Indizes.

A Complex Table with Foreing Keys and Clustered Columnstore by Niko Neugebauer - SQLBits 2016
A Complex Table with Foreing Keys and Clustered Columnstore by Niko Neugebauer, auf den SQLBits erklärt Niko alles rund um den Columnstore.

So gibt es noch zahlreiche weitere Sessions in den einzelnen Tracks, wo man sich kaum entscheiden kann, welcher Session man folgen möchte.
Ich wünsche allen Teilnehmern der SQLBITS 2016 ganz viel Spaß auf der Veranstaltung und lernt fleißig.

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

PASS Essential: Analyse eines Microsoft SQL Server auf Performanceprobleme

Aus dem Januar Newsletter der SQL PASS Deutschland:

Dauer: 1 Tag
Ort: Karlsruhe, inovex GmbH
Datum: 18. April 2016, 09.00-16.30 Uhr
Teilnehmeranzahl: mindestens 4, maximal 12
Preis: Mitglieder PASS Deutschland e.V. 299€ (inkl. MwSt.), Nicht-Mitglieder 475€ (inkl. MwSt.)
Schulungszertifikat: Ja
Anmeldung: E-Mail an registrierung@sqlpass.de
Voraussetzungen:

Sprecher:
Uwe Ricken (Twitter | Blog) verfügt über mehr als 6 Jahre Praxiserfahrung als DBA und mehr als 14 Jahre Erfahrungen als Entwickler von Datenbankmodellen.
Im Mai 2013 wurde diese Erfahrung mit der Zertifizierung zum 7. deutschen „Microsoft Certified
Master – SQL Server 2008“ gekrönt. Im Juli 2013 wurde ihm zum ersten Mal der MVP-Award von Microsoft für
seine Unterstützung der Microsoft SQL Server Community verliehen. Damit war Uwe Ricken der erste MCM +
MVP in Deutschland. Uwe Ricken ist als Sprecher zu den Themen „Database Engine Internals“, „Query Optimizing“
und „Entwicklung“ auf vielen Konferenzen in ganz Europa anzutreffen.

Inhalt
Nach Abschluss des Workshops haben Sie fundierte Kenntnisse in diesen Themen

  • „Problemzonen“ einer Installation von Microsoft SQL Server, die auftreten, wenn eine „Standardinstallation“ implementiert
    wird.
  • an Hand eines Stufenplans kann Schritt für Schritt die Analyse eines Systems durchführt werden.
  • Ergebnisse der Messungen werden in einer Bewertungsmatrix auf Schwachpunkte untersucht.

Teilnehmer Voraussetzungen:

  • Grundkenntnisse über Microsoft SQL Server
  • Umgang mit Microsoft SQL Server Management Studio

Kursinhalte:

  • Engpässe im Betriebssystem, die einen Microsoft SQL Server ausbremsen
  • Konfigurationseinstellungen einer Instanz von Microsoft SQL Server
  • TEMPDB – falsche Konfiguration und ihre Auswirkungen auf die Performance
  • PLE – Analyse und Bewertung von „Page Life Expectancy“ im Zusammenhang mit verwendeten Datenbanken
  • Analyse der Belegung des Buffer Pool pro Datenbank!
  • PFS-Contention, Locking, Blocking, Deadlocks – welche Möglichkeiten gibt es für die Beseitigung
  • Korrekte Datenbankeinstellungen (Datenbankdateien, Protokolldateien)
  • PERFMON – Einblicke in die Arbeitsweise des Microsoft SQL Server zur Performancebewertung
  • Analyse von Wait Stats zur Bewertung von vorhandenen Engpässen
  • Anforderungen an eine Kundendokumentation
    •  Gliederung der Dokumentation
    • Präsentation der Analyseergebnisse & Handlungsempfehlungen
  • An konkreten Beispielen, die mit dem eigenen Laptop (mitgebracht incl. installierter Software) ebenfalls simuliert werden
    können, werden verschiedene Engpässe demonstriert, die es zu erkennen gilt. Wenn es um die Bewertung von Analyseergebnissen
    mittels Wait Stats geht, so können solche Ergebnisse für jeden EIGENEN Server simultan im Workshop ausgewertet
    werden.

PASS Essentials werden vom PASS Deutschland e.V. veranstaltet: http://www.sqlpass.de
Allgemeine Geschäftsbedingungen (AGB): http://www.sqlpass.de/Events/AllgemeineGeschäftsbedingungenAGB.aspx

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

Power BI – mein leichter Einstieg

Ich habe mich heute das erste mal mit einem ernsthaften Ansatz mit dem Power BI Desktop auseinander gesetzt.
Nein, nichts kompliziertes, aber für mich ausreichend und ein Einstieg in die Materie… also erwartet bitte (noch) keine komplexen Erläuterungen 😉

Power BI Desktop runtergeladen und installiert, dass war recht einfach und bekommen Sie garantiert hin.

Das Tool das erste Mal gestartet und ein simpler und selbsterklärender Dialog erscheint … natürlich will ich Daten laden 😉

Power BI Desktop - Steps 1

Im Rahmen eines Kunden-Projektes sollten wir einfache Performance-Daten ermitteln (alle 5 Minuten die Laufzeit eines definierten Insert-Statements ermitteln), diese Daten kann man ja auch historisch sammeln und als „Trendbarometer“ für die Performance Auslastung des SQL Servers nutzen. Dazu müssen die Daten aber entsprechend gesammelt und grafisch aufbereitet werden… was liegt da näher sich mit dem neuen Power BI Desktop zu beschäftigen.

Da die Daten im Kundennetz liegen, musste ich den Zwischenschritt über eine Excel-Datei als Datenquelle machen… also Excel ausgewählt, Datei geöffnet, Tabelle gewählt => die Vorschau hatte mir genau meine Daten gezeigt, ich war erstmal zufrieden, abschließend „Daten laden“.

Power BI Desktop - Steps 2

Nun wählt man einen Diagramm-Typen aus, in meinem Fall ein „Liniendiagramm“.
Jetzt braucht man nur noch die Datenfelder, Measures oder berechnete Spalten dem Diagramm hinzufügen, je nach Bedarf eben in die dafür vorgesehenen Felder.

Für mein Beispiel:

  • Achse => Check_Timestamp
  • Legende => bleibt vorerst einmal leer
  • Werte => Runtime

Damit haben einen ersten „Wurf“ und auch die erste grafische Darstellung meiner Werte.

Power BI Desktop - Steps 3

Da es sich um viel zu viele Werte handelt (daher das kleine Warndreieck oben links im Diagramm) muss eine Unterteilung her, hierzu füge ich eine zusätzlich berechnete Spalte hinzu, die mir nur Werte für bestimmte Tage ausgibt.

Mittels rechte Maustaste in der Felderspalte oder die Menüleiste erhalten wir eine neue berechnete Spalte

Datum = LEFT(Tabelle1[Check_Timestamp];10)

Diese neue Spalte hänge ich als zusätzlichen Filter ein, dadurch kann ich mir immer nur einen bestimmten Tag oder mehrere Tage auswählen und analysieren.Power BI - Steps 4

Sicherlich mag es elegantere und saubere Lösungswege geben, dies ist aber mein erster Versuch und an diesem wollte ich euch/Sie teilhaben lassen. In Zukunft werde ich noch mehr über dieses grandiose Tool Power BI berichten, dann sicherlich mit „hübscheren“ Lösungen und Analysen.

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.