Sage OfficeLine Abfragen dauern zu lange (MS SQL Server 2008 64bit CPU IO Speicher nicht ausgelastet... wie kriegt man da mehr Performance rein, so dass die Hardware genutzt wird?
Die Performance im Alltagsbetrieb bringt lange Wartezeiten bei komplexen Auswertungen...
Hallo,
wir haben folgendes Setup laufen:
ESX Server 4.1 auf Dell R710 mit 2x Xeon 5620 2,4 Ghz, 48 GB RAM, RAID10 Storage
Konfiguration der VM's:
Terminal Server: Win2008 R2, 4 vCPU, 12 GB RAM (laut Windows werden immer so um die 7 GB genutzt, Rest frei)
Datenbank Server: Win2008 R2, 4 vCPU, 16 GB RAM ( laut Windows werden leider nur ca. 8 GB genutzt)
Daten zum MS SQL 2008 Server:
-Nutzt meistens so um die 5-6 GB an Arbeitsspeicher
-Activity Monitor sagt bei einer komplexen Abfrage die einfach zu lange dauert: % Processor time 0-1% Waiting Tasks sehe ich immer 0 ... Database I/O zwischen 0 und 0.1 MB/sec ... Batch Requests meistens so um die 5-8
Irgendwie hört sich das alles recht wenig an? Die CPU Last des Datenbank Servers liegt selbst bei Abfragen nicht höher als 3-4%. Der freie Arbeitsspeicher, den die Maschine hat, bleibt ungenutzt.
Dennoch dauern manche Berichte (viele Abfragen) bis zu 5 Minuten und das obwohl die Datenbank Gesamt nur eine aktuelle Größe von ca. 1,2 GB hat.
Wo kann hier das Problem liegen? Oder liegt das Problem gar nicht beim Datenbankserver? Die Sage OfficeLine nutzt ja Microsoft Access als Frontend auf dem Terminalserver. Hier ist die Auslastung so bei 10-20% wenn ein
komplexer Bericht gerechnet wird. Ich würde gerne folgendes erreichen, dass der Terminal Server die Abfragen schneller vom SQL Server geliefert bekommt, denn Fakt ist doch Hardwaretechnisch können beide Systeme deutlich mehr.
Auch die Festplatten I/Os im vCenter sind nicht übermässig beansprucht.
Freue mich über ein paar Vorschläge.
Danke und Gruß, Benny
Hallo,
wir haben folgendes Setup laufen:
ESX Server 4.1 auf Dell R710 mit 2x Xeon 5620 2,4 Ghz, 48 GB RAM, RAID10 Storage
Konfiguration der VM's:
Terminal Server: Win2008 R2, 4 vCPU, 12 GB RAM (laut Windows werden immer so um die 7 GB genutzt, Rest frei)
Datenbank Server: Win2008 R2, 4 vCPU, 16 GB RAM ( laut Windows werden leider nur ca. 8 GB genutzt)
Daten zum MS SQL 2008 Server:
-Nutzt meistens so um die 5-6 GB an Arbeitsspeicher
-Activity Monitor sagt bei einer komplexen Abfrage die einfach zu lange dauert: % Processor time 0-1% Waiting Tasks sehe ich immer 0 ... Database I/O zwischen 0 und 0.1 MB/sec ... Batch Requests meistens so um die 5-8
Irgendwie hört sich das alles recht wenig an? Die CPU Last des Datenbank Servers liegt selbst bei Abfragen nicht höher als 3-4%. Der freie Arbeitsspeicher, den die Maschine hat, bleibt ungenutzt.
Dennoch dauern manche Berichte (viele Abfragen) bis zu 5 Minuten und das obwohl die Datenbank Gesamt nur eine aktuelle Größe von ca. 1,2 GB hat.
Wo kann hier das Problem liegen? Oder liegt das Problem gar nicht beim Datenbankserver? Die Sage OfficeLine nutzt ja Microsoft Access als Frontend auf dem Terminalserver. Hier ist die Auslastung so bei 10-20% wenn ein
komplexer Bericht gerechnet wird. Ich würde gerne folgendes erreichen, dass der Terminal Server die Abfragen schneller vom SQL Server geliefert bekommt, denn Fakt ist doch Hardwaretechnisch können beide Systeme deutlich mehr.
Auch die Festplatten I/Os im vCenter sind nicht übermässig beansprucht.
Freue mich über ein paar Vorschläge.
Danke und Gruß, Benny
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168545
Url: https://administrator.de/forum/sage-officeline-abfragen-dauern-zu-lange-ms-sql-server-2008-64bit-cpu-io-speicher-nicht-ausgelastet-wie-168545.html
Ausgedruckt am: 19.04.2025 um 10:04 Uhr
25 Kommentare
Neuester Kommentar
Das größte Problem wird bei dir wohl das Storage sein, mit RAID10 bekommt man bei so kleinen Setups (ich geh bei dir mal von 4 oder 6 Festplatten aus) nicht richtig Druck dahinter. Wenn es um IOPS geht, soviele Spindeln wie möglich. Ich kenn relativ neue Storagesysteme, die sich im Einsatz befinden, aus etlichen hundert Festplatten bestehen und trotzdem weit weniger Speicherplatz bieten als ein 4-Bay NAS vom Händler um die Ecke. Alles nur weil wegen die IOPS. Aber das ist unwichtig, dein Problem liegt woanders.
Mehr RAM-Verbrauch beim Datenbankserver wird wohl nicht hinhauen. Das komplette Betriebssystem samt Datenbankserver und Datenbank scheint ja schon im RAM zu liegen, also kannst du da nichts weiter machen.
Dein Problem wird wohl die Software ansich sein. Ich geh mal davon aus, dass die Software nur einen Thread gleichzeitig laufen lässt, weil es das nicht besser kann oder nicht richtig konfiguriert ist. Sprich es wird immer nur ein einziger Kern benutzt für die Berichte und somit kann nur eine Aktion gleichzeitig ausgeführt werden. Ich bezweifel, dass MS Access Multithreaded arbeiten kann.
Sprich effektiv kannst du nichts machen, weils nicht in deinem Zugriffsbereich liegt.
Mehr RAM-Verbrauch beim Datenbankserver wird wohl nicht hinhauen. Das komplette Betriebssystem samt Datenbankserver und Datenbank scheint ja schon im RAM zu liegen, also kannst du da nichts weiter machen.
Dein Problem wird wohl die Software ansich sein. Ich geh mal davon aus, dass die Software nur einen Thread gleichzeitig laufen lässt, weil es das nicht besser kann oder nicht richtig konfiguriert ist. Sprich es wird immer nur ein einziger Kern benutzt für die Berichte und somit kann nur eine Aktion gleichzeitig ausgeführt werden. Ich bezweifel, dass MS Access Multithreaded arbeiten kann.
Sprich effektiv kannst du nichts machen, weils nicht in deinem Zugriffsbereich liegt.

Hallo,
welche OL-Version ist im Einsatz?
Was für ein Bericht wird mit der Abfrage erstellt
Laufen regelmäßig Wartungspläne auf dem SQL-Server
Bestünde die Möglichkeit, den OL-Client (WaWi/ReWe) lokal auf einem Client zu installieren und dort die Performance zu prüfen.
Eine Trace-Log über den Profiler des SQL-Servers während der ABfrage wäre recht hilfreich.
welche OL-Version ist im Einsatz?
Was für ein Bericht wird mit der Abfrage erstellt
Laufen regelmäßig Wartungspläne auf dem SQL-Server
Bestünde die Möglichkeit, den OL-Client (WaWi/ReWe) lokal auf einem Client zu installieren und dort die Performance zu prüfen.
Eine Trace-Log über den Profiler des SQL-Servers während der ABfrage wäre recht hilfreich.

Hallo,
mit Wartungplan amit meine ich nicht nur das Sichern der Datenbank, sondern primär die Indexneuserstellung, Indexe organisieren, Statistiken organiseierne, Verlaufscleanup - also die Datenbankdatei auf "Vordermann" bringen. Was für einen Sicherungstypen nimmst Du denn, wie groß ist die ldf-Datei?
Die nächste Frage wäre, was für eine Antivierenlösung zum Einsatz kommt, ob diese eventuell stört. Dazu solltest Du folgende Datei-Endungen vom Scanvorgang ausschließen:
*.mde, *.mda, *.ldf, *.ade, *.adp, - ich hoffe, ich hab jetzt alle ^^
Ich denke um überhaupt erstmal irgendwo ansetzen zu können, solltest Du mit dem SQL-Server Profiler die Abfrage mitloggen und auswerten (oder veröffentlichen), denn die Dauer der einzelnen Anfragen werden dort angegeben.
mit Wartungplan amit meine ich nicht nur das Sichern der Datenbank, sondern primär die Indexneuserstellung, Indexe organisieren, Statistiken organiseierne, Verlaufscleanup - also die Datenbankdatei auf "Vordermann" bringen. Was für einen Sicherungstypen nimmst Du denn, wie groß ist die ldf-Datei?
Die nächste Frage wäre, was für eine Antivierenlösung zum Einsatz kommt, ob diese eventuell stört. Dazu solltest Du folgende Datei-Endungen vom Scanvorgang ausschließen:
*.mde, *.mda, *.ldf, *.ade, *.adp, - ich hoffe, ich hab jetzt alle ^^
Ich denke um überhaupt erstmal irgendwo ansetzen zu können, solltest Du mit dem SQL-Server Profiler die Abfrage mitloggen und auswerten (oder veröffentlichen), denn die Dauer der einzelnen Anfragen werden dort angegeben.

Es gibt doch für das Aufgabencenter einen eigenen Client. Wenn ihr den auch lizensiert habt könntest Du diese Abfrage direkt in dem AC-Client ausführen und prüfen ob es dort schneller läuft. Denn dann kommt die Access nich tzum tragen.
Eine weitere Alternative wäre, dass die DB-Abfrage aus dem Aufgabencenter (der Profiler sollte die Abfrage ja anzeigen) z.B. aus Excel heraus aufgerufen wird.
Eine weitere Alternative wäre, dass die DB-Abfrage aus dem Aufgabencenter (der Profiler sollte die Abfrage ja anzeigen) z.B. aus Excel heraus aufgerufen wird.
Du kennst doch die Abfragen aus dem Profiler, die Angaben der where Klausel werden parametriert und fertig ist das Ding.
Es gibt doch in dem Programm x definierte Reports oder kann sich jeder User vollkommen dynamisch zusammenklicken, was er möchte?
Wie gesagt ich kenne das Programm überhaupt nicht sorry.
Benutzerfreundlich ist es definitiv, du wählst aus Dropdown Boxen deine X Parameter und klickst Anzeigen.
Ich weiß nicht, ob du dich damit auskennst, wenn du Fragen hast, BI mit MSSQL mache ich fast täglich frag, was du wissen möchtest.
Es gibt doch in dem Programm x definierte Reports oder kann sich jeder User vollkommen dynamisch zusammenklicken, was er möchte?
Wie gesagt ich kenne das Programm überhaupt nicht sorry.
Benutzerfreundlich ist es definitiv, du wählst aus Dropdown Boxen deine X Parameter und klickst Anzeigen.
Ich weiß nicht, ob du dich damit auskennst, wenn du Fragen hast, BI mit MSSQL mache ich fast täglich frag, was du wissen möchtest.

Das ist ja imer noch akut? *lach*
Also: Prinzipiell ist so, dass eine Datenbank vorliegt und dementsprechend jeder Bericht tatsächlich über den SQL-Server selbst laufen könnte. Willst Du allerdings selbst Abfragen schreiben liegt das Problem darin dass nicht alle Informationen in der Datenbankstruktur wiedergefunden werdne können. Falsch, könne sie natürlich, Du musst nur wissen wo was liegt. Ich weiß jetzt gerade die Tabellennamen und Inhalte nicht auswendig. Ich weiß aber dass Du nicht alle Informationen zu einem Thema (Adressen/Artikel...) in einer Tabelle hast.
Zum Geschwindigkeitsproblem. Wenn Du den TraceLog gestartet hast siehst Du ja welche SQL-Befehle durch den Client abgefeuert werden. Wie ist die Performance wenn Du diese Statements direkt im SQL-Server ausführst? Lahmt das dann auch?
Eventuell wäre es hilfreich wenn Du Sichten im SQL-Server anlegst?
Also: Prinzipiell ist so, dass eine Datenbank vorliegt und dementsprechend jeder Bericht tatsächlich über den SQL-Server selbst laufen könnte. Willst Du allerdings selbst Abfragen schreiben liegt das Problem darin dass nicht alle Informationen in der Datenbankstruktur wiedergefunden werdne können. Falsch, könne sie natürlich, Du musst nur wissen wo was liegt. Ich weiß jetzt gerade die Tabellennamen und Inhalte nicht auswendig. Ich weiß aber dass Du nicht alle Informationen zu einem Thema (Adressen/Artikel...) in einer Tabelle hast.
Zum Geschwindigkeitsproblem. Wenn Du den TraceLog gestartet hast siehst Du ja welche SQL-Befehle durch den Client abgefeuert werden. Wie ist die Performance wenn Du diese Statements direkt im SQL-Server ausführst? Lahmt das dann auch?
Eventuell wäre es hilfreich wenn Du Sichten im SQL-Server anlegst?
Access war nie und wird nie ein frontend fürs Enterprise Umfeld werden, mach dir da also nicht zuviel Hoffnungen.
Nochmal zum Bericht. also ich sage nun mal es gibt einen Bericht Umsatz.
Parameter, die man in dem Programm wählt Datum von Montag bis Heute, für Abteilung Absatz Kinderspielzeug, für Kundengruppe 30-40 Jahre, in Zone Bayern richtig?
All diese Sachen stecken doch sowieso in der Datenbank und können als Parameter entsprechend verwendet werden, in der Abfrage für den Bericht steht dann bei
Where Abteilung_id = @abteilung statt z.b. = 16
Und irgendwo auf drm Server gibt es dann entsprechend eine Relation in der alle Abteilungen mit ihren IDS stehen,
das bildet dann den Parameter der Klartext Name der Abteilung im frontend für die user und als wert wird die id in die querys gepackt.
Es gibt keine Datenbank, die man nicht mit sich selbst auswerten kann, zumindest keine relationale.
Dein Programm macht eigentlich exakt das gleiche wie die reporting Services nur mit für große Daten ungeeigneten Mitteln.
Gruß
Nochmal zum Bericht. also ich sage nun mal es gibt einen Bericht Umsatz.
Parameter, die man in dem Programm wählt Datum von Montag bis Heute, für Abteilung Absatz Kinderspielzeug, für Kundengruppe 30-40 Jahre, in Zone Bayern richtig?
All diese Sachen stecken doch sowieso in der Datenbank und können als Parameter entsprechend verwendet werden, in der Abfrage für den Bericht steht dann bei
Where Abteilung_id = @abteilung statt z.b. = 16
Und irgendwo auf drm Server gibt es dann entsprechend eine Relation in der alle Abteilungen mit ihren IDS stehen,
das bildet dann den Parameter der Klartext Name der Abteilung im frontend für die user und als wert wird die id in die querys gepackt.
Es gibt keine Datenbank, die man nicht mit sich selbst auswerten kann, zumindest keine relationale.
Dein Programm macht eigentlich exakt das gleiche wie die reporting Services nur mit für große Daten ungeeigneten Mitteln.
Gruß
Die Reporting Services einrichten ist relativ einfach, SQL-Server CD rein und das Feature nachinstallieren auf dem SQL-Server, falls nicht installiert.
Danach kannst du den konfigurieren über die Reporting Services Konfiguration, und das Ding ist erreichbar über eine Webseite, ich glaube als Standard
gilt hier http://HOSTNAME/IP/Berichte, du kannst ggf. auch einen anderen Port konfigurieren, falls du port 80 in Benutzung hast.
Erstellt werden Berichte über das Visual Studio, falls du dahingehend weitere Fragen hast, meld dich am besten mit einer konkreten Fragestellung per neuem Thread oder per PM, das sprengt hier sicherlich den Rahmen.
Danach kannst du den konfigurieren über die Reporting Services Konfiguration, und das Ding ist erreichbar über eine Webseite, ich glaube als Standard
gilt hier http://HOSTNAME/IP/Berichte, du kannst ggf. auch einen anderen Port konfigurieren, falls du port 80 in Benutzung hast.
Erstellt werden Berichte über das Visual Studio, falls du dahingehend weitere Fragen hast, meld dich am besten mit einer konkreten Fragestellung per neuem Thread oder per PM, das sprengt hier sicherlich den Rahmen.
Die Ursache liegt darin, dass Sage Office Line nur eine Access DatenbankAnwendung ist.
Die Sage Office Line stellt ein nettes Frontend für einen MS Access Kern bereit.
Access greift über eine ODBC Verbindung auf den MS SQL Server zu.
Siehe: http://msdn.microsoft.com/de-de/library/bb979206.aspx
Je nach dem wie die Abfragen gestrickt sind, werden die Abfragen auf den SQL Server oder in deinem Fall, in der Userumgebung des Terminalservers ausgeführt.
Bildlich gesprochen lädt Access die Datenbanktabellen vom SQL Server in den Arbeitsspeicher des Terminalservers und wertet sie dort aus.
Wir kennen das Problem auch. Die CPU Auslastung auf unseren Terminalservern liegt häufig im oberen Bereich, während der SQL Datenbankserver kaum eine Regung zeigt.
Wieviele User arbeiten auf dem Terminalserver?
Die Sage Office Line stellt ein nettes Frontend für einen MS Access Kern bereit.
Access greift über eine ODBC Verbindung auf den MS SQL Server zu.
Siehe: http://msdn.microsoft.com/de-de/library/bb979206.aspx
Je nach dem wie die Abfragen gestrickt sind, werden die Abfragen auf den SQL Server oder in deinem Fall, in der Userumgebung des Terminalservers ausgeführt.
Bildlich gesprochen lädt Access die Datenbanktabellen vom SQL Server in den Arbeitsspeicher des Terminalservers und wertet sie dort aus.
Wir kennen das Problem auch. Die CPU Auslastung auf unseren Terminalservern liegt häufig im oberen Bereich, während der SQL Datenbankserver kaum eine Regung zeigt.
Wieviele User arbeiten auf dem Terminalserver?