Auf die Frage nach der laufenden Summe (RunningTotal) in DAX finden sich einige Hilfreiche Blogs mit Lösungsmöglichkeiten. Grundsätzlich unterscheiden kann man zwischen einer Lösung als Calculated Measure und einer als Calculated Column. Welcher Lösung der Vorzug geschenkt werden sollte möchte ich hier zur Diskussion stellen. Aus meiner Sicht gibt es neben dem grundsätzlichen Unterschied Column oder Measure auch noch Unterschiede in der Reihenfolge der Filter. Vor allem für große Datenvolumina würden mich Laufzeitunterschiede interessiern. Also posted Eure Erfahrungen hier.
Beispiel Tabelle
Calc als Column
=SUMX(FILTER(TX;[TID]<=EARLIER([TID])&&[Account]=EARLIER([Account]));[Value])
Calc als Measure
MRunTotal:=IF( COUNTROWS( VALUES( TX[TID]) ) = 1; CALCULATE( SUM( TX[Value] ); Filter(All(TX);TX[TID]<=VALUES(TX[TID])); Filter(All(TX);TX[Account]=VALUES(TX[Account])) ))
Sample Excel Datei
Wer das SQL Performance Dashboard lieb gewonnen hat, kann ebenfalls eine Version für SQL 2012 herunterladen. Wer es noch nicht kennt, sollte unbedingt einen Blick drauf werfen.
http://www.microsoft.com/en-us/download/details.aspx?id=29063
Viele Spass
Markus Thomanek
Eine aktualisierte Version des TechNet Artikels "Configuring Workflow Integration with Master Data Services" steht seit kurzem zur Verfügung, näheres finden Sie hier: http://social.technet.microsoft.com/wiki/contents/articles/7879.configuring-workflow-integration-with-master-data-services.aspx
Viele Grüße
In meiner beliebten Reihe „Fragen von Kunden“ gibt es heute mal einige Gerüchte zu SQL Server, die von Wettbewerbern genannt werden um den Kunden zu verunsichern. Ich bin schon ziemlich erstaunt, welche Informationsdefizite bestehen…
Zu den Gerüchten:
1. Der SQL Server kann keine vernünftigen Locks (Sperren) durchführen. Er lockt (sperrt) immer seitenweise, was dazu führt, dass man unvorhersehbares Laufzeitverhalten erzeugt.
Tja, SQL Server 6.5 hat noch ganze Seiten gesperrt…
Seit SQL Server 7.0 gibt es Row Level Locking. Allerdings wählt SQL Server bei großen Mengen von Datenänderungen auch manchmal Page (Seite) oder gar Table Locks, da dies Hauptspeicher und vor allem die Zeit zum Setzen und Entfernen der Locks spart. Hier ist SQL Server deutlich effizienter als andere Datenbanksysteme. Wem dieses Verhalten nicht gefällt, der kann einen ROWLOCK Table Hint in den Abfragen verwenden oder Page Locks für einen Index mit der Index Option ALLOW_PAGE_LOCKS = { ON | OFF } deaktivieren. Bei manchen Vorgängen, insbesondere DDL-Statements wie ALTER TABLE ist allerdings ein Table Lock unumgänglich, das ist in anderen Datenbanken auch so.
2. SQL Server verwendet pessimistisches Locking. Dadurch blockieren Leser Schreiber und umgekehrt und die Parallelität wird gesenkt
Ausschließlich pessimistisches Locking wurde bis SQL Server 2000 verwendet…
Seit SQL Server 2005 hat der Kunde die Wahl, ob er optimistisches oder pessimistisches Locking verwenden will, wobei pessimistisches nach wie vor der Standard ist.
Worum geht es? Nehmen wir an, Transaktion A will einen Datensatz schreiben, Transaktion B denselben Datensatz lesen (bei Row Level Locking). Beide Transaktionen sind noch nicht abgeschlossen. Klar ist, dass Transaktion B auf keinen Fall den noch nicht committeten neu geschriebenen Wert lesen darf (Dirty Read), denn es kann ja sein, dass Transaktion A zurückgerollt wird. Nun hat die Datenbankengine zwei Möglichkeiten:
Pessimistisches Locking: Wenn der Datensatz von Transaktion B geschrieben wird setzt die Engine einen exklusiven Lock auf den Datensatz. Transaktion B will vor dem Lesen einen Shared Lock haben, bekommt den aber wegen dem exklusiven Lock erst nach Abschluss von Transaktion A.
Optimistisches Locking: Bis zum Abschluss der Transaktion A wird neben den geänderten Daten auch die alte, committete Version des Datensatzes gehalten (in tempdb). Dadurch kann Transaktion B die alte Version der Daten lesen und es ist kein Shared Lock notwendig. Das entspricht zum Beispiel dem Verhalten in Oracle (Oracle verwendet die Begriffe pessimistisch und optimistisch allerdings ein wenig anders, da es die hier angegebene erste Variante gar nicht gibt). Optimistisches Locking können Sie in SQL Server mit READ_COMMITTED_SNAPSHOT oder TRANSACTION ISOLATION LEVEL SNAPSHOT (mit leicht unterschiedlichem Verhalten) verwenden. Mehr dazu hier: http://msdn.microsoft.com/en-us/library/ms179599.aspx
Warum gibt es nun beide Varianten? Weil pessimistisches Locking ressourcenschonender und für Szenarien besser geeignet ist, wo meist unterschiedliche Datensätze zugegriffen werden (z.B. Lagerhaltung). Optimistisches Locking ist hingegen flexibler.
3. Der SQL Server ist fast unbezahlbar, da man keine vernünftige Lizensierung durchführen kann, die eine unbeschränkte Anzahl von Usern (z.B. im Web-Betrieb) erlaubt.
SQL Server kann man auf Prozessor (bis 2008R2) bzw. Core (ab SQL 2012) Basis lizenzieren und damit beliebig viele Benutzer supporten. Und auch die kostenlose SQL Server Express Version ist in manchen kleinen Web-Szenarien eine Option.
Bei der Gelegenheit: Auch von Oracle gibt es ja eine kostenlose Express Version (XE). Allerdings wird diese im Gegensatz zu SQL Server Express nicht gepatcht, auch nicht bei den reichlich vorhandenen Sicherheitslücken. Damit ist sie für Web-Aufgaben (und eigentlich für fast alle Aufgaben) komplett ungeeignet.
4. Der SQL-Server verwendet immer feste, nicht anpassbare Blockgrößen bei der Speicherung. Oracle kann hier zwischen 2K und 32K skalieren.
Das ist richtig, SQL Server verwendet immer 8k Datenseiten für die Speicherung. Die gesamte Datenbankengine und das IO Subsystem ist daraufhin optimiert, und auch Hersteller von Storagelösungen können sich darauf einstellen. In Oracle gibt es die Möglichkeit, die Blockgröße anzupassen, aber nur die wenigsten Kunden nutzen diese Möglichkeit. Zumal verschiedene Blockgrößen innerhalb einer Instanz zu einer Fragmentierung des Hauptspeichers führen würden – man kann nun mal nicht eine 32kB Seite in den Platz laden, der von 4 8kB Seiten freigegeben wurde, wenn dieser Platz nicht hintereinander liegt.
Die Performanceergebnisse von SQL Server geben uns hier wohl recht… Und bei größeren Datenmengen verwendet SQL Server Read Ahead mit Lesegrößen bis zu 1024 kB, um effizienter auf das Storagesystem zuzugreifen.
5. Der SQL-Server hält sich nicht an die ANSI-Standards und hierdurch ist Interoperabilität nicht gewährleistet.
Es ist zwar richtig, dass es geringe Unterschiede zwischen SQL Server und ANSI SQL gibt, aber meines Wissens gilt dies auch für jedes andere relationale Datenbank. Einige der Differenzen zwischen Oracle SQL und ANSI SQL finden sich hier: http://de.wikipedia.org/wiki/Oracle_(Datenbanksystem)#Abweichungen_vom_ANSI-SQL-Standard. Allerdings ist diese Liste bei weitem nicht vollständig. So ist zum Beispiel die Oracle SEQUENCE-Syntax nicht ANSI compliant (die von SQL Server 2012 schon).
Im Falle von SQL Server liegen die Unterschiede vor allem in Datentypen (wie TIMESTAMP), die bereits vor Verabschiedung des ANSI Standards anders verwendet wurden.
Allgemein haben allerdings alle großen Datenbanksysteme viele Features, die weit über den ANSI Standard hinausgehen. Daher ist Interoperabilität immer nur dann möglich, wenn beim Schreiben des SQL Codes ausdrücklich darauf geachtet wird, nur standardisierte Sprachkonstrukte zu nutzen.
6. Es gibt kein Äquivalent zu den PLSQL-Packages des Oracle, das ein Lifecycle-Management sowie eine Verteilungs-Strategie zulassen würde.
Da hätten wir ja eines der nicht standardkonformen Oracle-Features. In ANSI SQL gibt es kein CREATE PACKAGE…
SQL Server hat zwar keine Packages, wer möchte kann allerdings Schemas stattdessen zur Strukturierung des Codes verwenden (für die Oracle-Fraktion: in SQL Server werden Schemas anders verwendet als in Oracle. Ein Oracle-Schema entspricht mehr einer SQL Server Datenbank)
Für Lifecycle Management und Verteilungsstrategie gibt es allerdings in SQL Server deutlich bessere Varianten. Insbesondere die Möglichkeit der Integration von SQL Server Management Studio mit Quellcodeverwaltungssystemen, die neuen SQL Server Data Tools mit ihrem kompletten round trip engineering für Datenbankcode, die DAC-Pakete und die Integration mit Visual Studio Team System wären hier zu nennen…
Wie andere Datenbanksysteme auch unterliegt SQL Server einer ständigen Weiterentwicklung, um das geeignete Datenbanksystem zu finden sollte man immer über die aktuellen Möglichkeiten informiert sein. Ich hoffe ich konnte mit diesen Beispielen zeigen wie wichtig dies ist.
Zum Abschluss noch ein paar Links zum Thema SQL Server Mythen:
Gruß, Steffen
Analysis Services bietet im Multidimensionalen Modell mit Calculations und MDX charmante Möglichkeiten Zeit- bzw. Periodenvergleiche zu realisieren. Die notwendige Dynamik wird durch die Architektur und Sprachkonstrukte wie SCOPE, THIS und ORDINAL sichergestellt. Wie lässt sich nun dieses flexible Konzept auf ein Tabular Modell übertragen?
Grundsätzlich steht als DDL DAX zur Verfügung, allerdings ist man limitiert durch die Architektur und die Sprachkonstrukte. Der Periodenvergleich fordert verschiedene Flexibilitäten:
Die Dynamisierung des Measures kann durch Hinzufügen einer weiteren Tabelle und einer kleinen Berechnungformel erledigt werden. Nehmen wir an das die Measures "Revenue" und "Quantity" zur Verfügung stehen, dann sieht die Tabelle folgendermaßen aus:
DynMeasure Revenue Quantity
die zugehörige Funktion wie folgt:
CP:=IF(COUNTROWS( VALUES(DynMeasure[DynMeasure]))=1; SWITCH(Values(DynMeasure[DynMeasure]) ;"Revenue";[Revenue Sum] ;"Quantity";[Quantity] ))
Wählt man nun anstatt "Revenue" oder/und "Quantity" als direktes Measure "CP" und fügt die Dimension DynMeasure dem Pivot hinzu, lässt sich über einen Filter auf DynMeasure bestimmen welche Measures angezeigt werden. Das Verhalten ist somit ähnlich einer Implementierung in der nur das Measure "Value/Wert" existiert.
Um die Zeitintelligenz hinzuzufügen kann auf einige implementierte Funktionen zurückgegriffen werden. Jedoch fehlt die Möglichkeit zur Bestimmung der Ebene in einer Dimension. Als Hilfskonstrukt kann für die Zeit folgende Funktion dienen:
MD:=ROUNDDOWN( COUNTROWS( DATESBETWEEN('Date'[Date]; FIRSTDATE('Date'[Date]); LASTDATE('Date'[Date])))/30;0)
Die einzelnen Periodenberechnungen können direkt im Summationsbereich der Tabelle hinterlegt werden:
PY:=[CP](SAMEPERIODLASTYEAR('Date'[Date])) PQ:=[CP](PREVIOUSQUARTER('Date'[Date])) PM:=[CP](PREVIOUSMONTH('Date'[Date])) PD:=[CP](PREVIOUSDAY('Date'[Date]))
Da ich in der Regel unterjährig auswerte, bevorzuge ich SAMEPERIODLASTYEAR anstatt PREVIOUSYEAR, da somit der selbe Zeitraum im Vorjahr gewählt wird, anstatt das gesamte Jahr. Die Berechnungen ziehen schon dynamisch das jeweils von mir gewählte Measure an. Alternativ kann auch mit Parallelperiod gearbeitet werden, jedoch gibt es dort keine Entsprechung zu PreviousDay.
Um diese Berechnungen nun auch dynamisieren kann folgende Formel verwendet werden:
PP:=SWITCH([MD];12;[PY];3;[PQ];1;[PM];0;[PD])
Zur Auswertung im Pivot werden das Measure "CP" und "PP" hinzugefügt, mit einem Slicer kann einfach das Ein- bzw. Ausblenden von Measures realisiert werden.
Eine Verwendung von switch bzw. if Statements sollte in jedem Fall einer Performanceüberprüfung unterzogen werden, so das ggf. der Komfort der Dynamisierung angepasst werden muss.
Beim PASS Camp im November habe ich einen kompletten Tag zu der neune Hochverfügbarkeitslösung AlwaysOn in SQL Server 2012 bestritten und dabei die komplette Installation einer etwas komplexeren AlwaysOn Umgebung als Demo gezeigt und als Lab angeboten.
Diese Demo habe ich nun als Videos aufgenommen.
Im ersten Teil zeige ich die Installation eines 4-Knoten-Clusters auf Basis von Windows Server 2008 R2 SP1, wobei zwei von den vier Knoten Zugriff auf ein iSCSI SAN haben (und die anderen beiden nicht)
Im zweiten Teil baue ich einen 2-Knoten SQL Server Failover-Cluster auf und teste ihn
Im dritten Teil baue ich aus dem SQL Server Failover Cluster und den anderen beiden Windows Cluster Konten eine AlwaysOn Availability Group auf, richte Read Only Routing ein und teste das ganze.
Die Videos finden sich hier:
Der Release Candidate (RC) von SQL Server 2012 ist jetzt verfügbar. Diese Version ist Feature Complete und kann so für Tests mit den finalen Features von SQL Server 2012 eingesetzt werden.
Gegenüber der letzten CTP-Version gibt es einige wesentliche Verbesserungen
Die offizielle Information findet sich im Dataplatform Insider Blog
Der Download ist hier (für Deutsch einfach auf deutsch umstellen). Die Release Notes finden sich auch dort. Wichtig sind vor allem die OS-Patches für AlwaysOn Availability Groups!
Auf dem SQLPass Summit 2011 hat Microsoft Corporate Vice President Ted Kummert die Microsoft Roadmap und Strategie zu “Big Data” vorgestellt. Ein wichtiger Baustein in dieser Roadmap ist hierbei das Apache Projekt Hadoop. Doch was steckt hinter Big Data, Hadoop und der Ankündigung von Microsoft sich im Umfeld von Big Data zu engagieren.
Was versteht man unter Big Data?
Wie der Name “Big Data“ schon vermuten lässt, geht es in der Regel darum, große Datenmengen mit hohem Durchsatz zu verarbeiten, die klassische Datenbanken und auch entsprechende Analyse Werkzeuge nur sehr eingeschränkt verarbeiten können. Dies können z. B. Log Files, Images, Videos, Sensor Daten , Finanz oder auch Börsendaten sein. Um derartige große Datenmengen effizient verarbeiten zu können, wird bei Big Data auf den Ansatz einer Massiv Parallelen Architektur zugegriffen, die die Last auf z.B. mehrere 1000 Server verteilt.
Für Facebook und Yahoo gibt es im Zusammenhang mit „Big Data“ z. B. folgende beeindruckende Zahlenwerte, die ich dem Hadoop Wiki entnommen habe.
Und was ist Hadoop?
Das Apache Projekt Hadoop ist ein Framework zur parallelen Datenspeicherung und -verarbeitung sehr großer Datenmengen, die verteilt in Clustern von Servern „fehlertolerant“ im lokalen Filesystem gespeichert werden. Das Design von Hadoop ermöglicht Skalierungen von einem einzelnen Server bis zu mehreren tausend Servern. Eine umfangreiche Referenzenliste finden Sie HIER.
Das Projekt besteht primär aus den folgenden Unter-Projekten:
Weitere Details zu Hadoop finden Sie auf der Hadoop Projektseite HIER.
Was beinhaltet die Microsoft-Ankündigung?
Weiterführende Informationen finden Sie auch in dem White Paper HIER., der Webseite HIER. und der Original-Ankündigung Hier.
Welche Möglichkeiten ergeben sich aus der Ankündigung?
Mit diesem Ansatz ermöglicht Microsoft den Kunden, beide Welten zusammen zu führen - die Welt der „Big Data“ und der relationalen Welt mit dem SQL Server – und die Stärken aus beiden Welten für sich nutzbar zu machen. Die Vorteile sind u. a.:
Viel Spaß mit GROßEN Daten wünscht
FSeiwerth
Zum Thema betrieb von SQL Server in Virtualisierungsumgebungen und Private Cloud Szenarien gibt es auf der SQL CAT Seite vier hervorragende Whitepaper:
Für diejenigen, die nicht die Zeit haben um sich die Whitepaper durchzulesen möchte ich hier die wichtigsten Fakten (ohne Anspruch auf Vollständigkeit) einmal zusammenstellen
Installation
Migration
Dynamic Memory
Storage
CPU
Hochverfügbarkeit
Lizenzierung
VMWare (und andere)
Mit dem CTP3 Product Guide für SQL Server “Denali” ist jetzt eine umfangreiche Sammlung an Ressourcen verfügbar um sich mit allen wichtigen Neuerungen vertraut zu machen. Der Product Guide enthält:
Der Download des Product Guide findet sich hier
Nachdem ich im letzten Artikel über allgemeine Neuerungen in der Volltextsuche von SQL Server „Denali“ gesprochen habe geht es dieses Mal um ein komplett neues Feature in der Volltextsuche: Statistische Semantische Suche. Das Wort „semantisch“ hat in der IT viele Bedeutungen, hier heißt es: Die Volltextsuche erkennt statistisch relevante Schlüssel-Phrasen in Dokumenten und kann diese Erkenntnis für die Extraktion dieser Schlüssel-Phrasen und für die Analyse der Ähnlichkeit von Dokumenten verwenden. Typische Fragestellungen für die semantische Suche sind: „Was sind wichtige Phrasen in diesem Dokument?“ oder „Welche Dokumente ähneln diesem Dokument und warum?
Die semantische Suche ist eine Erweiterung der Volltextsuche, die extra für volltextindizierte Spalten aktiviert wird. Das geht in T-SQL (durch Angabe einer Sprach-ID und des Schlüsselworts Statistical_Semantics an der volltextindizierten Spalte) oder in der grafischen Volltextindex-Oberfläche:
Damit das klappt muss allerdings zuerst die semantische Suche konfiguriert werden. Dazu wird zuerst die semantische Sprachstatistik-Datenbank installiert, indem man das Paket SemanticLanguageDatabase.msi vom Installationsmedium entpackt und die entpackte Datenbank an den Server anhängt. Danach muss die Datenbank noch mittels sp_fulltext_semantic_register_language_statistics_db registriert werden. Wie das geht findet sich hier.
Die unterstützten Sprachen kann man dann mit
select * from sys.fulltext_semantic_languages
herausfinden. Deutsch ist dabei. Die eigentlichen semantischen Daten in dieser Datenbank sind übrigens als Internal Tables abgelegt und somit nicht direkt für ein SELECT zugänglich.
Danach kann man wie oben angegeben den Volltextindex mit semantischer Suche erstellen. Ich habe das auf der Filetable gemacht, deren Erstellung ich in diesem Artikel beschrieben habe. Es muss aber keine Filetable sein, jede volltextindizierte Spalte einer Tabelle funktioniert. Zu beachten ist, dass die semantische Suche einen Volltextindex deutlich vergrößert und auch die Erstellungszeit erhöht. Daher sollte man semantische Suche nur aktivieren, wenn man sie auch wirklich verwenden will. Außerdem muss natürlich die Volltextindizierung für die in der Tabelle vorhandenen Dokumenttypen vorbereitet sein: Die entsprechenden IFilter müssen installiert sein, deren Verwendung aktiviert usw.
Schlüsselwörter finden
Nun kann man zum Beispiel für ein Dokument herausfinden, was die statistisch wichtigen Schlüsselwörter in diesem Dokument sind. Das geht über die Funktion SEMANTICKEYPHRASETABLE:
DECLARE @DocID hierarchyid SELECT @DocID = path_locator from MeineFiletable where name = 'ADS.pptx'; --Key Phrases SELECT TOP(10) KEYP_TBL.keyphrase FROM SEMANTICKEYPHRASETABLE ( MeineFiletable, file_stream, @DocID ) AS KEYP_TBL ORDER BY KEYP_TBL.score DESC;
DECLARE @DocID hierarchyid
SELECT @DocID = path_locator from MeineFiletable where name = 'ADS.pptx';
--Key Phrases
SELECT TOP(10) KEYP_TBL.keyphrase
FROM SEMANTICKEYPHRASETABLE
( MeineFiletable,
file_stream,
@DocID
) AS KEYP_TBL
ORDER BY KEYP_TBL.score DESC;
keyphrase sql azure verwaltung technet durch datacenter tds isv unternehmen arten
keyphrase
sql
azure
verwaltung
technet
durch
datacenter
tds
isv
unternehmen
arten
Offensichtlich habe ich hier also über SQL Azure gesprochen.
Anders herum kann man auch herausfinden, in welchen Dokumenten es um Azure geht indem man die Dokumente nach Signifikanz der Phrase „Azure“ sortieren lässt:
SELECT TOP (5) DOC_TBL.path_locator.ToString() Locator, DOC_TBL.name FROM MeineFiletable AS DOC_TBL INNER JOIN SEMANTICKEYPHRASETABLE ( MeineFiletable, file_stream ) AS KEYP_TBL ON DOC_TBL.path_locator = KEYP_TBL.document_key WHERE KEYP_TBL.keyphrase = 'azure' ORDER BY KEYP_TBL.Score DESC;
SELECT TOP (5) DOC_TBL.path_locator.ToString() Locator, DOC_TBL.name
FROM MeineFiletable AS DOC_TBL
INNER JOIN SEMANTICKEYPHRASETABLE
file_stream
ON DOC_TBL.path_locator = KEYP_TBL.document_key
WHERE KEYP_TBL.keyphrase = 'azure'
ORDER BY KEYP_TBL.Score DESC;
Locator name /163317661833190.115726554008670.1866003634/ 218988078402337.61914970700195.3199820884/ DatabaseProAzureReporting.docx /235419278667080.230118955961229.3763918334/ 95176762753143.43209610854162.380882874/ Webcast SQL Azure und die Microsoft Cloud Plattform.pptx /235419278667080.230118955961229.3763918334/ 195400071903089.254316101152370.2453146947/ Webcast SQL Azure Überblick.pptx /235419278667080.230118955961229.3763918334/ 204734086686021.60759175188448.1218421407/ SQL Azure und die Microsoft Cloud Plattform.pptx /163317661833190.115726554008670.1866003634/ 148065100657714.221322731028740.4247534163/ SQL Azure CeBIT.pptx
Locator
name
/163317661833190.115726554008670.1866003634/ 218988078402337.61914970700195.3199820884/
DatabaseProAzureReporting.docx
/235419278667080.230118955961229.3763918334/ 95176762753143.43209610854162.380882874/
Webcast SQL Azure und die Microsoft Cloud Plattform.pptx
/235419278667080.230118955961229.3763918334/ 195400071903089.254316101152370.2453146947/
Webcast SQL Azure Überblick.pptx
/235419278667080.230118955961229.3763918334/ 204734086686021.60759175188448.1218421407/
SQL Azure und die Microsoft Cloud Plattform.pptx
/163317661833190.115726554008670.1866003634/ 148065100657714.221322731028740.4247534163/
SQL Azure CeBIT.pptx
Ähnliche Dokumente finden
Der andere Anwendungsfall für die statistische semantische Suche ist es, ähnliche Dokumente zu finden. Das geht über die Funktion SEMANTICSIMILARITYTABLE. Details zur Ähnlichkeit erhält man über SEMANTICSIMILARITYDETAILSTABLE. Eine einfache Abfrage “Welche Dokumente sind diesem ähnlich“ funktioniert so:
SELECT mft.name, sst.score FROM SEMANTICSIMILARITYTABLE ( MeineFiletable, file_stream, @DocID ) AS sst INNER JOIN MeineFiletable mft ON path_locator = matched_document_key ORDER BY score DESC
SELECT mft.name, sst.score
FROM SEMANTICSIMILARITYTABLE
) AS sst
INNER JOIN MeineFiletable mft
ON path_locator = matched_document_key
ORDER BY score DESC
Name Score Webcast SQL Azure Überblick.pptx 0,6667337 SQL Azure CeBIT.pptx 0,6150579 sqldays 2010 SQL Server 2008 R2 NonBI.pptx 0,3872314 SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt 0,3602501 Was ist SQL Server Express 2008 R2.pptx 0,3286014
Name
Score
0,6667337
0,6150579
sqldays 2010 SQL Server 2008 R2 NonBI.pptx
0,3872314
SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt
0,3602501
Was ist SQL Server Express 2008 R2.pptx
0,3286014
Will man dann den Grund für die Ähnlichkeit finden so joint man über SEMANTICSIMILARITYDETAILSTABLE:
DECLARE @DocIDMatch hierarchyid SELECT @DocIDMatch = path_locator FROM MeineFiletable WHERE name = 'SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt'; SELECT TOP(20) V4.keyphrase, V4.score FROM SEMANTICSIMILARITYDETAILSTABLE ( MeineFiletable, file_stream, @DocID, file_stream, @DocIDMatch ) AS V4 ORDER BY V4.score DESC;
DECLARE @DocIDMatch hierarchyid
SELECT @DocIDMatch = path_locator
FROM MeineFiletable
WHERE name = 'SQL Server 2005 - Webcast - 2005-09-28 - Schutz sensitiver Daten.ppt';
SELECT TOP(20) V4.keyphrase, V4.score
FROM SEMANTICSIMILARITYDETAILSTABLE
@DocID,
@DocIDMatch
) AS V4
ORDER BY V4.score DESC;
keyphrase score sql 0,6196678 technet 0,4326765 server 0,3456945 verschlüsselung 0,3421064 durch 0,3254796 schlüssel 0,3249941 wird 0,2818047 datum 0,2744119 zertifikat 0,2636287 public 0,2460675 arten 0,2402729 kosten 0,2268401 master 0,2166911 passwort 0,2148199 zum 0,2144909 microsoft 0,2132909 authentifizierung 0,2127908 symmetrisch 0,21237 immer 0,2091359 gmbh 0,2083207
score
0,6196678
0,4326765
server
0,3456945
verschlüsselung
0,3421064
0,3254796
schlüssel
0,3249941
wird
0,2818047
datum
0,2744119
zertifikat
0,2636287
public
0,2460675
0,2402729
kosten
0,2268401
master
0,2166911
passwort
0,2148199
zum
0,2144909
microsoft
0,2132909
authentifizierung
0,2127908
symmetrisch
0,21237
immer
0,2091359
gmbh
0,2083207
Offensichtlich geht es also in beiden Präsentationen um mein Lieblingsthema Verschlüsselung…
In Summe kann die neue semantische Suche in SQL Server „Denali“ sehr umfassend beim Verständnis von Dokumentbeständen und der inhaltlichen Suche darin helfen und so die meisten dokumentorientierten Datenbankanwendungen deutlich aufwerten.
Die Dokumentation zur semantischen Suche findet sich hier, der Download der Denali CTP3 hier
Die aktuelle Community Technical Preview 3 (CTP3) von SQL Server “Denali” ist verfügbar. Diese Version hat “Production Quality”, kann also für reale Testszenarien incl. Upgrade-Tests verwendet werden.
Die Neuerungen in SQL Server “Denali” gliedern sich unter drei wesentlichen Themen
Gegenüber der ersten CTP von November 2010 gibt es eine Vielzahl von Neuerungen, hier die Details:
Relationale Datenbank
Data Quality Services
BI Development Studio
Integration Services
Analysis Services
Reporting Services
Master Data Services
Wie man sieht gibt es also viel zu testen!
Hier meine Denali-Ressourcen
Und schließlich die Downloads und anderen Informationen:
In meinem Webcast zu SQL Server “Denali” CTP1 habe ich schon über einige Neuerungen bei der Volltextsuche gesprochen. Bevor ich im nächsten Artikel zu einer wichtigen Neuerung komme, die es in CTP1 noch nicht gab (Semantische Suche) möchte ich hier noch mal eine kleine Zusammenfassung der Neuerungen in der Volltextsuche geben, die bereits in CTP1 enthalten waren:
Eigenschaftssuche (Property Search)
Diese Funktion ermöglicht die Suche nach Dokumenteigenschaften (Titel, Autor usw.), insbesondere in Office-Dokumenten. Damit das funktioniert muss zuerst eine Search Property List angelegt werden (mit CREATE SEARCH PROPERTY LIST), die die zu suchenden Eigenschaften enthält. Dazu müssen die Eigenschaften über ihre GUID (die man z.B. aus der MSDN Dokumentation erhält) geladen werden:
ALTER SEARCH PROPERTY LIST DocumentTablePropertyList ADD 'Title' WITH ( PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9', PROPERTY_INT_ID = 2, PROPERTY_DESCRIPTION = 'System.Title - Title of the item.' );
ALTER SEARCH PROPERTY LIST DocumentTablePropertyList
ADD 'Title'
WITH ( PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9', PROPERTY_INT_ID = 2,
PROPERTY_DESCRIPTION = 'System.Title - Title of the item.' );
Diese Search Property List wird dann einem Volltextindex zugeordnet:
ALTER FULLTEXT INDEX ON Production.Document SET SEARCH PROPERTY LIST DocumentTablePropertyList;
Außerdem müssen natürlich die IFilter für die jeweiligen Dokumenttypen installiert sein, und zwar je nach Serverversion in 32 oder 64 Bit. Die IFilter für die Office 2007/2010 Dateiformate findet man hier (nach der Installation den Server neu starten!). Darüber hinaus muss die Verwendung der IFilter in SQL Server aktiviert werden (EXEC sp_fulltext_service load_os_resources, 1)
Nach dem Hinzufügen der Eigenschaften wird der Volltextindex neu aufgebaut. Danach kann man nach Dokumenteigenschaften suchen:
SELECT Document FROM Production.Document WHERE CONTAINS(PROPERTY(Document,'Author'), 'Steffen');
SELECT Document FROM Production.Document
WHERE CONTAINS(PROPERTY(Document,'Author'), 'Steffen');
Anpassbares NEAR
Bisher tat das Prädikat NEAR in der Volltextsuche nicht wirklich das, was man erwartet: Es definierte nämlich lediglich, dass die zwei (oder mehr) Begriffe im selben Dokument vorhanden sein müssen, keineswegs dass sie sich auch tatsächlich in einem bestimmten Abstand zueinander befinden müssen. Lediglich auf den Rang des Dokuments in der Ergebnisliste wirkte sich die Nähe der Suchbegriffe aus.
In SQL Server Denali kann man jetzt genau festlegen, wie nahe die Suchwörter sein sollen. So wird hier nach “rear” und “left” mit maximal 3 Worten dazwischen gesucht:
SELECT DocumentNode, DocumentSummary, Document FROM Production.Document AS DocTable INNER JOIN CONTAINSTABLE(Production.Document, Document, 'NEAR((left, rear), 3)' ) AS KEY_TBL ON DocTable.DocumentNode = KEY_TBL.[KEY];
SELECT DocumentNode, DocumentSummary, Document
FROM Production.Document AS DocTable INNER JOIN
CONTAINSTABLE(Production.Document, Document, 'NEAR((left, rear), 3)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY];
Es ist auch möglich nach mehr als zwei Begriffen zu suchen, dann gibt die Zahl die maximale Anzahl Nicht-Suchbegriffe zwischen dem ersten und dem letzten Suchbegriff an. Die Reihenfolge der Begriffe im Dokument ist nicht wichtig, kann aber mit einem angehängten TRUE erzwungen werden: NEAR((left, rear), 3, TRUE).
Performance
Neben funktionalen Neuerungen in der Volltextsuche wurde auch stark an der Geschwindigkeit und Skalierbarkeit gearbeitet. Ziel ist es, mindestens 100 Millionen Dokumente in einem Volltextindex zu unterstützen. Meine ersten Versuche mit einer Tabelle mit 20 Millionen Zeilen und 19 Volltext-indizierten Spalten waren sehr vielversprechend: ein Satz aus 22 Abfragen hat nur 7-10 Sekunden gebraucht – auf meinem (schnellen) Laptop.
Wichtig ist dabei die Formulierung der Abfragen. Die Abfrage
SELECT '"hemoglob*"', COUNT(*) FROM ft_publications WHERE CONTAINS (*, '"hemoglob*"')
führt zu einem Join zwischen der Basistabelle und dem Volltextindex, was die Abfrage bei großen Ergebnismengen langsam macht. Die inhaltlich gleichwertige Abfrage
SELECT '"hemoglob*"', COUNT(*) FROM CONTAINSTABLE (ft_publications, *, '"hemoglob*"')
ist hingegen unabhängig von der Anzahl gefundener Dokumente schnell (auf meinem Rechner im zweistelligen Millisekundenbereich). Das gilt übrigens auch mit früheren Versionen von SQL Server
Im nächsten Artikel wird es dann um die semantische Suche gehen
Eines der spannenden neuen Features von SQL Server 2008 war Filestream – die Möglichkeit, BLOBs wie Dokumente, Videos oder Bilder unter SQL Server Kontrolle im Dateisystem abzulegen. Mit Filestream kann man gleichzeitig die Datenbankdateien klein halten, die Performance beim Zugriff auf große BLOBs erhöhen und volle Konsistenz zwischen BLOB-Daten und relationalen Daten gewährleisten, sowohl in Transaktionen als auch im Backup.
Der offensichtliche Nachteil von Filestream in SQL Server 2008 ist aber, dass man mit normalen Anwendungen, die nichts von SQL Server wissen nicht darauf zugreifen kann. Der Zugriff auf Filestream BLOB-Daten musste entweder über T-SQL oder über ein spezielles WIN32 oder .NET API erfolgen. Viele Kunden haben daher nach einer Lösung gefragt, die traditionellen Dateizugriff aus Anwendungen wie Word oder dem Windows Explorer mit SQL Server Features wie vollständige Backups und Volltextsuche kombiniert. Daher gibt es in SQL Server Denali das neue Konzept “Filetable”
Eine Filetable ist kurz gesagt eine Tabelle mit einem festen Schema, die Dokumente speichert, welche über normalen Windows-Dateizugriff von jedem Windows-Programm aus zugegriffen werden können. Dieselben Dokumente sind also einerseits aus T-SQL als Zeilen einer Tabelle verfügbar, andererseits aus dem Dateisystem als normale Dateien.
Wenn man Filetables nutzen will muss man zuerst wie gewohnt Filestream aktivieren und eine Filestream-Dateigruppe in der Datenbank anlegen. Diese Filestream-Dateigruppe zeigt auf ein Verzeichnis und legt den physischen Speicherplatz für die Dateien der Filetable fest – nicht jedoch den logischen, über den später aus dem Explorer zugegriffen wird.
Als nächstes muss man in der Datenbank “nicht-transaktionalen Zugriff” zulassen, entweder komplett oder read only. Das geht in T-SQL:
ALTER DATABASE SemanticSearch SET FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'SematicsDir')
oder in der Oberfläche:
Die Bezeichnung “nicht-transaktionaler Zugriff” besagt schon worum es geht: Alle Zugriffe auf die Filetable, die aus dem Dateisystem erfolgen (über den Explorer oder über Anwendungen) sind nicht transaktional. Sie können also weder durch ein Rollback rückgängig gemacht werden noch ist ein exakt konsistentes Point-in-Time Restore garantiert. Wichtig ist: Auch bei aktiviertem nicht-transaktionalen Zugriff gilt das nur, wenn die Daten über den Windows Fileshare zugegriffen werden. Jeglicher Zugriff über T-SQL oder das Filestream API ist voll transaktional.
Nun kann man Filetables anlegen. Das geht derzeit nur in T-SQL (wobei Management Studio eine Vorlage ausgibt bei der man nur noch die Parameter ausfüllen muss):
CREATE TABLE dbo.MeineFiletable AS FILETABLE WITH ( FILETABLE_DIRECTORY = 'MeineFTDir', FILETABLE_COLLATE_FILENAME = database_default ) GO
CREATE TABLE dbo.MeineFiletable AS FILETABLE
WITH
(
FILETABLE_DIRECTORY = 'MeineFTDir',
FILETABLE_COLLATE_FILENAME = database_default
)
GO
Wie man sieht ist kein Schema der Tabelle angegeben. Das Schema einer Filetable ist fest, es können weder Spalten hinzugefügt noch geändert oder gelöscht werden. Aber es können zum Beispiel Trigger hinzugefügt werden – und Volltextindizes, aber dazu mehr im nächsten Artikel. Im Filetable Schema sind die Windows Dateieigenschaften (Readonly, Archiv usw) als Spalten vorhanden. Der Pfad (relativ zum Wurzelverzeichnis, das \\maschinenname\instanzname\DIRECTORY_NAME\FILETABLE_DIRECTORY ist) findet sich im Feld path_locator (Typ Hierarchyid), die eigentliche Datei im Feld file_stream. Im Management Studio befinden sich Filetables in einem eigenen Ordner in der Datenbank:
Von hier aus kann man auch einfach den Dateisystem-Ordner öffnen:
In diesen Ordner kann man nun ganz normal Dateien hineinkopieren, sie bearbeiten, löschen usw. Aus T-SQL Sicht sieht jede Datei und jeder Unterordner aus wie eine Zeile:
SELECT name, file_stream.GetFileNamespacePath(), is_directory FROM MeineFiletable
Den vollständigen Pfad der Dateien erhält man so:
SELECT FileTableRootPath() + file_stream.GetFileNamespacePath() AS FilePath FROM MeineFiletable
Man kann auch über T-SQL Die Einträge bearbeiten, z.B. neue Verzeichnisse anlegen oder Dateien Read Only setzen:
INSERT INTO MeineFiletable(name, is_directory) VALUES ( 'Analysis Services', 1) UPDATE MeineFiletable SET is_readonly = 1 WHERE name = 'QuoVadis.pptx'
INSERT INTO MeineFiletable(name, is_directory) VALUES ( 'Analysis Services', 1)
UPDATE MeineFiletable SET is_readonly = 1 WHERE name = 'QuoVadis.pptx'
Zum Verschieben von Dateien muss man sich aber schon ein wenig mit Hierarchyid-Funktionen auskennen (Danke an Georg Urban):
UPDATE MeineFiletable SET path_locator = path_locator.GetReparentedValue( path_locator.GetAncestor(1), (SELECT path_locator FROM MeineFiletable WHERE name = 'Cloud' AND is_directory = 1)) WHERE (name = 'QuoVadis.pptx')
UPDATE MeineFiletable
SET path_locator = path_locator.GetReparentedValue( path_locator.GetAncestor(1),
(SELECT path_locator FROM MeineFiletable WHERE name = 'Cloud' AND is_directory = 1))
WHERE (name = 'QuoVadis.pptx')
Und natürlich kann man auch die eigentliche Datei aus T-SQL bearbeiten.
Insgesamt bieten Filetables in SQL Server “Denali” eine mächtige Kombination aus T-SQL und klassischem Dateisystem-Zugriff und erlauben die Nutzung von datenbankbasierten Dokumenten von jedem Windows-Programm aus. Filetables werden in der kommenden CTP von SQL Server “Denali” enthalten sein.
Eine der wichtigern Neuerungen im Data Warehouse Bereich die mit SQL Server “Denali” kommen wird sind Columnstore Indizes. Diese Indizes können Data Warehouse Abfragen über große Datenmengen sehr stark beschleunigen, oft um den Faktor 10 oder mehr.
In traditionellen Indizes, auch in Clustered Indizes und Tabellen ohne Index (Heaps) sind die Daten zeilenweise in einer Baumstruktur gespeichert. In den Blättern dieses Baumes stehen also Zeile für Zeile alle Spalten, die im Index enthalten sind. Das geschieht normalerweise unkomprimiert, bei der Verwendung von Datenkompression auch pro Datenseite komprimiert.
Soll nun, wie in Data Warehouses üblich, eine große Aggregation gebildet werden wie diese:
SELECT SUM(umsatz_vk_brutto) FROM Artikelbewegung INNER JOIN Artikel ON Artikelbewegung.Art_nr = Artikel.Art_Nr WHERE Artikel.Produktgruppe = 'AfG'
so muss der Index der Faktentabelle Artikelbewegung(sofern er alle benötigten Felder, hier also Art_Nr, VK_Brutto enthält, sonst die ganze Tabelle) über seine Baumstruktur durchsucht und dann zeilenweise gelesen werden um die benötigten Zeilen auszufiltern. Enthält der Index oder die Tabelle mehr Spalten als für die Abfrage benötigt werden so werden diese nicht benötigten Werte ebenfalls gelesen und dann ignoriert. Danach werden die VK_Brutto Werte aufsummiert.
Bei einem Columnstore Index werden die Daten in hochkomprimierter Form spaltenweise gespeichert. Das bedeutet, dass jede Spalte im Index einzeln gespeichert und komprimiert wird. Durch die in denormalisierten Data Warehouses typische hohe Ähnlichkeit der Werte in einer Spalte werden hier sehr hohe Komprimierungen erreicht. Das bedeutet, dass die von Disk zu lesenden Datenmengen deutlich geringer sind als bei traditionellen Indizes. Bei einer Abfrage werden dann auch nur die in der Abfrage enthaltenen Spalten von der Platte gelesen, was zusätzlich IO und Verarbeitungszeit einspart.
Die Columnstore Technologie basiert auf derselben Basis (Vertipaq) die derzeit auch schon in PowerPivot verwendet wird.
Schauen wir uns das Ergebnis der Verarbeitung mal für eine Abfrage an:
SELECT k.Jahr, f.Einzugsbereich, ar.Produktgruppe, SUM(a.Teile_Ges) Teile, SUM(a.umsatz_vk_brutto) Umsatz FROM Artikelbewegung a INNER JOIN Kalender k ON a.Datum = k.Datum INNER JOIN artikel ar ON a.Art_Nr = ar.Art_Nr INNER JOIN Filialen f ON a.Filial_Nr = f.Filial_Nr GROUP BY k.Jahr, f.Einzugsbereich, ar.Produktgruppe ORDER BY k.Jahr, ar.Produktgruppe, f.Einzugsbereich
Ohne Column Store Index wird hier, da die ganze Tabelle aggregiert wird, ein Table Scan gemacht.
IO-Kosten:
Artikelbewegung-Tabelle. Scananzahl 9, logische Lesevorgänge 25898
CPU-Kosten:
SQL Server-Ausführungszeiten: CPU-Zeit = 33413 ms, verstrichene Zeit = 5229 ms
Mit Column Store Index werden nur die benötigten Spalten in komprimierter Form gelesen, die Tabelle selbst wird nicht gelesen:
Schon am geringeren Anteil an den Gesamtkosten der Abfrage sieht man den Effekt des Columnstore. Und auch in Zahlen drückt sich das aus:
Artikelbewegung-Tabelle. Scananzahl 8, logische Lesevorgänge 4520
SQL Server-Ausführungszeiten: CPU-Zeit = 2103 ms, verstrichene Zeit = 902 ms
Die Abfrage ist also insgesamt um mehr als den Faktor 5 schneller geworden, hat nur rund 6% (!) der CPU Zeit verbraucht und das Lesen des Column Store hat nur 17% der IO-Vorgänge gebraucht. Das alles bei einer recht kleinen Faktentabelle (nur ca. 4 Millionen Zeilen), bei großeren Tabellen ist der Effekt noch deutlich größer.
Wichtig ist, dass sich Columnstore Indizes nur für Data Warehouse Szenarien eignen wo große Aggregationen, vor allem Summierungen über große Datenmengen gebildet werden.
Ein Columnstore Index macht die Tabelle, auf der er erstellt wurde Read Only. Daher gibt es nur zwei Möglichkeiten, Daten in der Basistabelle zu ändern
1.: Columnstore Index löschen, Daten anfügen, Columnstore Index neu erstellen
oder
2. Partitionsumschaltung: Tabelle gleicher Struktur erstellen, Daten laden, Columnstore Index auf neue Tabelle erstellen, neue Tabelle als Partition in vorhandene Tabelle hineinschalten
Die Syntax für die Erstellung von Columnstore Indizes ist fast dieselbe wie für traditionelle Nonclustered Indizes:
CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_Artikelbewegung_ColumnStore] ON [dbo].[Artikelbewegung] ( [Datum], [Filial_Nr], [Art_Nr], [Gebinde_Ges], [Teile_Ges], [Umsatz_VK_brutto], [Umsatz_vk_netto] )WITH (DROP_EXISTING = OFF) ON [PRIMARY]
und auch eine schöne Oberfläche gibt es dafür:
Columnstore Indizes werden in der kommenden SQL Server “Denali” CTP enthalten sein. Anmeldungen dafür unter http://www.sqlserverlaunch.com
Cloud Computing ist in aller Munde, und auch wenn die Public Cloud mit Windows Azure und SQL Azure die höchsten Potenziale für Effizienz, Kosteneinsparung und Elastizität bringt entscheiden sich viele Kunden derzeit für den Aufbau einer Private Cloud für ihre Unternehmensanwendungen. Die Gründe dafür sind vielfältig, vom Wunsch, die Daten im eigenen Haus zu behalten über Features, die derzeit in SQL Azure nicht unterstützt werden bis zur Flexibilität, bestehende Anwendungen mit geringen Anpassungen weiter zu betreiben.
Der Vorteil von SQL Server ist nun, dass den Kunden alle Wahlmöglichkeiten von „keine Cloud“ bis „Public Cloud“ zur Verfügung stehen:
In diesem Artikel soll es nun darum gehen, wie ein Private Cloud Projekt mit SQL Server (auch unter dem Titel „Database as a Service“ – DaaS bekannt) aussieht. Dabei geht es mir hier vor allem um den Projektablauf und die einzelnen Schritte. Einen Überblick über die verwendeten Technologien haben Frank Koch und ich bereits im Artikel „Was ist eine Private Cloud und was brauche ich dafür?“ gegeben.
Ein SQL Server Private Cloud Projekt besteht aus 4 Stufen, die eigene Werkzeuge und Vorgehensweisen erfordern und eigene Vorteile bringen:
Stufe 1: Resource Pooling
Beim Zusammenfassen der Ressourcen geht es zuerst einmal darum festzustellen, was eigentlich alles in die Private Cloud konsolidiert werden soll und darauf aufbauend eine konsolidierte virtualisierte SQL Server Umgebung aufzubauen. Als Ergebnis dieser Stufe laufen alle (soweit möglich) verteilten Datenbankinstallationen in einer zentral verwalteten virtualisierten Umgebung und werden dort einheitlich administriert. Das senkt die Betriebskosten, erleichtert den Administratoren die Arbeit und ist die Basis für jede Compliance-Lösung.
Diese Stufe in vier Teilschritte unterteilen
1a: Untersuchung der bestehenden Umgebung und Kapazitätsplanung
Zuerst einmal muss festgestellt werden, welche Datenbanken in welchen Versionen es eigentlich im Unternehmen gibt und welche davon Kandidaten für eine Konsolidierung sind. Dazu gibt es zwei wesentliche Werkzeuge: das „Microsoft Assessment and Planning (MAP) Toolkit 5.5“ und das „Microsoft Consolidation Planning Tool for SQL Server v1.0 (CPT)“.
Mit dem MAP Toolkit kann man vorhandene SQL Server Installationen (und, wenn gewünscht, Oracle, MySQL und Sybase-Installationen) im gesamten Netzwerk erkennen und erhält daraufhin Berichte, die eine umfassende Darstellung der vorhandenen Datenbank-Infrastruktur sowie Konsolidierungsempfehlungen enthalten. Das CPT ist darauf aufbauend ein Excel-Addin, das Konsolidierungsempfehlungen auf Basis des Ressourcenverbrauchs von SQL Server Instanzen gibt. Im Ergebnis dieses Schrittes hat man einen Überblick über die eigene Datenbank-Landschaft und bereits einen Eindruck, welche vorhandenen Datenbanken konsolidiert werden sollen.
Auf Basis dieser Empfehlungen sollte dann eine Kapazitätsplanung erfolgen: Welche Hardware, Software (für SQL Server empfiehlt sich aufgrund der Lizenzbedingungen häufig eine Enterprise oder Data Center Edition für Konsolidierungen) und Verwaltungswerkzeuge werden benötigt? Wie groß wird meine SQL Server Private Cloud? Zur Vereinfachung der Lösungsplanung wird es bald die „Database Consolidation Reference Architecture“ von Microsoft geben, und im zweiten Halbjahr erscheint die optimierte „Database Consolidation Appliance“ zuerst von HP, später auch von anderen Hardwarepartnern.
1b. Konsolidierung
Als nächster Schritt sollte soweit wie möglich die vorhandene Infrastruktur aus verschiedenen SQL Server Editionen und Versionen und anderen Datenbanksystemen auf einen einheitlichen, aktuellen Stand gehoben werden damit später Verwaltung, Patching und Entwicklung auf einer gemeinsamen Basis erfolgen können. Dazu sollten vorhandene SQL Server Installationen mit dem Upgrade Advisor auf eventuelle Kompatibilitätsprobleme untersucht werden. Für andere Datenbanken wie Oracle, MySQL, Sybase oder sogar Microsoft Access kann man mit dem SQL Server Migration Assistant (SSMA) abschätzen, wie hoch der Aufwand für eine Migration auf SQL Server ist.
1c. Planung der Migration
Je nach Ergebnis der vorigen Schritte wird nun entschieden, wie mit den vorhandenen Datenbanken umgegangen wird. Es gibt 4 Möglichkeiten für jede einzelne Datenbankumgebung:
1d Virtualisierung und Verwaltung der Instanzen
Hier werden nun tatsächlich die vorher geplanten Schritte umgesetzt und die neue virtuelle Umgebung auf Basis von Hyper-V (empfohlen: Windows Server 2008 R1 SP1 – wegen Dynamic Memory) und System Center Virtual Machine Manager 2008 R2 (SCVMM) erstellt. Die P2V-Migration übernimmt dabei der SCVMM, die Datenbankmigration erfolgt mit SQL Server Mitteln. Zusätzlich sollte ein Überwachungswerkzeug für SQL Server und Windows eingesetzt werden: System Center Operations Manager (SCOM) (siehe unten)
Als Gesamtergebnis dieses Schritt 1 hat man eine virtualisierte, konsolidierte Umgebung die einheitlich und zentral betrieben und verwaltet wird.
Stufe 2: Elasticity
Die nächste Stufe ist es, die Umgebung elastisch zu machen, das heißt, eine dynamische Lastverteilung zwischen den einzelnen Instanzen und somit eine gesteigerte Skalierung zu erreichen. So ganz nebenbei wird dabei auch das Thema Hochverfügbarkeit geklärt.
Zuerst beschäftigt man sich hier mit dem Thema Hochverfügbarkeit für die einzelnen Datenbanken oder SQL Server Instanzen. Dazu kann SQL Server Clustering (als Guest Cluster in den virtuellen Maschinen) und/oder Database Mirroring eingesetzt werden. Das ermöglicht im Falle eines Fehlers eine schnelle Wiederherstellung ohne Datenverlust.
Darüber hinaus sollte Hyper-V geclustert werden. Das schützt nicht nur vor dem Ausfall eines Servers sondern ermöglicht auch Live Migration der virtuelle Maschinen. Durch Live Migration können virtuelle Maschinen im laufenden Betrieb von einem Hyper-V Host auf einen anderen verschoben werden. Dadurch ist eine schnelle Verteilung der VMs nach aktueller oder prognostizierter Last über verschiedene physische Hosts möglich. Auch ein Upgrade oder Patching des Hosts ist so durch Verschiebung der virtuellen Maschinen auf einen anderen Host deutlich vereinfacht. Bei Verwendung von SCVMM ist auch ein automatisches Load Balancing für eine optimale Performance der virtuellen Maschinen möglich.
Eine weitere Möglichkeit der Ressourcenoptimierung ist Dynamic Memory in Windows Server 2008 R2 Service Pack 1 Hyper-V. Dynamic Memory ermöglicht die Zuweisung einer Spanne an Hauptspeicher für jede virtuelle Maschine (etwa: 4 GB Minimum, 12 GB Maximum). Der Hauptspeicher wird dann nach aktueller Last und nach Priorität („Memory Weight“) zwischen den VMs verteilt. Für den Einsatz von SQL Server mit Dynamic Memory empfiehlt sich die Vergabe des Rechts „Lock Pages in Memory“ an das Dienstkonto sowie die Beschränkung des maximalen SQL Server Hauptspeichers über die Einstellung „Max Server Memory“.
Ergebnis dieser Stufe ist eine hochverfügbare, skalierbare virtuelle Umgebung bei der eine Anpassung der Ressourcenzuteilung basiert auf den aktuellen Anforderungen leicht möglich ist.
Stufe 3: Self Service
In dieser Stufe wird die zentrale Infrastruktur so gestaltet, dass die Nutzer (Fachabteilungen, andere IT-Abteilungen,…) selbst über ein Self-Service-Portal standardisierte Datenbankressourcen anfordern können. Das entlastet die zentrale IT-Abteilung und ermöglicht für die Nutzer einen deutlich einfacheren und schnelleren Zugang zu den benötigten Datenbanken. Darüber hinaus bringt die Standardisierung hier Effizienzsteigerungen bei der Pflege und Wartung der Umgebung.
Zuerst werden Templates (Vorlagen) für die standardisierten Datenbank-Ressourcen im SCVMM erstellt. Wenn später ein Nutzer eine neue Instanz braucht so wird diese direkt aus der Vorlage erstellt. In dieser Vorlage können auch Skripte eingebunden werden, die notwendige Schritte nach einer Provisionierung ausführen (zum Beispiel die Anmeldung bei SCOM für die automatische Überwachung oder die Einrichtung eines Backup-Jobs)
Die Basis für das Self Service Portal ist der „System Center Virtual Machine Manager Self-Service Portal 2.0”. Auf diesem Portal bekommen die Benutzer Rechte, bestimmte Ressourcen anzufordern und neue SQL Server Instanzen auf Basis der Templates anzulegen oder später auch zu entfernen. Das Portal enthält auch einen Freigabeprozess, über den die IT die Anforderungen freigeben kann.
Das Self Service Modell kann je nach Anforderung auch deutlich ausgebaut werden. Sollen zum Beispiel Drittsysteme für Konfiguration, Backup, ITIL-Prozesse oder ähnliches angebunden werden so eignet sich System Center Opalis mit seinen Workflows und den vielen Schnittstellen dazu sehr gut. Soll das Deployment von VMs statt aus Templates flexibler erfolgen so lässt sich eine Basisinstallation + automatisches Softwaredeployment mit System Center Configuration Manager (SCCM) einfach umsetzen.
Als Ergebnis dieser Stufe können Datenbankressourcen einheitlich und schnell provisioniert und genehmigt werden. Das erhöht die Flexibilität für die Nutzer und entlastet die IT-Abteilung.
Stufe 4: Control & Customize
In dieser Stufe wird die einheitliche Provisionierung um eine darauf basierende Abrechnung (charge back) und einen standardisierten Betrieb erweitert.
Für die Abrechnung enthält das Self Service Portal ein Chargeback-Modul, über den die verwendeten Ressourcen den einzelnen Kunden verrechnet werden können. Es gibt vorgefertigte Berichte, die die Nutzung belegen. Soll eine detailliertere Abrechnung auf Basis von tatsächlicher Last oder anderen Faktoren wie Kühlung oder Platzverbrauch erfolgen so ist dies über die Partnerlösung vKernel Chargeback möglich.
Mit System Center Operations Manager (SCOM) ist schließlich eine einheitliche Überwachung über die gesamte Umgebung möglich, man kann vom Hyper-V Host über die virtuellen Maschinen bis zum SQL Server mit seinen Komponenten die gesamte Umgebung über ein Werkzeug verwalten. Über Management Packs enthält der SCOM produktspezifisches Wissen und von der Produktgruppe oder auch vom Kunden selbst definierte Regeln. Über die „Performance and Resource Optimization (PRO)“ Management Packs können auch erweiterte Empfehlungen ausgesprochen werden, wie zum Beispiel die Aktualisierung der Integration Components oder das Verschieben einer VM auf einen anderen Host.
Zusammenfassung
Durch die Implementierung der vier genannten Stufen einer SQL Server Private Cloud kann eine optimierte, skalierbare, zentral verwaltbare, effiziente und agile Datenbankumgebung aufgebaut werden die die IT entlastet und für die Nutzer einen schnellen, standardisierten Self Service ermöglicht. Jede einzelne Stufe bringt bereits für sich implementiert deutliche Vorteile, mit allen 4 Stufen bekommt man eine vollständige integrierte Lösung auf Basis verfügbarer Produkte
Weitere Informationen, insbesondere ein Überblicksposter und 2 Präsentationen finden sich auf der SQL Server Private Cloud Seite. Eine Demo der fertigen Umgebung werde ich demnächst als Video auf diesem Blog bereitstellen
Gruß, Steffen Krause
Heute mal ein einfach Link auf äußerst hilfreiche SQL Server Scripts.
Im Microsoft TechNet Script Center finden sich einige sehr hilfreiche SQL bzw. PowerShell Scripts.
Interessant sind auch die Umfragen die Paul Randal zu verschieden SQL Server Themen in seinem Blog macht.
http://www.sqlskills.com/BLOGS/PAUL/
GrußRalph Kemperdick
Wenn Sie verstanden haben, wie Berichte zu entwickeln sind, ist der nächste Schritt zu verstehen, wie diese veröffentlicht werden damit Ihre Anwender darauf zugreifen können. Dieser Teil des SQL Server 2008 R2 Business Intelligence Training Kurses ("SQLInsights") auf MSDN, macht Sie mit diesem Thema vertraut. Es behandelt auch die Self-Service-Berichterstellung und den Umgang und die Freigabe von Berichtkomponenten.
Hier ist ein Überblick über die Inhalte:
5. Veröffentlichen und den Zugriff auf SQL Server 2008 R2 Reporting Services-Berichte Präsentation: Veröffentlichung von SQL Server 2008 R2 Reporting Services-Berichten Demo: Veröffentlichung von SQL Server 2008 R2 Reporting Services-Berichten Präsentation: Aktivieren des Self-Service Reporting mit SQL Server 2008 R2 Shared-Komponenten Demo: Aktivieren der Self-Service Berichterstellung und Veröffentlichung von gemeinsam genutzten SQL Server 2008 R2 Reporting Services Komponenten.Präsentation: Zugriff auf SQL Server 2008 R2 Reporting Services-Berichte programmgesteuert Demo: Entwicklung von Embedded SQL Server 2008 R2 Reporting Services-Anwendungen Hände auf Lab: Erstellen der ersten Reporting Anwendung mit dem Visual Studio 2010 ReportViewer-Steuerelement
SQLInsights finden Sie auf der Seite MSDN Training und Zertifizierung Ressourcen unter der folgenden URL:
http://go.Microsoft.com/?linkid=9761002
Schauen Sie sich die Videos und überprüfen Sie die praktischen Übungseinheiten. Wenn Sie die Demos oder Hands-on Labs auf Ihrem eigenen Computer ausführen möchten, laden Sie diese herrunter und installieren Sie das offline Training Kit. Alle SQLInsights Inhalte finden Sie auf der Getting Started > BI Entwickler -Seite.
Ein weiterer SQLInsights Kurs, die Einführung in SQL Server 2008 R2 Analysis Services kommt in Kürze. Wir Hoffnung SQLInsights wird Ihnen helfen bei der Entwicklung Ihrer ersten Microsoft BI-Lösung. Nochmals vielen Dank für Ihr Interesse an SQL Server 2008 R2!
Müssen Sie anspruchsvolle, interaktive Berichte als Bestandteil einer Business Intelligence-Lösung entwickeln? Wenn ja, dann sollten Sie diesen Teil des SQL Server 2008 R2 Business Intelligence Training Kurs ("SQLInsights") auf MSDN anschauen. In nur ein paar Stunden können Sie lernen, wie Sie Ihre ersten Berichte mit Sql Server 2008 r2 Reporting Services entwickeln .
Hier ist ein Überblick über den Kurs:
4. Einführung in SQL Server 2008 R2 Reporting Services Präsentation: Grundlagen der Berichtserstellung mit SQL Server 2008 R2 Reporting Services Präsentation: SQL Server 2008 R2 Reporting Services-Berichtsdesign-Grundlagen Demo: Entwicklung eines einfachen SQL Server 2008 R2 Reporting Services-Berichts mit einer relationalen Datenquelle Präsentation: Interaktivität Hinzufügen eines SQL Server 2008 R2 Reporting Services-Berichts Demo: Hinzufügen von Interaktivität zu einem SQL Server 2008 R2 Reporting Services-Berichts Präsentation: Erweitern von SQL Server 2008 R2 Reporting Services-Berichten mit benutzerdefinierten Logik Zeiger auf das Lab: Erstellen Sie Ihre ersten relationalen Bericht mit SQL Server 2008 R2 Reporting Services
Sehen Sie sich die Videos an und überprüfen Sie die praktischen Übungseinheiten. Wenn Sie die Demos oder Hands-on Labs auf Ihrem eigenen Computer ausführen möchten, laden Sie diese hier herunter und installieren Sie des offline Training Kit. Alle SQLInsights Inhalte finden Sie im Getting Started > BI Entwickler -Seite.
Ein weiterer Kurs aus der SQLInsights Serie befasst sich mit der Veröffentlichung und den Zugriff auf SQL Server 2008 R2 Reporting Services-Berichte. Wir hoffen SQLInsights wird Ihnen bei der Entwicklung Ihrer ersten Microsoft BI-Lösung helfen. Nochmals vielen Dank für Ihr Interesse an SQL Server 2008 R2!
Für Entwickler, veröffentlichten wir die nächste Version in der Sql Server 2008 r2 Business Intelligence Trainingskurse ("SQLInsights") auf MSDN. Ich hoffe, Ihr voller Terminkalender erlaubt es Ihnen, die Erstellung eines ETL-Prozess (Extract, Transform, Load) mit SQL Server Integration Services (SSIS) zu erlernen, auch wenn es ein wenig Zeit erfordert. Entwickler verwenden SSIS-Pakete, um Datenmodelle zu beladen, die für ein schnelles und leistungsstarke Berichtswesen und Analytische Applikationen optimiert sind.
Hier ist ein Überblick über den neuen Kurs:
3. Einführung in SQL Server 2008 R2 Integrationsservices Präsentation: Einführung ETL-Verarbeitung mit SQL Server 2008 R2 Integrationsservices (SSIS)Präsentation: Implementieren von Ablaufsteuerung mit einem SQL Server 2008 R2 Integrationsservices-Paket Demo: Implementieren von Ablaufsteuerung mit einem SQL Server 2008 R2 Integrationsservices-Paket Präsentation: Implementieren von Datenflusstasks mit einem SQL Server 2008 R2 Integrationsservices-Paket Präsentation: Laden von Fakten- und Dimensionstabellen mit einem SQL Server 2008 R2 Integrationsservices-Paket Demo: Implementieren von Datenfluss Tasks mit einem SQLServer 2008 R2 Integrationsservices-Paket URL auf das Lab: Erstellen Sie Ihren ersten Extrakt-Transform-Load-Prozess mit SQLServer 2008 R2 Integrationsservices SQLInsights finden Sie auf der Seite MSDN Training und Zertifizierung Ressourcen unter der folgenden URL:
Schauen Sie die Videos an und überprüfen Sie die praktischen Übungen. Wenn Sie die Demos oder Hands-on Labs auf Ihrem eigenen Computer ausführen möchten, laden Sie die Dateien herunter und installieren Sie den offline Training Kit.
Sie finden Sie alle SQLInsights Inhalte auf der Getting Started > BI Entwickler -Seite. In dem nächsten SQLInsights Kurs befassen wir uns mit einer Einführung in SQL Server 2008 R2 Reporting Services. Wir hoffen SQLInsights wird Ihnen helfen mit der Entwicklung Ihrer ersten Microsoft BI-Lösung erfolgreich zu sein. Nochmals vielen Dank für Ihr Interesse an SQL Server 2008 R2!
Ich möchte auf eine Top Veranstaltung in Europa aufmerksam machen, die SQLBits in Brighton am 7. April 2011.
Auf der Veranstaltung spricht einer der Gründer Väter von Appel, Steve Wozniak. Steve ist heute Chef Entwickler von Fusion-IO, einer High-Performance Storage Technologie. Er wird über sehr alles verändernde Trends in der IT-Industrie sprechen.
Auch die Gartner Group hat die SQL Server 2008 R2 Funktionalitäten bewertet und in die obere rechte Ecke des Magic Gartner Quadranten verlagert, wo alle Markteilnehmer gerne hin möchten.Auf der SQLBits wird man einen Einblick bekommen von führenden Experten aus aller Welt, welche Fähigkeiten der SQL Server aufweist und wie man optimaler Weise damit umgeht.Wenn Sie erfahren wollen wie der SQL Server in Hochverfügbarkeits- und Analytischen Umgebungen zu Einsatz kommt, ist die SQLBit sicher eine Reise wert.
Hallo Zusammen, Vielleicht möchte der ein oder Andere an der Umfrage auf LinkedIn “The Future of Business Intelligence” teilnehmen. Zurzeit geht der Trend aus Sicht vom BI Team in Richtung Embedded Analytics. das dies der Standard wird. Was glauben Sie? Stimmen Sie mit und lesen was einige sehr prominente Mitstreiter denken @ http://linkd.in/fQCXAX Die Umfrage läuft nur noch bis morgen! Gruß, Ralph Kemperdick
Hallo Zusammen,
Vielleicht möchte der ein oder Andere an der Umfrage auf LinkedIn “The Future of Business Intelligence” teilnehmen. Zurzeit geht der Trend aus Sicht vom BI Team in Richtung Embedded Analytics. das dies der Standard wird. Was glauben Sie? Stimmen Sie mit und lesen was einige sehr prominente Mitstreiter denken @ http://linkd.in/fQCXAX
Die Umfrage läuft nur noch bis morgen!
Gruß,
Ralph Kemperdick
Bei den Connectivity Optionen von Linux zum SQL Server gibt es immer wieder Fragen wie es den genau funktioniert. Generell ist es jedoch meistens kein großes Problem, wenn man weiß welche Optionen es gibt.
1. Connectivity von Linux z.B. C++ Programmen auf den SQL Server erfolgt typischerweise über das ODBC Interface. Es gibt freie (Open Source Libraries) FreeTDS und kommerzielle Treiber z.B. von EasySoft und DataDirect.Eine gute Übersicht zu den verschieden Connectivity Optionen von einer Unix Plattform steht hier: http://www.sommarskog.se/mssqlperl/unix.html
2. Bei Standard JAVA Applikationen sollte der Zugriff kein Problem darstellen, wenn der JDBC Treiber sich austauschen lässt. Microsoft bietet einen JDBC Treiber für SQL Server zum freien Download hier an. Aktuell ist die Version 3.0 des JDBC Treibers, eine CTP des JDBC Treibers 4.0 wurde soeben freigegeben. Siehe http://blogs.msdn.com/b/jdbcteam/
3. Als einfache Applikation zur Datenpflege gibt es unterschiedliche Möglichkeiten von Microsoft. Die am häufigsten verwendete Option ist sicher MS-Access, das jetzt via SharePoint sehr leistungsfähige Web Applikationen erlaubt. Siehe http://office.microsoft.com/en-us/templates/CT010214400.aspx Einige Videos wie es genau handzuhaben ist findet man hier
Diese Zusammenstellung soll eine erste Orientierung in den umfangreichen Connectivity Optionen des SQL Servers bieten.
Die einzelnen Optionen sollte jedoch gegen die genauen Software Versionen im Einsatz geprüft werden.
Gruß
Da war ein Webcast geplant für die Vorstellung des SQL Server 2008 R2 Parallel Data Warhouse, der leider dem Schnee Chaos zum Opfer gefallen ist.
Deshalb hier nun die Aufzeichnung des WebCasts und der Link auf die PowerPoint Präsentation.
Frohe Weihnachten und einen guten Rutsch ins Neue Jahr wünscht Euch
Ralph KemperdickSenior Data Warehouse SpezialistMicrosoft Duetschland GmbH
PowerPivot, das neue kostenfreie Add-In für Excel 2010, gibt Endanwender erstmalig die Chance große Datenbestände effizient innerhalb von Excel zu analysieren. Dabei können diese Daten aus verschiedensten Datenquelle importiert, abgemischt und angereichert werden.Die Möglichkeit diese Analysen mittels Sharepoint Server anderen Kollegen direkt im Browser zur Verfügung zu stellen bietet dabei neue Möglichkeiten der Kolloboration und führt zu einer deutlichen höheren Produktivität aller Anwender.Auf vielfachen Wunsch hier ein kurzer Überblick (11min) zu den Grundfunktionalitäten von PowerPivot.
Weitere Informationen: