Browsing all articles in Allgemein

Beinahe ist Weihnachten, da dachte ich, ich könnte euch was unter den Weihnachtsbaum legen, das mri selbst viel gebracht hat.

Wenn man hie und da ein Demoszenario aufsetzt wie wohl wir aller hier, dann wäre es ja schön, auch ein paar Personen mit im AD zu  haben, um auch den Profilimport zu testen und den Organisational Browser zeigen zu können. Aus diesem Grund habe ich ein Script gesucht, der mir User im AD anlegt. Ich habe Teile gefunden und den Script vervollständigt. Zusätzlich habe ich euch ein Excel mit Userdaten, die ihr verwenden könnt.

Vorgehen:

  1. Eine OU „Employees“ anlegen
  2. den roten Teil im Script anpassen
  3. Script laufen lassen
  4. Vorgesetzte zuordnen (sorry, das hab ich nicht auch noch gemacht, so könnt ihr das CSV so umgestaltenbzw. erweitern wie ihr wollt)

Hier der Script:

$domain = (get-addomain).distinguishedname
$path = „OU=Employees,$domain“
$employees = Get-ADObject -Filter {distinguishedname -eq $path}

$users = import-csv -Delimiter „;“ -Path „C:\Scripts\usersToBeCreated.csv“
$ldappath = „LDAP://$path
$container = [ADSI] $ldappath
$users | foreach {
$first = $_.FirstName
$last = $_.LastName
$phone=$_.Phone
$mobile=$_.Mobile
$office=$_.Office
$job=$_.Job
$username = „$first“ + „.“ + „$last“
$email = „$username“ + „@szu.local
$newUser = $container.Create(„User“, „cn=“ + „$first“ + “ “ + „$last“)
$newUser.Put(„sAMAccountName“, $username)
$newUser.Put(„userPrincipalName“,“$username“ + „@szu.local“)
$newUser.Put(„givenname“,$first)
$newUser.Put(„sn“,$last)
$newUser.Put(„mail“,$email)
$newUser.Put(„description“,“Experts Inside User“)
$newUser.Put(„co“,“Switzerland“)
$newUser.Put(„company“,“Experts Inside GmbH“)
$newUser.Put(„countryCode“,756)
$newUser.Put(„displayName“,“$first“ + “ “ + „$last“)
$newUser.Put(„telephoneNumber“,“$phone“)
$newUser.Put(„l“,“Wil“)
$newUser.Put(„mobile“,“$mobile“)
$newUser.Put(„physicalDeliveryOfficeName“,“$office“)
$newUser.Put(„postalCode“,“9500″)
$newUser.Put(„st“,“SG“)
$newUser.Put(„streetAddress“,“Alleestrasse 4″)
$newUser.Put(„title“,“$job“)
$newUser.SetInfo()
$newUser.psbase.InvokeSet(‚AccountDisabled‘, $false)
$newUser.SetInfo()
$newUser.SetPassword(„SpAdvent2011“)
}

Dazu zugehörige CSV:

DOWNLOAD

So long, Samuel

SharePoint Online beinhaltet neben der Intranetverfügbarkeit auch eine sogenannte Public Facing Website. Heute zeige ich, wie wir diese schnell zur persönlichen Website machen und uns unsere eigene SharePointAdvent Seite bauen – ohne Code, ohne CSS Anpassungen.

Dazu gehen wir zuerst im Adminportal auf den Punkt Website bearbeiten:

image

Nun landen wir zuerst im backend, wo wir die Seiten unserer Website sehen. Standardmäßig sind hier bereits Startseite, Wir über uns, Kontakt und Sitemap angelegt.

image

Wenn wir die Startseite öffnen, sehen wir, dass es bereits vordefinierte Templates für die Public Facing Website gibt. Über einen Ribbon können wir die Seite verändern oder auch gleich Inhalte einfügen.

image

Für unser SharePoint Advent Layout habe ich den Banner des Blogs bereits vorbereitet. Diesen Banner lade ich über den Punkt Text / Logo in die Website und ändere dann auch gleich den Text der Website.

image

Als nächstes stelle ich das Farbschema um auf Pflaume:

image

Dann wird noch die gewünschte Bannerpositionierung gewählt.

image

Das im Design vorhandene Bild habe ich mit “kein Bild” aus unserem Layout entfernt.

image

Nun fülle ich unsere Website noch mit ein bisschen Text und Bildern. Und schon ist die eigene Website fertig, anzusehen hier.

image

Wie in meinem letzten Post erläutert, macht es durchaus Sinn, sich im Bereich SharePoint auch über das Backend Gedanken zu machen. Ein Teil davon ist die Erstellung der Datenbanken. Eigentlich sollte es den Button „Add new Content Database“ in SharePoint gar nicht geben.

Warum?  Hier sind die Gründe:

SharePoint erstellt eine neue Datenbank ab der Model und diese ist von Natur aus so konfiguriert:

  • 2MB gross (oder besser gesagt klein)
  • Ein einzelnes File in der Primary Filegroup
  • Growth ist auf 1 MB Unlimited Growth
  • Logfile ist 1MB gross
  • Growth ist 10%

 

Nach dem Erstellen einer leeren SharePoint Datenbank ist diese 2o MB gross, das heisst, sie ist bereits 18x gewachsen. Durch das Wachstum einer DB wird sie fragmentiert und wie man weiss, ist alles was fragmentiert ist langsamer, da die Datenstücke nicht aneinander hängen, sondern verteilt sind. Diese Verteilung muss vom DB Management System aufgefangen werden. Dieser Reibungsverlust schlägt sich in der Performance nieder.

Wenn ich nun die DB Stats abfrage, bekomme ich den Fragmentierungslevel der neuen Datenbank mitgeteilt, ACHTUNG: Es handelt sich notabene um eine leere SharePoint Datenbank, die noch überhaupt keinen Content enthält. SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(‚DB Name‘), Null, Null, Null, Null);

Ich erhalte hier 230 Rows, jede Row enthält den Hinweis auf einen Index. Meine Datenbank ist also schon sehr stark fragmentiert, obwohl sie leer ist. Da kann man sich vorstellen, dass dies an der Performance nagt.

Ein weiterer Punkt ist, dass allea auf einem Datenfile abgeht. Heute haben Prozessoren mehrere Kerne, und jeder hackt auf dem armen File rum. Viel besser ist es, wenn jeder Kern sich auf ein anderes File konzentrieren kann. Wenn eine DB in mehrere Files unterteilt ist, so wird abwechselnd auf die Files eingedroschen, was sich wiederum positiv auf die Performance auswirkt. Die Fausregel sagt, dass pro Prozessorkern 0.25 bis 0.5 Files angelegt werden sollten, mindestens aber 4. Bei mehr als 8 Files ist dann kein grosser Unterschied mehr spürbar. Beachten Sie folgendes:

  • Berechnen Sie vorab, wie viel Content später mal in die DB rein soll
  • Erstellen Sie die initiale DB Grösse entsprechend ein (wir sprechen von GB nicht von BYTES)
  • Stellen Sie das Wachstum auf eine vernünftige Grösse ein
  • Stellen Sie das LOG auch auf 1GB oder teilbar durch 8GB

Hier kommt der Script vorher noch im SQL Mgmt Studio unter „Query“ den „SQL CMD Mode“ aktivieren, alles was rot ist muss von euch noch customized werden (auch der User ganz am Ende, da kommt der Farm Admin rein:

— —————————————————————————————
— Disclaimer – Thoroughly test this script, execute at your own risk.
— —————————————————————————————

— set variables (Filesizes in MB)
:setvar DBName MyAdventDB
:setvar LoginitialMB 1024
:setvar LoggrowMB 1024
:setvar DatainitialMBperFile 341
:setvar DatagrowMBperFile 341
:setvar DataPath „C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA
:setvar LogPath „C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA

CREATE DATABASE [$(DBName)] ON  PRIMARY
— no grow on Primary-File (its only for sys tables and Service Broker Queues)
( NAME = N’$(DBName)Data01′, FILENAME = N’$(DataPath)\$(DBName)Data01.mdf‘ , SIZE = 128MB , FILEGROWTH = 0),
— 0.25-1 file per cpu core (each with same initial and grow size)
( NAME = N’$(DBName)_Data02′, FILENAME = N’$(DataPath)\$(DBName)_Data02.ndf‘ , SIZE = $(DatainitialMBperFile)MB , FILEGROWTH = $(DatagrowMBperFile)MB ),
( NAME = N’$(DBName)_Data03′, FILENAME = N’$(DataPath)\$(DBName)_Data03.ndf‘ , SIZE = $(DatainitialMBperFile)MB , FILEGROWTH = $(DatagrowMBperFile)MB ),
( NAME = N’$(DBName)_Data04′, FILENAME = N’$(DataPath)\$(DBName)_Data04.ndf‘ , SIZE = $(DatainitialMBperFile)MB , FILEGROWTH = $(DatagrowMBperFile)MB ),
( NAME = N’$(DBName)_Data05′, FILENAME = N’$(DataPath)\$(DBName)_Data05.ndf‘ , SIZE = $(DatainitialMBperFile)MB , FILEGROWTH = $(DatagrowMBperFile)MB )
LOG ON
— place tlog on another diskarray, use best practice size for optimal vlf handling (1GB/8GB)
( NAME = N’$(DBName)_log‘, FILENAME = N’$(LogPath)\$(DBName)_log.ldf‘ , SIZE = $(LoginitialMB)MB , FILEGROWTH = $(LoggrowMB)MB )
— collation for database (default, unless its for moss –>KS_WS!)
COLLATE Latin1_General_CI_AS_KS_WS
GO
— 90=2005/100=2008
ALTER DATABASE [$(DBName)] SET COMPATIBILITY_LEVEL = 100
GO
ALTER DATABASE [$(DBName)] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [$(DBName)] SET ANSI_NULLS OFF
GO
— set ANSI_PADDING True, refer to BOL for more information, not default setting
ALTER DATABASE [$(DBName)] SET ANSI_PADDING ON
GO
ALTER DATABASE [$(DBName)] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [$(DBName)] SET ARITHABORT OFF
GO
ALTER DATABASE [$(DBName)] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [$(DBName)] SET AUTO_CREATE_STATISTICS ON
GO
— never use AUTO_SHRINK on a production DB
ALTER DATABASE [$(DBName)] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [$(DBName)] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [$(DBName)] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [$(DBName)] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [$(DBName)] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [$(DBName)] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [$(DBName)] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [$(DBName)] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [$(DBName)] SET  DISABLE_BROKER
GO
ALTER DATABASE [$(DBName)] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [$(DBName)] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [$(DBName)] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [$(DBName)] SET  READ_WRITE
GO
— use same recovery model for each db in an instance (exceptions in olap environments)
ALTER DATABASE [$(DBName)] SET RECOVERY FULL
GO
ALTER DATABASE [$(DBName)] SET  MULTI_USER
GO
— change all dbs to checksum since 2005
ALTER DATABASE [$(DBName)] SET PAGE_VERIFY CHECKSUM
GO

— change db owner
USE [$(DBName)]
GO
EXEC dbo.sp_changedbowner @loginame = N‘domain\user‚, @map = false
GO

 

Am Ende noch mit Powershell an SharePoint anhängen und gut ist.

New-SPContentDatabase -Name <ContentDbName> -WebApplication <WebApplicationName>

So long, Samuel

Die SharePoint Sandbox wurde nun bereits mehrmals gut beschrieben, seit diese mit SharePoint 2010 das Licht der Welt erblickt hat.

Heute möchte ich aufzeigen, wie man mit SharePoint 2010 OnPremise Wege aus der Sandbox implementieren kann.

 

Warum möchte man Wege aus der Sandbox finden?

Die SharePoint Sandbox isoliert Custom Code, so dass die vorhandene SharePoint Farm von vermeidlich „kleinen“ oder „unscheinbaren“ Lösungen nicht in Mitleidenschaft gezogen werden kann. Sie ermöglicht es SiteCollection Administratoren direkt über die Solution Gallery WSPs – welche explizit als Sandboxfähig markiert sind – bereitzustellen und zu aktivieren. Ein perfekter Mechanismus für die OnDemand Variante Office365, doch in Konzernen möchte man häufig etwas mehr.

Dieses „etwas“ kann der Aufruf eines bestimmten WebServices, das Schreiben auf eine bestimmte FileShare oder das Laden und Interpretieren des Unternehmens-Feeds sein. In jeder Limitation die uns die Sandbox vorschreibt finden SharePoint Anwender ein kritisches Feature welches Sie aber innerhalb Ihrer Sandbox als verfügbar sehen möchten.

Durchaus üblich sind solche Anforderungen von zentralen IT Abteilungen, die womöglich weltweit verfügbare und verwendete SharePoint Farmen administrieren. Hier muss natürlich auf Sandboxing gesetzt werden, weil der Betrieb solcher SharePoint Farmen schon sehr intensiv ist, würde hier das Monitoring und die Validierung aller Custom Solutions noch bei der Abteilung aufschlagen welche für das Hosting verantwortlich ist, würde dies zu einer mehr als hohen Auslastung führen. Daher ist es in PrivateCloud Szenarien üblich SharePoint’s Full-Trusted Proxies einzusetzen und somit bewusst Wege aus der Sandbox heraus zu öffnen.

Full-Trusted Proxies

In SharePoint 2010 stellt ein „Full-Trusted-Proxy“ genau eine Methode zur Verfügung welche aus Sandboxed Lösungen heraus aufgerufen werden können. Das Deployment eines Full-Trusted-Proxies geschieht über eine WSP – welche nur von einem Farmadministrator installiert und aktiviert werden kann.

Analog zur eigentlichen Sandbox Solution läuft auch der Proxy nicht im IIS Prozess (w3wp.exe) sondern im Prozess SPUCWorkerProcessProxy.exe, in dem auch die Standard Microsoft.SharePoint.dll zur Verfügung steht. Abbildung 1 zeigt wie das Zusammenspiel der Komponenten an dieser Stelle ist.

clip_image002

Abbildung 1 – Full-Trusted Proxies Quelle www.microsoft.com

 

Wichtig ist darüber hinaus, dass die Full-Trusted-Proxy Operation mit der Sandbox-Lösung nur über Ihren eigenen Rückgabewert kommunizieren kann.

 

Die Implementierung

Im folgenden Beispiel möchte ich die Anforderung aufgreifen, die ich zu Beginn angesprochen habe. Einen RSS Feed innerhalb einer Sandboxed Solution abfragen. Innerhalb der Sandbox ist es via CAS verboten die Load Methode der Klasse XElement aufzurufen, deshalb muss diese Operation als Full-Trusted-Proxy realisiert werden.

 

Abbildung2

Wie in Abbildung 2 zu sehen ist, muss das Projekt für den Proxy als Full-Trusted-SharePoint Projekt angelegt werden. Die Realisierung als Full-Trusted-Proxy kann im Wesentlichen auf drei elementare Bestandteile reduziert werden.

 

SPProxyOperationArgs

Zunächst sollte man eine Klasse erstellen, die von SPProxyOperationArgs abgeleitet ist. Diese neue Klasse wird im späteren Verlauf für den Übergabewert der Execute Methode verwendet. Alles was für den RSS-Feed-Reader benötigt wird ist die zugrundeliegende URL, welche aggregiert werden soll.

Abbildung3

 

SPProxyOperation

Der zweite und wichtigste Bestandteil ist die Implementierung des Proxy’s selbst. Hierzu wird eine weitere Klasse erstellt, die von SPProxyOperation abgeleitet ist. Innerhalb der Execute Methode wird die Logik platziert, die den RSS Feed lädt.

 

Abbildung4

 

Hierbei sind zwei Dinge zu beachten. Erstens muss der Parameter der Methode von SPProxyOperationArgs in unseren zuvor erstellten Typ RssFeedReaderArgument gecasted werden. Zweitens kann der Rückgabewert der Methode nur ein serialisierbares Objekt sein.

Registrierung des eigenen Full-Trusted Proxies

Der dritte und letzte Bestandteil des Full-Trusted-Proxies ist die Registrierung des Proxies beim gewünschten UserCodeService. Hierzu kann der FeatureEventReceiver des Farm-Features verwendet werden. Zur Vollständigkeit hier ebenfalls der Code zum Entfernen des Proxies bei der Deaktivierung des Features.

Abbildung5

Die Verwendung in einer Sandboxed Solution

Dank der Methode ExecuteRegisteredProxyOperation der Klasse SPUtility, ist die eigene Proxy-Operation im Handumdrehen aufgerufen. Die Methode bekommt lediglich drei Parameter

· FullQualifiedAssemblyName der Proxy-Operation

· FullQualifiedTypeName der Proxy-Operation

· Eine Instanz der RssFeedReaderArgument Klasse

Abbildung6

Als Resultat des Aufrufes erhält der Sandbox-Entwickler den RSSFeed als String, genau wie zuvor implementiert.

 

Fazit

Full-Trusted-Proxies bieten einen einfachen, sicheren und kontrollierten Weg aus der Sandbox heraus. Gerade in PrivateCloud Szenarien bieten Full-Trusted-Proxies ein gutes Mittel um Herr aller Custom Solutions zu werden.

 

-Thorsten

Am heutigen 3ten Advent einmal eine kurze Vorstellung von Office 365 anhand des P-Plans. Bereits letzte Woche habe ich dazu eine Trial erstellt, die schnell eingerichtet ist. Eine Trial im P-Plan umfasst 10 User für 30 Tage, beim E-Plan sind es 25 User im E3-Plan, hier ist es sehr smart, da damit auch gleich Office professional plus mitgetestet werden kann.

Der P-Plan umfasst Exchange Online, Lync Online und SharePoint Online.

Gleich nach dem Login auf https://portal.microsoftonline.com finden wir uns – als User – auf der Startseite wieder und können hier gleich in die Outlook Web Apps einsteigen, den Lync Client installieren oder auf die Teamwebsite zugreifen.

image

Als Administrator sehen Sie in der Verwaltung gleich die am häufigsten verwendeten Befehle, z.B. Benutzerkennwörter zurück setzen.

Schnell einrichten eines Abos

Am schnellsten gehen Sie bei der Einrichtung eines neuen Abo’s so vor:

1. Domain hinzufügen und verifizieren.

2. Benutzer hinzufügen

Damit erhalten alle Benutzer auch gleich das korrekte Login mit der eigenen Domain. Für die Massenhinzufügung von Benutzeraccount können Sie sich eine CSV Datei direkt im Portal laden, ausfüllen und damit alle User sehr schnell hinzufügen.

Ich habe dazu die CSV Datei als Excel Datei gespeichert und fülle dort die Felder aus.

image

Anzeigename und Benutzername habe ich hier noch nicht ausgefüllt, dies mache ich über eine Excel Formel, die ich kurz beschreiben möchte (alle Softwareentwickler sollen an dieser Stelle einfach zum Punkt: importieren weiterspringen). Ich verwende dazu in Spalte D, Zelle D3 folgende Formel:

=B3&” “&C3

image

Danach fülle ich die restlichen Spalten mit dem nach unten kopieren aus.

image

Wie schaut die gleiche Formel für das Feld Benutzername aus?

=B2&"."&C2&"@DOMAINNAME.com"

image

Mit dieser Vorlage können Sie sehr schnell User eintragen. Die Datei wird dann als CSV gespeichert. Dies öffne ich dann in einem Editor und ersetze mit Suchen und Ersetzen das Semikolon durch ein Komma.

image

Importieren der Benutzer

Nachdem nun alle User in der CSV Datei vorhanden sind, werden sie importiert.

image

Die Überprüfung hat ergeben, dass alles korrekt ist:

image

Nun die Region festlegen und Lizenzen zuweisen. Danach sind die User angelegt und die temporären Kennwörter werden erstellt.

image

 

Schon sind alle meine SharePoint Advent Kollegen angelegt.

Hinter dem Türchen im SharePoint Adventskalender verbirgt sich heute eine Kostprobe des SharePointPodcasts, dem auditiven Update für den engagierten SharePoint-Anwender mit Themen, Trends, Tipps, Tricks und Talk. Ich produziere den SharePointPodcast seit fast 7 Jahren in mittlerweile 197 Ausgaben, in denen ich aktuelle News, Tools, Veranstaltungstipps und mehr aus dem SharePoint-Land vorstelle.

Ein wesentlicher Bestandteil dces SharePointPodcasts sind auch die Gespräche und Interviews, die ich mit Menschen wie du und ich aus dem SharePoint-Land führe.

Mit Chris Müller haben ich eine kleine Reihe begonnen, in der wir unter dem Stichwort AlpenPodcast uns über SharePoint und die Welt unterhalten.

Hier ein Auschnitt aus unserem Talk auf den CollaborationDays 2011 in Luzern, die vollständige Episode könnt ihr im SharePointPodcast 197 hören.

 

Sehr oft wird SharePoint eingesetzt, ohne dass durchwegs bekannt wäre, welche Komponenten alle berücksichtigt werden müssen. Mit dem Begriff „SharePoint“ wird dann vor Allem eine Office ähnliche Software gemeint, mit welcher man zusammenarbeiten kann.

Nicht weniger oft wird dann SharePoint mit weiter, weiter, Fertigstellen installiert, und damit hat sich’s dann. Best Practices werden zwar im Bereich AD, Windows Server usw. bereits vielerorts angewandt, aber SharePoint ist oft ein Buch mit sieben Siegeln. Auch dafür gibt es ganz viele Grundlagen, die man berücksichtigen muss. Auf eine dieser Grundlagen will ich heute eingehen.

Es gibt eine ganz einfache Grundregel im Bereich Performance und die heisst SQL Server langsam = SharePoint langsam. SharePoint ist eine Webapplikation und von dieser erwartet der Enduser eine Klick and Run Experience. Wenn er diese nicht erhäldt, dann wird sofort auf SharePoint geschimpft, obwohl das Problem in den meisten Fällen an einem anderen Ort liegt. Ein Frontend kann 15 bis 20’000 User bedienen mit einer 10% Concurrency. Heisst, alle Kleinen und mittleren Unternehmen könnten mit einem starken Frontend auskommen. Das zweite Frontend wird meist nur für die Ausfallsicherheit eingesetzt.

Wo liegt also oft das Problem? Primär an zwei Orten:

  1. Dem SQL Server
  2. Dem Disksubsystem

Es gibt Regeln, wie eien SQL Server aufgesetzt werdne sollte, um die Performance zu erhöhen. Auch gibt es Regeln, wie ein Disksubsystem sein sollte, wenn man SharePoint Datenbanken darauf hosten will.

Der SQL Server

Hier ein paar Grundregeln, wie der SQL server konfiguriert werden muss:

Beginnen wir einmal bei der Aufteilung der Datenbanken. Wir unterscheiden High und Low Traffic Datenbanken, verschiedene Zugriffsmuster und die Logfiles.

 

 Die Suchdatenbank ist grundsätzlich die User DB mit dem grössten Traffic Read und Write. In grösseren Umgebungen macht es sinn, diese komplett in eine eigene Instanz auszulagern, um die restliche SharePoint Installation nicht zu gefährden. In kleinen bis mittleren Farmen kann diese auch in die normale SharePoint Instanz integriert sein. Grundsätzlich sollte aber in einer SharePoint Instanz nichts anderes laufen als SharePoint.

Stellen Sie sicher, dass Transaction Log, User DBs und die Temp DB auf eigenen LUNs in ihrem SAN liegen, d diese ein komplett untershcieldiches Zugriffsmuster haben. T-Log ist Sequential Write, User DBs sind verschieden: Content DBs sind Moderate Read und die Search ist Heavy Read/Write. Die Temp DB ist die schlimmste und ist Heavy Read/Write. Wenn nicht zumindest die Aufteilung wie oben erwähnt gemacht wird, werden sich die vershciedenen Daten ausbremsen.

Kommen wir zu den Einstellungen auf dem SQL Server:

Multiple Datafiles

Stellen Sie sicher, dass alle Datnebanken auf mehrere Datenfiles aufgeteilt sind. Dies erhöht die Performance erheblich. Erstellen Sie die DBs per Script und nicht per „Create New Content DB“ Button. Details dazu in meinem nächsten Post später im Advent.

 

Fill Factor auf 70% setzen

Diese Einstellung stellt sicher, dass Ihr Index weniger schnell fragmentiert. Wenn neue Datensätze eingefügt werden müssen, so werden diese in die leeren 30% eingefügt. Normalerweise ist der Fillfactor auf 100% und somit fragmentiert der Index beim ersten Insert. Jede Fragmentierung verlangsamt den SQL Server

 

T-Log Backup alle 15min bis max. 24h

Dies ist weniger ein Performance Issuer als ein Platzfresser. SharePoint Datenbanken sind per Standard auf Fullrecovery Mode eingestellt. Wenn Sie keine Log Backups machen, wird Ihnen das Logfile unter Unständen immer weiter wachsen. Ein Logbackup stellt sicher, dass alles in die DB geschrieben wurde und gibt das Log frei zum überschreiben. Zudem haben Sie eine zusätzliche Sicherheit zu Ihren Backups im Desasterfall.

 

Disable Boost SQL Server Priority

Diese Einstellung verleitet oft zum einschalten, ist aber im SharePoint Umfeld aufgrund der speziellen Konstellation von SharePoint eher hinderlich.

 

Max Degree of Parallelism 1 (für SharePoint only Instanzen)

Hier wird geregelt, wie viele Threads gleichzeitig für eine Query auf die Prozessoren verteilt werdne. Normalerweise ist die Einstellung auf 0, und der SQL entscheidet. Für SharePoint ist es besser, wenn eine Query immer nur auf eine Thread läuft, dies hat sich in Tests gezeigt.

 

Min und Max Memory konfigurieren

Stellen Sie sicher, dass der SQL Server genügend Memory bekommt, dass das Betriebssystem aber nicht zu leiden beginnt. Faustregel ist Memory Installed – 3GB = Max Memory. Wenn man die automatische Einstellung lässt, nimmt sich SQL was er bekommt. Wenn das Betriebssystem anfängt zu schreien, gibt er nach und nach frei, doch dann ist es meist bereits zu spät.

 

Temp DB auf 10GB und 4 Files verteilen, Autogrowth 1GB

Die Temp DB ist die meist belastete DB bei SharePoint, da jede Liste die in irgendeiner Art gruppiert oder sortiert ist, zuerst durch die Temp DB läuft. Machen Sie diese genur gross und verteilen Sie die DB auf mehrere Datenfiles. So wird die DB beim Start immer 10GB sein und wird somit durch die Wachserei und dadurch die Fragmentierung nicht langsam.

 

Lock Pages in Memory (für SQL Std. –T845) und Perform Volume Maintennance Tasks für SQL Account setzen

Lock Pages in Memory erlaubt dem SQL Server direkt Memory zu allozieren. Perform Volume Maintennance Tasks gibt SQL das Recht, beim Erstellen der DB Start und Endpunkt auf der Disk zu setzen, die Erstellung wird dadurch erheblich schneller. wird der Diskspeicher mit lauter Nullen aufgefüllt.

 

Traceflag 1117 (-T1117) für gleichmässigen Filegrowth

Dies ist ein Undocumented Flag und wird in den Startup Parametern der SQL Instanz gesetzt. Es garantiert den gleichzeitigen Growth mehrerer Datenfiles. Warum man mehrere Datenfiles machen sollte und wie, dazu später im Adventsblog. Wird dieses Flag nicht gesetzt, so füllt SQL alle Files gleichzeitig, wenn alle voll sind wächst File 1 und wird zuerst wieder gefüllt dann wächst File 2 etc… Das ist gerade nicht der Effekt, den man sich von mehreren Datenfiles erhofft.

 

Backupcompression einschalten

Das Backup wird schneller und kleiner. Was will man mehr? Dies geht zu Lasten der CPU, doch das ist vernachlässigbar.

 

Index Maintennance <=30% Reorganisation, sonst Rebuild

Der Index trägt nachhaltig zur Geschwindigkeit der Datenbanken bei. Man sollte darauf achten, dass periodisch die Indizes geprüft werden. Unter 30% Fragmentierung ist eine Reorganisation möglich, sonst muss der Index rebuildet werden.

Für den Indexrebuild empfhiehlt es sich, Max Degree of Parallelism wieder auf 0 zu stellen, da die Reorganisation bzw. der Rebuild schneller über die Bühne geht. Danach wieder zurück auf 1.

 

Update Statistics täglich, DBCC Checkdb vor Fullbackup

Mit Update Statistics wird der Einstiegspunkt festgelegt, damit nicht immer ein Fulltablescan gemacht werden muss. DBCC Checkdb verifiziert die Datenbanken auf ihre Konsistenz. ACHTUNG Repair with Dataloss ist im SharePoint nicht supportet!

 

To BLOB or not to BLOB

Zu guter letzt sollte man sich auch Gedanken über RBS machen. Wie in einem früheren Post erwähnt, entlastet der BLOB Store den SQL Server. Es gab eine Studie, wonach Files < 1MB schneller vom SQL und >1 MB schneller vom Filesystem gestreamt werden. Auch kann der RBS auf günstigeren Disks liegen, was die Gesamtkosten der Infrastruktur senkt. Bitte aber genau prüfen, bevor man da einsteigt. Die Backup Restore Szenarien verkomplizieren sich nämlich durch RBS ;-)

 

Und noch was zum Schluss: Never Virtualize an SQL Server (meine persönliche Meinung, die ein paar Cracks der Microsoft Consulting Services mit mir teilen…)

 

Das Disksubsystem

Disk Alignement

Auch auf dem Disksubsystem gibt es einiges zu beachten. Wenn nämlich mal der SQL mal sauber aufgesetzt und konfiguriert ist, kommt noch das Disksubsystem, auf welchem die Daten liegen. Of wird dies als „Grosser Kübel“ hingestellt und gut ist. Dass sich aber Threads gegenseitig ausbremsen, daran denkt niemand. Beginnen wir mal ganz unten, nämlich beim Disk Alignement. Wurde das Disk Alignement falsch gemacht, verursachen sie dem Disksubsystem Schmerzen, da es defakto die selbe Info zweimal schrieben muss. Einmal auf die Partition und dann noch auf die physische Disk. Stellen Sie sicher, dass die Partitionierung mit einer Blockgrösse von 64KB gemacht wurde. Ältere Systeme haben eine Blockgrösse von 4KB was denkbar schlecht ist.

Hier die Performanceunterschiede mit Aligned und Unaligned Disks:

DiskPartitionAlignmentFig1.jpg

Microsoft hat ein Whitepaper zum Disk Alignement und SQL Server 2008 bereitgestellt, welches exakt zeigt, wie man es einstellt, prüft und korrigiert. Auch werden die Auswirkungen detailiert aufgezeigt.
Hier der Link: http://download.microsoft.com/download/C/E/7/CE7DA506-CEDF-43DB-8179-D73DA13668C5/DiskPartitionAlignment.docx

 

Performance, IOPS und Anzahl Disks

Es gibt ganz viele Hersteller, die behautpen, das beste Disksubsystem für SharePoint zu haben. Ich sage dazu nur eines: Kein RAID10, kein gutes Disksubsystem für SharePoint. Grundsätzlich geht es um Performance, und da ist RAID10 nicht zu überbieten, auch wenn es notabene das verschwenderischste ist, da die zwei Platten welche zusammen mehr performance ergeben und zusätzlich noch gespiegelt werden. Man kann also genau 50% des eingekauften Speicherplatzes effektiv nutzen, was eigentlich eine schlechte Ausbeute ist.

Wir wollen aber Performance und daher wird auch von Microsoft dringend RAID10 empfohlen. Dann können Sie auch als Grundregel nehem, was unter 140 MB/s Throughput hat ist zu langsam. Diese Rechenmethode hat ihre Grenzen, denn sie sagt alleine nicht viel aus.

Sicherer ist mit IPOS zu rechnen. Hier ist die Faustregel 2 IOPS pro GB Daten. Da wird schnell klar, dass wir schnell mal ein paar IOPS auf unserem Disksubsystem brauchen.

Wichtige Grundregel beim Disksubsystem ist auch die Anzahl Disks, nicht nur der benötigte Platz sonder die Anzahl Spindeln, welche den IO verarbeiten sind hier die wichtigen Faktoren.

Es empfiehlt sich, einige Tests mit SQLIO zu machen.
Zum Tool:  http://www.microsoft.com/download/en/details.aspx?id=20163
zur Beschreibung: http://technet.microsoft.com/en-us/library/cc966412.aspx

 

So, nun habe ich erstmal genug losgelassen, ich lass euch das ganze erst mal verdauen.

So long, Samuel

 

Das Microsoft Certified Master Program ist das High-End Training für SharePoint Cracks – in drei Wochen intensiven Trainings kann man dabei den Titel Microsoft Certified Master on Microsoft SharePoint Server 2010 erwerben, vorausgesetzt natürlich, man qualifiziert sich für die Teilnahme und wird von Microsoft dazu eingeladen.

Marek Czarzbon, der Leiter unserer SharePoint User Group Nürnberg/Erlangen, ist den Weg gegangen und hat mir in einem Videointerview ein wenig von seinen Erfahrungen berichtet.

 

[youtube http://www.youtube.com/watch?v=4hn4Ve4EraA]

 

Gedicht

Ich möchte das erste Türchen des SharePoint Adventskalenders 2011 dazu nutzen allen Beteiligten Personen an dieser Stelle zu danken. Es freut mich sehr, das meine Idee auf solches Wohlwollen gestoßen ist.

 

Im Laufe des Advents werden die SharePoint und Office365 MVPs Erfahrungsberichte und Tips rund um die SharePoint Welt mit euch teilen. Die Einträge zielen auf unterschiedliche Bereiche. Vom Anwender über den IT-Pro bis zum Developer, für jeden wird etwas im Adventskalender dabei sein, daher lohnt es sich täglich auf www.SharePointAdvent.de vorbeizuschauen.

 

Das Gewinnspiel

Wie auch im Jahr 2009 haben wir wieder einige sehr nette, der SharePoint Community wohlgesonnene Unternehmen gefunden, die uns ein paar sehr coole Preise zur Verfügung gestellt haben.

Was müsst Ihr tun um einen dieser Preise zu gewinnen? Nun ganz einfach! Verfasst euren Featurewunsch für die vNext von SharePoint einfach als Kommentar auf unserem Blog!  An der Verlosung nehmen automatisch alle Kommentare mit Featurewunsch für die vNext von SharePoint teil, die zwischen dem 01.12.2011 und dem 25.12.2011 abgegeben wurden.

Eine Verlosung der Sachpreise findet in der 1. Kalenderwoche von 2012 statt. Alle Gewinner werden via E-Mail informiert und in einem weiteren Blogartikel genannt.

Der Rechtsweg ist ausgeschlossen.

 

Ein herzliches Dankeschön an

 

Intel12

 

ShareConf20124

 

AvePoint_logo4

 

Logo_dotNet_UserGroup_32EA450B4

 

ExpertsInside8

 

Microsoft TechNet

 

 

Es bleibt mir also nur noch euch allen viel Spaß mit dem SharePoint Adventskalender zu wünschen.

 

Thorsten

.. morgen geht es los mit dem SharePoint Advent.

Was? Immer noch nix mit dem Weihnachtsbaum? Wie wäre es denn mit der NERD-Variante?

[vimeo http://vimeo.com/8351384]

Hinweis zum Kommentar

Zum Kommentieren der Beiträge (und damit zur Teilnahme am Gewinnspiel) bitte auf die Zahl in der Bubble neben dem Titel des Blogeintrags klicken, dies öffnet das Kommentarformular!

Sponsored by

Subscribe

Über

Der SharePoint Advent

Ein Gemeinschaftsprojekt der deutschsprachigen SharePoint MVP's

Rubriken

Impressum

(c) 2011 SharePointCommunity