Collaboration beginnt im Kopf – nicht bei der Technik


Schon vor einiger Zeit habe ich mal in einer schlaflosen Nacht eine Präsentation über die Voraussetzungen von Kollaboration erstellt. Es geht dabei darum, dass Kollaboration nicht mit Technik beginnt, sondern in den Köpfen der Menschen. In der Art und Weise wie wir miteinander umgehen.

Wie sollen die Mitarbeiter zusammenarbeiten, einander helfen, sich gegenseitig unterstützen, wenn wir doch in einem System der Selbstbezogenheit, der Gewinnmaximierung und ROI Wahnsinn leben? Wenn es fast nur noch darum geht, was für mich drin ist? Wir es gewohnt sind, dass man uns alles zuträgt? Sit back and kick the TV on…

In dieser Präsentation habe ich mir über diese Themen Gedanken gemacht. Was müssen wir in unserer Zusammenarbeitskultur tun, damit wir auch mit den uns zur Verfügung stehenden Systemen zusammenarbeiten? Natürlich gebe ich die Präsentation auch mal gerne in euren Teammeetings oder auf Tagungen.

So Long, Samuel

 

Probleme bei der Installation von SharePoint (Configuration Database Fail)


Problem

Wieder einmal in meinem SharePoint Leben bin ich auf ein neues Problem gestossen. Beim laufen lassen des Configuration Wizzards hatte ich folgende Fehlermeldung:

Failed to create the configuration database.
An exception of type System.Collections.Generic.KeyNotFoundException was thrown. Additional exception information: The given key was not present in the dictionary.
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)
at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username)
at Microsoft.SharePoint.Administration.SPManagedAccount.Update()
at Microsoft.SharePoint.Administration.SPProcessIdentity.Update()
at Microsoft.SharePoint.Administration.SPApplicationPool.Update()
at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, SPProcessAccount processAccount, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)
at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, IdentityType identityType, String applicationPoolUsername, SecureString applicationPoolPassword, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)
at Microsoft.SharePoint.Administration.SPAdministrationWebApplication.CreateDefaultInstance(SqlConnectionStringBuilder administrationContentDatabase, SPWebService adminService, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.CreateAdministrationWebService(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.CreateBasicServices(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()

Lustigerweise war die ConfigDB aber vorhanden:

Ursache

Die Fehlermeldung lässt den Schluss zu, dass das Problem offenbar nicht in SharePoint liegt. (at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)).
Ausserdem hat es wohl mit den Managed Accounts zu tun (at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username))

Nach etwas Suchen, fand ich heraus, dass es sich um Probleme mit den Read Berechtigungen im Active Directory handelt.

Lösung

Offensichtlich hat Ihr AD Administrator entschieden, nicht alle Attribute freizugeben. Gehen Sie zur Lösung wie folgt vor:

  1. Lassen Sie eine AD Gruppe erstellen
  2. Alle managed Accounts (Farm, Services, Crawl, WebAppPool) in die Gruppe einfügen
  3. Die Gruppe auf Domain Ebene mit Read all Attributes berechtigen

Danach funktioniert die Installation.

so long, Samuel

Automatisch User im AD anlegen für SharePoint Demo Umgebung


Das wollte ich euch schon lange mal posten, hab ich für SharePoint Advent gemacht.

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:

Eine OU “Employees“ anlegen

Script laufen lassen

Vorgesetzte zuordnen (sorry, das hab ich nicht auch noch gemacht, so könnt ihr das CSV so umgestalten bzw. erweitern wie ihr wollt)

Hier der Script:

$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("Training2010”)
}

 

Dazu zugehörige CSV:

FirstName;LastName;Phone;Mobile;Office;Job
Franz;Schmid;055 382 16 20;074 265 15 20;A380;Sales and Marketing
Hans;Muster;055 382 16 21;074 265 15 21;A380;Sales and Marketing
Fritz;Meier;055 382 16 22;074 265 15 22;A380;Sales and Marketing
Karl;Glanzmann;055 382 16 23;074 265 15 23;A380;Sales and Marketing
Fred;Muster;055 382 16 24;074 265 15 24;A381;Lead Sales and Marketing
Thomas;Zuercher;055 382 16 25;074 265 15 25;B240;Administration
Alfred;Trimmbach;055 382 16 26;074 265 15 26;B240;HR
Marianne;Mueller;055 382 16 27;074 265 15 27;B240;HR
Verena;Maeder;055 382 16 28;074 265 15 28;B240;HR
Simon;Albrecht;055 382 16 51;075 265 15 51;B240;Finances
Patricia;Opprecht;055 382 16 29;074 265 15 29;B240;Finances
Andreas;Meier;055 382 16 30;074 265 15 30;B241;Lead HR, Admin and Finances
Stefan;Heinz;055 382 16 31;074 265 15 31;C320;Consultant
Hilton;Gieswnow;055 382 16 32;074 265 15 32;C320;Consultant
Rolf;Beck;055 382 16 33;074 265 15 33;C320;Consultant
Elvira;Beck;055 382 16 34;074 265 15 34;C320;Consultant
Hedwig;Grunder;055 382 16 35;074 265 15 35;C320;Consultant
Nicole;Hang;055 382 16 36;074 265 15 36;C320;Consultant
Dani;Sangue;055 382 16 37;074 265 15 37;C320;Consultant
Martin;Wille;055 382 16 38;074 265 15 38;C320;Consultant
Marcel;Spring;055 382 16 39;074 265 15 39;C320;Consultant
Juerg;Flueckiger;055 382 16 40;074 265 15 40;C320;Consultant
Simran;Chawla;055 382 16 41;074 265 15 41;C321;Lead Consulting
Norberto;Restrepo;055 382 16 42;074 265 15 42;D450;Developper
Adriano;Celentano;055 382 16 43;074 265 15 43;D450;Developper
Serge;Aeschbacher;055 382 16 44;074 265 15 44;D450;Developper
Sandro;Betinelli;055 382 16 45;074 265 15 45;D450;Developper
Silvan;Maletti;055 382 16 46;074 265 15 46;D450;Developper
Stephen;Marthaler;055 382 16 47;074 265 15 47;D450;Developper
Stefan;Iseli;055 382 16 48;074 265 15 48;D450;Developper
Peter;Mueller;055 382 16 49;074 265 15 49;D450;Developper
Doris;Zwahlen;055 382 16 50;074 265 15 50;D451;Lead Developpment
Christian;Glessner;055 382 16 53;074 265 15 53;X100;Management

 

So long, Samuel

SQL ist das Fundament von SharePoint: Technet Newsletter 2.12


Der TechNet Flash informiert Sie alle drei Wochen über neue Microsoft-Inhalte und -Services für IT-Professionals. Wenn Sie diesen Newsletter in Zukunft nicht mehr erhalten wollen, nutzen Sie bitte den Link am Ende dieser Ausgabe.

Editorial

René Hanselmann

Liebe Leserinnen und Leser
Wissen ist ein sehr wichtiges Asset für den IT Professional und Training wollen wir entsprechend anbieten. Seit 2 Wochen sind die Schweizer TechNet Seminare (Februar – Juni 2012) für Euch detailliert aufgesetzt. Die nächsten Seminare finden am 22. Februar und am 28. Februar statt,jetzt anmelden!
Windows TechConference: Besonders viele IT Pros haben sich bereits für die Windows TechConference vom 12. März 2012 in Baden angemeldet. Es geht ja auch um alles Wissenswerte rund um die kommenden Versionen von Windows Client und Windows Server. Für IT Professionals gibt es einen speziellen Track mit 4 Sessions. Die Agenda steht auf der Event-Page. Das Ticket kostet CHF 200.–. Hier können Sie sich anmelden!
Für die Suisse Romande wird ein entsprechender Event Ende April 2012 organisiert – mehr dazu finden Sie bald im TechNet Newsletter.
TechEd 2012 Amsterdam: Seit der Ankündigung der TechEd 2012 im letzten Newsletter sind schon viele Anmeldungen aus der Schweiz eingegangen. Die 300 Euro Rabatt auf das Ticket gelten bis Ende März. Wir haben uns entschlossen, auch dieses Jahr eine Schweizer Party durchzuführen. Diese soll am Donnerstag, 28. Juni 2012 stattfinden. Mehr dazu erfahren alle Teilnehmer rechtzeitig vor der TechEd. Registrieren Sie sich jetzt für die TechEd 2012 in Amsterdam und sparen Sie 300 Euro.
Internet Explorer Upgrade:Im Dezember 2011 gaben wir bekannt, dass PCs von Kunden, die das Betriebssystem Microsoft Windows nutzen, automatisch auf die neueste Version des Internet Explorer aktualisiert werden. Dieses Upgrade ist wichtig, weil unsere Kunden so immer die neueste und sicherste Version des Internet Explorer verwenden, derzeit Internet Explorer 9 (IE9). In der Schweiz soll das für Consumer schrittweise von Mitte Februar an geschehen. Unternehmen, die ihre PCs selbst verwalten oder das Windows-Update-Blocker-Tool installiert haben, können auch weiterhin selbst kontrollieren, welche Updates auf ihren PCs installiert werden. Ausführliche technische Informationen erhalten Sie im Springboard Blog und im IE TechCenter.
Nur am 23. Februar 2012 (09:00h – 17:00h) gibt es das Virtualization Jumpstart Training inkl. Exam für $99: Für Sie haben wir ein spezielles Angebot. Verbessern Sie online Ihr Know-how über Microsoft-Virtualisierungs-Technologien. Sie erhalten 1 Tag Live Online Training und dazu einen Gutschein für ein Exam 70-659.
Im Top Thema schreibt Samuel Zürcher, Microsoft MVP SharePoint, über die Basis SQL Server als Fundament von SharePoint. Lesen Sie das Top Thema. Ich wünsche Ihnen noch eine gute Woche und viel Spass beim Lesen.
Freundliche Grüsse

Hanselmann signature

René Hanselmann
IT Pro Audience Marketing
TechNet Schweiz

TechNet Specials

TechCenters

TechNet Home
Get Newsletter
SW for Test/Evaluation
EDGE (Videos, Articles)
WEBcast Finder

Windows Client
Windows Server
Exchange
Office
SQL Server

SUI12161_01-02_Heike_Krannich

Der SQL Server ist das Fundament von SharePoint
Wie wäre es eigentlich, wenn das nächste Skirennen ohne Schnee stattfinden würde. Undenkbar, sagen Sie? Ungefähr dasselbe ist es, wenn man versucht SharePoint zu installieren, ohne sich vorher über SQL (und alle technischen Ausläufer) Gedanken gemacht zu haben. Es gibt eine ganz einfache Grundregel, die es beim Einsatz von SharePoint in einem produktiven Umfeld zu beachten gilt. SQL langsam = SharePoint langsam. Alle relevanten Daten von SharePoint liegen im SQL Server. Seien es Suchresultate, Metadaten oder Dokumente. Alles liegt, ausser man benutzt RBS, innerhalb des Zuständigkeitsbereiches des SQL Servers.
Bei einem Haus ist es naheliegend, sich Gedanken über das Fundament zu machen. Wir kennen ja alle den Ausdruck „ein Haus auf Sand bauen“. Doch bei SharePoint werden diese grundlegenden Überlegungen noch viel zu wenig gemacht. Ich möchte kurz ein paar Punkte beleuchten, die in diesem Zusammenhang zentral sind:

  • Der Speicherort für die Daten (Disksubsystem)
  • Die Konfiguration des Speichers (Disk alignment)
  • Die Aufteilung der verschiedenen Daten (TempDB, Log, UserDBs)
  • Die Erstellung der Datenbanken (Datafiles)
  • Die Konfiguration des SQL Servers (Memory, Traceflags uva.)
  • High Availlability und Desaster Recovery

Es würde den Rahmen sprengen, auf jeden dieser Punkte einzugehen. Doch Anregen und die Neugier dieser Leser wecken, deren Herz für die Technologie schlägt, das kann der Artikel. Microsoft hat bereits mehrere Whitepapers herausgegeben wie z.B. „Planen und Überwachen des SQL Server-Speichers für SharePoint“ und „SQL Server 2008 R2 and SharePoint 2010 Products: Better Together“, in denen viele Punkte behandelt werden. Auch auf meinem Blog (deutsch) finden Sie weitere Informationen zum Thema SharePoint und SQL. Bauen Sie Ihr SharePoint Haus also nicht auf Sand.
Samuel Zürcher, Microsoft MVP SharePoint, E-Mail
(Mit-Begründer der www.sharepointcommunity.ch und Co-Organisator der Collaboration Days)

Sicherheit in der IT – Leitfaden für Entscheidungsträger
Microsoft Deutschland hat in Zusammenarbeit mit externen Spezialisten sehr detaillierte Unterlagen für verschiedene Bereiche der Sicherheit zusammengestellt. Fragestellungen bezüglich Datensicherheit, Privatsphäre und personenbezogenem Datenschutz geben Entscheidungsträgern sowie Privatpersonen oft Anlass zur Sorge. Schauen Sie sich den Leitfaden “Gemeinsam zu mehr Sicherheit und Vertrauen im Internet“ an.
Kurs zur Verwaltung virtualisierter Umgebungen jetzt auch auf Deutsch verfügbar
Lernen Sie in diesem kostenlosen Online-Kurs der Microsoft Virtual Academy, wie Sie virtualisierte Umgebungen und Private-Cloud-Infrastrukturen mit der umfassenden Suite von Verwaltungstools von Microsoft System Center beherrschen können.
Security Compliance Manager 2.5 – die Beta ist jetzt zum Test verfügbar
Auf Microsoft Connect können Sie jetzt die Beta-Version von Security Compliance Manager 2.5 testen. Schauen Sie sich die zusätzlichen Unterstützungen zu den bestehenden Key-Features an.
Kostenloses eBook Microsoft Virtualisierung R2 zum Download
Microsoft Press bescheert uns allen eine nachweihnachtliche Überraschung.
KKostenlos gibt es die 2. Ausgabe des eBook Microsoft Virtualisierung (480 Seiten, englisch) – ein Super Nachschlagewerk. Nach der Registration mit Ihrer LiveID erhalten Sie ein E-Mail mit dem Link zum PDF. Genau die richtige Ferienlektüre.
Die 3 Arten von VM-Architekturen verstehen (TechNet Magazin)
3 verschiedene Autoren erklären Ihnen in diesem TechNet-Magazin-Artikel die verschiedenen Klassen von VM-Architekturen. Lesen Sie weiter im Artikel.
Neue Windows 7 Themes
Valentinstag war zwar gestern, aber auch heute sind die zusätzlichen Windows 7 Themes noch schön anzuschauen. Für alle Liebhaber von schönen Blumen und besonderen Darstellungen.
Virtuell – Ihr Weg zur Cloud mit Hyper-V
Jetzt ist es Zeit, Ihre Server-Umgebung zu virtualisieren. Hyper-V hat sich schnell zu einer Führungsposition entwickelt. Dies durch kontinuierliche Erweiterung mit mehr Funktionalität, erhöhter Skalierbarkeit und verbesserter Performance.
Windows PowerShell Version 3
Eine Technical Preview der Version 3 ist da, aber vermutlich wird es noch etwas dauern, bis die finale V3 verfügbar sein wird. Der Textverfasser Don Jones ist ein Microsoft-MVP-Award-Empfänger und Autor von "Lernen Sie Windows PowerShell in einem Monat in der Mittagszeit“. Wollen Sie einen Blick in die Version 3 machen, dann lesen Sie diesen Artikel im TechNet Magazin.
Umfangreicher Featurevergleich – Exchange Server 2010 SP1 und Exchange Online (Office 365)
Dieser Wiki-Artikel erläutert die Unterschiede zwischen Exchange Online (Office 365) und Exchange Server 2010 Service Pack 1. Achten Sie auch auf das White Paper über die Exchange-Bereitstellung, verfügbar im Microsoft Download Center.
Empfohlene Schritte zur Erhöhung der Zuverlässigkeit im Cluster
Der Report fasst die erforderlichen Hotfixes zur Erhöhung der Stabilität eines Windows Server 2008 R2 SP1 Failover Clusters zusammen.

Installieren Sie die Sicherheitsupdates vom Februar 2012
Microsoft hat am 10. Januar 2012 neue Security Bulletins veröffentlicht. Lesen Sie hier, um welche Bulletins es sich handelt und welche Produkte betroffen sind. Installieren Sie die Updates so schnell wie möglich.
Seien Sie proaktiv bezüglich Sicherheit
Informieren Sie sich über Sicherheit und abonnieren Sie die Security Newsletter (Deutsch, Französisch, Englisch). So erhalten Sie proaktiv die neusten Informationen über Sicherheit und Vorsorge.
Microsoft Baseline Security Analyzer (MBSA)
Der MBSA überprüft Systeme auf fehlende Updates und sicherheitskritische Fehlkonfigurationen. Kostenloser Download auf Französisch und Deutsch.
Vorbeugend oder bei Bekanntwerden von Attacken muss immer das Security Center angesehen, die Security Bulletins kurz überprüft und ein Update mittels Microsoft Update realisiert werden.

SQL Script für die Erstellung von Best Practice SharePoint Datenbanken


Na dass wird aber auch Zeit. Endlich poste ich auch hier zur Vollständigkeit den Post, welchen ich im SharePointAdvent gepostet habe. Er ist die Fortsetzung vom Post Best Practice SQL Setup.

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.

addcontentdb1

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%

model

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.

DiskSpaceGrowth

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);

DBStats

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 */
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

Best Practice SQL Setup in einer SharePoint Umgebung


Diesen Post habe ich heute auf www.sharepointadvent.de gepostet, ein Gemeinschaftsprojekt der deutschsprachigen MVPs. Ich will ihn euch nicht vorenthalten Zwinkerndes Smiley

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ält, 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 ein SQL Server aufgesetzt werden 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 unterschiedliches 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 verschiedenen Daten gegenseitig ausbremsen.

Kommen wir zu den Einstellungen auf dem SQL Server:

Multiple Datafiles

Stellen Sie sicher, dass alle Datenbanken 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 Umstä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 genug 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. 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