combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager Performance Whitepaper Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -2- Inhalt Einleitung 4 Client- und serverseitige Einstellungen 4 Netzwerk-Anbieterreihenfolge 4 Deaktivieren von IPv6 4 Datenbankverbindung über die Server-IP-Adresse 5 TCP/IP vs. Named Pipes 6 TCP Auto-Tuning-Protokoll/RSS 7 Firewall 7 Virenscanner 8 Transaktionsprotokoll/Wartungspläne 8 Speicherzuordnung SQL Server 8 Treiber 8 Hardware 9 Solution-seitige Einstellungen 9 Allgemein 9 Indizes 9 Primärschlüssel 9 Fremdschlüssel 10 Relationen 10 Eingabemaske/Übersichtsliste 10 Scripting 11 Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper Häufige Filter Checkliste Copyright combit GmbH, Alle Rechte vorbehalten. -3- 11 12 Produkt: combit Relationship Manager Performance Whitepaper -4- Einleitung Insbesondere bei der u.a. IT-Infrastruktur kann es zu erheblichen Performance-Einbußen bei der Arbeit mit dem combit Relationship Manager kommen. Dieses Whitepaper soll Ihnen helfen die Systemeinstellungen zu überprüfen, ggf. zu korrigieren oder zu ändern und somit eine erste eigene Problemanalyse/-behebung durchführen zu können. Windows Vista/Windows 7 Clients Windows Server 2003 Firewall (client-/serverseitig) Anti-Virenscanner (client-/serverseitig) Client- und serverseitige Einstellungen Netzwerk-Anbieterreihenfolge In der Auswertungsreihenfolge der Netzwerkanbieter der Netzwerkkarte sollte das "Microsoft Windows-Netzwerk" als Erstes ausgewertet werden. Den Einstellungsdialog erreicht man über: Netzwerk- und Freigabecenter > Adaptereinstellungen ändern > Erweitert (falls Menüleiste ausgeblendet, "Alt"-Taste betätigen) > Erweiterte Einstellungen > Anbieterreihenfolge Deaktivieren von IPv6 Bei der Kommunikation zwischen "älteren" Windows-Servern und "neueren" Windows-Clients kann es zu Engpässen bzgl. des verwendeten IP-Protokolls kommen. Das IPv6-Protokoll sollte daher deaktiviert werden. Dies muss in den Einstellungen der LAN-Verbindungen erfolgen: Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -5- Datenbankverbindung über die Server-IP-Adresse Bei dieser Systemkonstellation kann es auch zu Problemen bei der DNS-Auflösung kommen. Folglich kann die Datenbankanbindung im cRM über den Servernamen zu Problemen führen. Abhilfe verschafft hier die Verwendung der Server-IP anstatt des Servernamen. Diese Änderung kann über die cRM Projekt-Menüleiste und die Menüpunkte "Konfigurieren > Datenbank > Datenbankverbindung" vorgenommen werden: TCP/IP vs. Named Pipes Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -6- Die Verbindung bzw. die Kommunikation der Clients mit dem SQL-Server erfolgt über ein einziges Protokoll. Hierbei kann es ebenfalls zu Verzögerungen kommen, wenn der Server einem Protokoll lauscht, welches der Client jedoch erst in Erfahrung bringen muss. Hier lässt sich ebenfalls die Auswertungsreihenfolge ändern und das verwendete Protokoll somit priorisieren. In diesen Dialog gelangen Sie folgendermaßen: Client (ohne SQL-Tools) "Start > Alle Programme > Verwaltung > Computerverwaltung > Dienste und Anwendungen > SQL ServerKonfigurations-Manager > SQL Native Client (10.0)-Konfiguration > Clientprotokolle" Server/Client mit SQL-Tools "Start > Alle Programme > MS SQL Server 2008 (R2) > Konfigurationstools > SQL-Server-Konfigurations-Manager > SQL Native Client (10.0)-Konfiguration > Clientprotokolle" Zu beachten sind die folgenden Hinweise von Microsoft: TCP/IP TCP/IP ist ein Protokoll, das im Internet häufig verwendet wird. Es kommuniziert über untereinander verbundene Computernetzwerke mit unterschiedlichen Hardwarearchitekturen und verschiedenen Betriebssystemen. TCP/IP schließt Standards zum Weiterleiten von Netzwerkverkehr ein und bietet erweiterte Sicherheitsfunktionen. Es ist das heute in der Geschäftswelt am häufigsten verwendete Protokoll. Das Konfigurieren des Computers für die Verwendung von TCP/IP kann ein komplexer Vorgang sein, allerdings sind die meisten Netzwerkcomputer bereits ordnungsgemäß konfiguriert. Weitere Informationen zum Konfigurieren der TCP/IP-Einstellungen, die nicht im SQL Server-Konfigurations-Manager verfügbar sind, finden Sie in der Microsoft Windows-Dokumentation. Named Pipes Named Pipes ist ein Protokoll, das für lokale Netzwerke entwickelt wurde. Ein Teil des Arbeitsspeichers wird von einem Vorgang zum Weiterleiten von Informationen an einen anderen Vorgang verwendet, sodass die Ausgabe des einen Vorgangs der Eingabe des anderen entspricht. Der zweite Prozess kann ein lokaler (auf demselben Computer wie der erste) oder ein Remoteprozess (auf einem Computer im Netzwerk) sein. Named Pipes im Vergleich zu TCP/IP-Sockets In einer schnellen LAN-Umgebung (Local Area Network) sind TCP/IP-Sockets (Transmission Control Protocol/Internet Protocol) und Named Pipes-Clients hinsichtlich der Leistung vergleichbar. Der Leistungsunterschied zwischen TCP/IP-Sockets und Named Pipes-Clients wird jedoch in langsameren Netzwerken, wie z. B. WANs oder Einwählverbindungen, deutlich. Ursache hierfür sind die Unterschiede in der prozessübergreifenden Kommunikation (Interprocess Communication, IPC) zwischen Peers. Für Named Pipes ist die Netzwerkkommunikation normalerweise überwiegend interaktiv. Ein Peer sendet keine Daten, bevor ein anderer Peer sie mithilfe eines Lesebefehls anfordert. Zu einem Netzwerklesevorgang gehört normalerweise vor Beginn des Lesens der Daten das kurze Einsehen zahlreicher Named Pipes-Nachrichten. Dies kann in einem langsamen Netzwerk sehr teuer sein und übermäßigen Netzwerkverkehr verursachen, was sich wiederum auf andere Netzwerkclients auswirkt. Darüber hinaus sollte geklärt werden, ob die Kommunikation über lokale Pipes oder Netzwerkpipes stattfindet. Wenn die Serveranwendung lokal auf dem Computer mit einer Instanz von SQL Server ausgeführt wird, bietet sich das Verwenden des lokalen Named Pipes-Protokolls an. Lokale Named Pipes-Protokolle werden im Kernelmodus ausgeführt und sind sehr schnell. Für TCP/IP-Sockets sind Datenübertragungen geradliniger und mit weniger Verwaltungsaufwand verbunden. Datenübertragungen können auch von Mechanismen zur TCP/IP-Socketleistungserweiterung, wie beispielsweise Windowing, verzögerten Bestätigungen usw. profitieren. Dies kann in einem langsamen Netzwerk sehr hilfreich sein. Abhängig vom Anwendungstyp können diese Leistungsunterschiede sehr deutlich sein. TCP/IP-Sockets unterstützen zudem eine Backlogwarteschlange. Dadurch kann im Vergleich zu Named Pipes, die aufgrund von ausgelasteten Pipes zu Fehlern beim Verbindungsversuch mit SQL Server führen können, ein begrenzter Glättungseffekt erreicht werden. Im Allgemeinen wird TCP/IP in einem langsamen LAN, WAN oder DFÜ-Netzwerk bevorzugt. Wenn die Netzwerkgeschwindigkeit keine Rolle spielt, stellen Named Pipes hingegen häufig die bessere Wahl dar, da sie mehr Funktionalität, größere Benutzerfreundlichkeit und mehr Konfigurationsoptionen bieten. Aktivieren des Protokolls Das Protokoll muss sowohl auf dem Client als auch dem Server aktiviert sein. Der Server kann gleichzeitig auf alle aktivierten Protokolle auf Anforderungen lauschen. Clientcomputer können ein Protokoll auswählen oder das Verwenden der Protokolle in der Reihenfolge versuchen, wie sie im SQL Server-Konfigurations-Manager angegeben sind. Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -7- [Microsoft, http://technet.microsoft.com/de-de/library/ms187892.aspx] TCP Auto-Tuning-Protokoll/RSS Mit dem Betriebssystem Windows Vista hat Microsoft das sogenannte "TCP Auto-Tuning-Protokoll" eingeführt. Dieses Protokoll handelt die Fenstergröße für die zwischen Server und Client auszutauschenden Pakete aus, d.h. der Netzwerk-Verkehr wird durch dieses Protokoll ständig überwacht und wirkt sich somit auch auf die Geschwindigkeit z.B. beim Löschen, Kopieren oder Verschieben von Dateien im Netzwerk aus. Dieses Protokoll lässt sich über die Kommandozeile deaktivieren. Diese muss hierfür unbedingt "Als Administrator" ausgeführt werden. Desweiteren empfiehlt es sich, die RSS-Funktionalität zu deaktivieren (Receive Side Scaling), da diese ebenfalls einen Falschenhals im Zusammenspiel von Multi-Core-Prozessoren und Single-CPU-Services bildet. Der Befehl zur Deaktivierung lautet wie folgt: netsh interface tcp set global autotuninglevel=disabled netsh interface tcp set global rss=disabled Firewall Die Microsoft Windows Firewall verhindert nicht autorisierte Zugriffe auf den Computer. Dies kann dazu führen, dass möglicherweise auch Verbindungsversuche von cRM Clients auf die auf diesem Computer laufende Microsoft SQL Server Instanz blockiert werden. Der Effekt kann eine lange Wartezeit oder sogar eine "Timeout"-Fehlermeldung beim Starten des cRM sein. Der erste nachfolgende Knowledge Base-Artikel von Microsoft beschreibt, wie bei der Firewall des Windows Server 2008 die für den Microsoft SQL Server notwendigen Verbindungen geöffnet/eingestellt werden. Der zweite Artikel beschreibt allgemein die für den Microsoft SQL Server 2008 benötigten Ports und die vorzunehmenden Einstellungen für unterschiedliche Microsoft Windows Systeme. http://support.microsoft.com/kb/968872 http://msdn.microsoft.com/en-us/library/cc646023.aspx Virenscanner Insbesondere beim Programmstart aber auch beim Verwenden von Script-Dateien (ggf. hinter Schaltflächen der Eingabemaske verborgen) können aktive Virenscanner zu einem Leistungsverlust führen, da jeder Dateizugriff geprüft wird. Erfahrungen aus der Praxis zeigen, dass es oftmals ausreichend ist, wenn die cRMArbeits- und Installationsverzeichnisse von einem permanenten Scan des Virenscanner ausgeschlossen werden. Dies kann sowohl auf dem Client als auch auf dem Server der Fall sein. Transaktionsprotokoll/Wartungspläne In einem Transaktionsprotokoll werden die Details aller Änderungen an der SQL Server-Datenbank gespeichert. Das Transaktionsprotokoll der Datenbank sollte nicht unerwartet groß sein bzw. es sollte ein Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -8- entsprechender Wartungsplan für die Verkleinerung der Datenbank eingerichtet sein (Transaktionsprotokoll wird ebenfalls bei einer entsprechend eingerichteten Datenbanksicherung verkleinert). Weiterführende Informationen dazu finden Sie in der Microsoft Knowledgebase: http://support.microsoft.com/?kbid=873235 Bitte beachten: Für Wartungspläne sind SQL Server Agent und SSIS erforderlich, die von SQL Server Express nicht unterstützt werden. Hier bietet sich ein SQL-Script + sqlcmd.exe und ein geplanter Task an. Die Vorgehensweise ist z.B. hier beschrieben: http://www.mssqltips.com/tip.asp?tip=1174 Speicherzuordnung SQL Server Standardmäßig hat der SQL Server eine Minimale Serverarbeitsspeicher-Zuordnung von 0 MB und eine Maximale Serverarbeitsspeicher-Zuordnung von 2 PB (2147483647 MB). Die momentane Konfiguration können Sie unter "Arbeitsspeicher" in den Servereigenschaften über das SQL Server Management Studio prüfen. Wenn neben dem SQL Server eventuell andere Anwendungen zusätzlichen Arbeitsspeicher in Anspruch nehmen – zusätzlich zum Betriebssystem – so kann dies ebenfalls zu Performance-Einbußen führen. Die Ermittlung und Anpassung der minimalen sowie maximalen Serverarbeitsspeicher-Zuordnung in dem folgenden Microsoft Artikel erklärt: http://msdn.microsoft.com/en-us/library/ms178067%28v=sql.105%29.aspx Treiber Achten Sie darauf, dass die verwendeten Treiber für die Netzwerk- und Grafikkarte aktuell und für das Betriebssystem freigegeben sind. Hardware Achten Sie darauf, dass Server und Client die Mindestvoraussetzungen für den Einsatz des cRM erfüllen. Weitere Informationen dazu befinden sich im cRM-Handbuch. Überprüfen Sie, ob Ihr Server genügend Arbeitsspeicher und einen ausreichend schnellen Prozessor hat. Der Einsatz von RAID Systemen bzw. Multiprozessor Servern kann ebenfalls die Arbeitsgeschwindigkeit erhöhen. Solution-seitige Einstellungen Allgemein Beachten Sie, dass die Aktivierung von Datensatzrechten generell zusätzliche Ressourcen des Datenbankservers beanspruchen wird. Dies könnte sich in einer Verschlechterung der Performance auswirken. Versuchen Sie, möglichst einfache Filter zu verwenden. Vermeiden Sie Abfragen mit "IS NULL". Vermeiden Sie Filter mit Relationen. Wenn die Datensatzrechte von Gruppen abgeleitet sind, vermeiden Sie Gruppenzugehörigkeiten zu mehreren Gruppen mit Datensatzrechten. Aktivieren Sie Datensatzrechte nur für die Ansichten, für die sie wirklich notwendig sind. Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper -9- Indizes Ein Index enthält Schlüssel, die aus einer oder mehreren Spalten in der Tabelle oder Sicht erstellt werden. Durch das Erstellen gut durchdachter Indizes können Sie die Leistung von Datenbankabfragen und Anwendungen erheblich steigern. Zum Erstellen eines Index klicken Sie im Objekt-Explorer im MS SQL Server mit der rechten Maustaste auf den Ordner "Indizes" unterhalb einer Tabelle, und wählen Sie dann im Kontextmenü "Neuer Index" aus. Alternativ erstellen Sie eine Sortierung im cRM. Verwenden Sie explizite Indizes Ihres Datenbanksystems (nicht zu verwechseln mit den Sortierkriterien im cRM!) für folgende Spalten: die Primärschlüsselspalte, wichtige Spalten nach denen immer wieder sortiert wird (erledigt der cRM nur unter MS SQL Server automatisch!) und in denen häufig gesucht oder gefiltert wird sowie für alle Fremdschlüsselspalten, denn über diese werden Relationen aufgelöst. Es handelt sich dabei um Spalten, die IDs auf fremde Tabellen enthalten, wie bspw. in Verknüpfungsansichten bei n:m Relationen und in 1:n Ansichten. Sortierungen auf 1:1 verknüpfte Felder sollten nicht angewendet werden, da dies zu einer schlechten Performance führen kann (siehe Absatz Relationen). Dies gilt sowohl für Sortierungen in einer Ansicht selber als auch für ggf. eingestellte Sortierungen in einem sichtbaren Container (Containerfilter). Primärschlüssel Das Primärschlüsselfeld der Datenbank sollte als cRM interner Feldtyp "Datensatz-ID" gekennzeichnet sein. Dies hat zur Folge, dass automatisch ein Index auf dieses Feld angelegt wird. Ansonsten gilt: Verwenden Sie für das Primärschlüsselfeld zur Optimierung der Arbeitsgeschwindigkeit explizite Indizes Ihres Datenbanksystems. Fremdschlüssel Auf Fremdschlüsselspalten sollten unbedingt Indizes aufgebaut werden. Über diese Spalten werden Relationen aufgelöst. Es handelt sich hierbei um Spalten, die IDs auf fremde Tabellen enthalten, wie bspw. in Verknüpfungsansichten bei n:m-Relationen und in 1:n Ansichten. Ein Beispiel hierfür wäre in einer Tabelle "Contacts" die Spalte "CompanyID", welche neben dem Primärschlüsselfeld "ContactID", die Relation zur "Company" herstellt. Relationen Überprüfen Sie alle Relationen auf Ihre tatsächliche Notwendigkeit, da der cRM diese Relationen überall rekursiv auflöst und somit die Arbeitsgeschwindigkeit auch maßgeblich von ihnen abhängt. Unnötige Relationen sollten deshalb entfernt werden, dies gilt bspw. für nicht benötigte 1:1 "Rückrelationen" von 1:n verknüpften Ansichten. Ein Beispiel hierfür wäre eine Darstellung von Daten von Firmen und Kontakten (Ansprechpartner) innerhalb einer Ansicht. Eine Auflistung aller Ansichten mit Anzahl der 1:1 Relationen finden Sie im Support-Dialog des cRM. Diesen Dialog können Sie über "? > Über... > Support Informationen" aufrufen. Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper - 10 - Eingabemaske/Übersichtsliste Versuchen Sie die Anzahl der Felder pro Datenbank-Tabelle niedrig zu halten. 75 Felder pro Tabelle sollten hier als Maximal-Richtwert verwendet werden. Jedes auf der aktuellen Eingabemaskenseite platzierte 1:1 Feld verursacht zusätzliche Datenbankabfragen, welche Bandbreite und Performance in Anspruch nehmen. Noch deutlicher wird die Auswirkung bei einer Verwendung als Spalte in Übersichtslisten und Containern, da dann diese Abfragen nicht nur für den aktuellen Datensatz sondern für alle darin dargestellten Datensätze bei jeder Fensteraktualisierung neu durchgeführt werden. Ein besonderes Augenmerk sollten Sie auf berechnete Felder und auf 1:1-Relationen auf Datenbanksichten haben, welche Berechnungen (möglichweise sogar über einen Verbindungsserver auf einem anderen Datenbankserver) durchführen. Hier können sich je nach Server-Leistung und wachsender Datenmenge deutliche Auswirkungen auf die Performance einstellen. Insbesondere bei Verbindungsservern kann sich eine Performanceeinbuße allein bereits durch das Anlegen einer derartigen 1:1-Relation bemerkbar machen, also auch wenn deren Feld selbst nicht in Übersichtsliste, Container oder Eingabemaske angezeigt werden. Dies wirkt sich beim Öffnen der Ansicht aber insbesondere beim Blättern durch die Datensätze sowie beim Umschalten der Eingabemaskenseite aus. Berücksichtigen Sie dies daher, wenn Sie viele solcher 1:1 Felder vor allem aus unterschiedlichen Relationen platzieren möchten. Blenden Sie in den Listenansichten (Containern) nicht benötigte Spalten komplett aus. In der Übersichtsliste ist dies vor allem für Dateiverweise zu empfehlen, da ansonsten beim Aufbau der Listenansicht jeder einzelne Verweis auf Verfügbarkeit geprüft wird. Verwenden Sie möglichst kurze Spaltentitel in den Listenansichten (Containern). Bei Relationen verwendet der cRM in der Grundeinstellung lange Namen wie z.B. FirmenID.Firmen.ID.Firma. Diese lassen sich über das Kontextmenü > Konfiguration > Spaltentitel im Nachhinein ändern. Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper - 11 - Scripting In Scripten sollte nicht mit den Methoden "CurrentRecord" bzw. "CurrentRecordBuffered" gearbeitet werden. Stattdessen empfiehlt sich die Verwendung von "CurrentRecordSynchronized". Da bei dieser Methode das komplette Puffern von Feldinhalten entfällt, ist dies die empfohlene Methode, um auf Feldinhalte von Datensätzen zuzugreifen. Desweiteren sollten Scripte nicht anhand der Methode "RecCount" prüfen, ob ein Filter ein Ergebnis hat, sondern mit dem Rückgabewert des ersten "MoveNext" nach Filteranwendung arbeiten. Im Anhang der Programmierer-Referenz (SDK-Dokumentation) befindet sich ein Beispiel diesbezüglich. Häufige Filter Wenn häufig mit Filtern gearbeitet wird, dann sollten die verwendeten Filter nicht auf Feldern vom cRM internen Feldtyp "Zeichen lang" (phys.: text, ntext, varchar(max), nvarchar(max)) basieren. Dies führt bei steigender Datensatz-Anzahl zu einer Verlangsamung der Filter-Ausführung. Die Informationen, nach welchen gesucht wird, sollten daher konzeptionell besser in einem anderen Feld(-typ) – ggf. zusätzlich – hinterlegt werden. Copyright combit GmbH, Alle Rechte vorbehalten. Produkt: combit Relationship Manager Performance Whitepaper - 12 - Checkliste Kapitel Netzwerk-Anbieterreihenfolge Bemerkung: IPv6 deaktiviert Bemerkung: Datenbankverbindung Bemerkung: TCP/IP – Named Pipes Bemerkung: TCP Auto-Tuning-Protokoll/RSS Bemerkung: Firewall Bemerkung: Virenscanner Bemerkung: Transaktionsprotokoll/Wartungsplan Bemerkung: Speicherzuordnung SQL Server Bemerkung: Treiber Bemerkung: Copyright combit GmbH, Alle Rechte vorbehalten. Geprüft am von Produkt: combit Relationship Manager Performance Whitepaper Kapitel - 13 - Geprüft am von Hardware Bemerkung: Indizes Bemerkung: Primärschlüssel Bemerkung: Fremdschlüssel Bemerkung: Relationen Bemerkung: Eingabemaske/Übersichtsliste Bemerkung: Scripting Bemerkung: Häufige Filter Bemerkung: Hinweis: combit macht keine Angaben zu einer bestimmten Eignung obiger Informationen. Irrtümer und Fehler bleiben ausdrücklich vorbehalten, die Angaben erfolgen ohne Gewähr und enthalten keine Zusicherung. Die Informationen können z.T. auch ein Versuch sein, Ihnen bei einer Aufgabenstellung zu helfen, selbst wenn das Produkt eigentlich nicht für diesen speziellen Zweck vorgesehen wurde. Copyright combit GmbH, Alle Rechte vorbehalten.