Datenbank - Perfromaceoptimierung täglich automatisch anstossen

topsi

Aktives Mitglied
27. November 2018
86
6
Hallo,

wir laufen bei ecom auf einem MSQL 2016 standard (Miete)

Gerne würde ich die in JTL integrierte Performanceoptimierung automatisiert nachts laufen lassen. So wie ich es verstanden habe geht das nur über den server Agent und nicht zB per worklow oder aufgabenplanung.

JTL selbst war auf mein Ticket hin leider nicht in der Lage mir das verwendete Skript zu "verraten".

Kann mir jemand eine kurze Anleitung geben, wie sich das implementieren lässt?

Das hier habe ich in einem anderen Forenbeitarg zum Thema skript gefunden, bin aber nicht sicher ob das für die 1.6.44 noch gilt:

EXECUTE dbo.IndexOptimize @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30

VG
topsi
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.684
510
Also ich lasse bei uns täglich nachts die spOptimieren drüberlaufen. Diese Procedure startet auch die IndexOptimize mit sinnvollen Argumenten.
Also EXEC eazybusiness.dbo.spOptimieren
Ob du solche Wartungsarbeiten per Aufgabenplanung, oder mit dem SQL-Agent ausführen läßt, oder die Befehle manuell eintippst ist ja egal - führt immer zum selben Ergebnis.
Übrigens: als wir noch bei Ecomdata waren hatten wir sowieso keinen Zugriff auf den SQL-Agent...

Tipp: Schau dir doch die spOptimieren mal an, was die macht und was sie mit welchen Parameter aufruft.
 
  • Gefällt mir
Reaktionen: pixxass und topsi

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.215
667
Jein, es sammeln sich schon sehr viele Logs, Picklisten, gelöschte Kunden + Bilder an, die eine Datenbank unnötig aufblähen.
Diese werden von uns regelmäßig gelöscht und dann über JTL Indizis neu gesetzt.

Daher die Frage, ob die Auslösung von diese StoredProcedure vielleicht was besser macht.

Die SQL DB ist bereits optimiert, hat damit weniger zu tun.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.684
510
In einem Testsystem, in dem immer wieder mit der Ameise relativ viel hin und her exportiert wird wirkt sich die Stored Procedure merklich aus.
Da das so ist, lass ich das auch auf dem Produktivsystem in der Nacht drüberlaufen - tut ja nicht weh.
Zahlen dazu hab ich aber keine. Vielleicht ist es auch unnötig.


Jein, es sammeln sich schon sehr viele Logs, Picklisten, gelöschte Kunden + Bilder an, die eine Datenbank unnötig aufblähen.
Diese werden von uns regelmäßig gelöscht und dann über JTL Indizis neu gesetzt.

Daher die Frage, ob die Auslösung von diese StoredProcedure vielleicht was besser macht.
Du kannst dir ja ansehen, was die Stored Procedure macht. Also was da abgearbeitet wird.
Aber ob du die Befehle von Hand startest, oder die Stored Procedure startest, macht keinen Unterschied. Insofern ein "Nein" auf deine Frage - die Stored Procedure kann es nicht besser.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.684
510
Die SQL DB ist bereits optimiert, hat damit weniger zu tun.
Wie jede SQL Datenbank benötigt auch der SQL Server, damit eine SQL Query performant ablaufen kann, Indizes auf wichtigen Felder und zusätzliche Informationen, wie selektiv ein gewisser Index ist (=Statistiken).

Der SQL Server berechnet die Indexstatistiken bei Erreichen eines bestimmten Schwellenwerte standardmässig selbständig neu. Er sagt also, wenn sich z.B. 20% einer Tabelle geändert haben, hat sie sich "wesentklich" geändert, also "Schwellenwert überschritten", also werden die Statistiken neu erstellt (den tatsächlichen Wert weiß ich nicht genau, vielleicht eher Richtung 10%).
Das genügt nicht immer. Daher gibvt es, Empfehlungen die Indexstatistiken manuell zu optimieren. Wie bei allem gibt es auch hier verschiedene Meinungen, aber auch schon das JTL die Optimierungsskripte von Ola Hallengren in ihre Wawi eingebaut hat kann man als Hinweis darauf ansehen, dass diese Dinge ja nicht ganz unnötig sein können.

In den Indexstatistiken werden Informationen über die Werteverteilung der indizierten Spalten abgelegt. Indexstatistiken müssen – genau wie die Indizes selbst – regelmässig gewartet werden.
Wenn Indexstatistiken nicht erstellt wurden kann das dazu führen, dass der Query Analyzer einen Index gar nicht verwendet. Dasselbe ist auch der Fall, wenn die Statistiken veraltet sind, weil die Datenbankengine dieser alten Statistik nicht mehr traut.
 
  • Gefällt mir
Reaktionen: Christoph E.

topsi

Aktives Mitglied
27. November 2018
86
6
Also ich lasse bei uns täglich nachts die spOptimieren drüberlaufen. Diese Procedure startet auch die IndexOptimize mit sinnvollen Argumenten.
Also EXEC eazybusiness.dbo.spOptimieren
Ob du solche Wartungsarbeiten per Aufgabenplanung, oder mit dem SQL-Agent ausführen läßt, oder die Befehle manuell eintippst ist ja egal - führt immer zum selben Ergebnis.
Übrigens: als wir noch bei Ecomdata waren hatten wir sowieso keinen Zugriff auf den SQL-Agent...

Tipp: Schau dir doch die spOptimieren mal an, was die macht und was sie mit welchen Parameter aufruft.
Ja der Agent ist inaktiv, ich teste es mit der Aufgabenplanung. Danke Dir !
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.684
510
Noch 2 Fragen: spOptimieren macht das was ich manuell über die Performanceoptimierung starte ?
Ich habe keinen Einblick in den Sourcecode der Wawi und weiß deshalb nicht genau, was beim Anwählen der Performanceoprimierung alles ausgeführt wird.
Wenn du nachschauen willst, was in dem Moment per SQL an die Datenbank übertragen wird, kannst du das mit jedem beliebigen SQL Sniffer machen. Wenn ich mich recht erinnere ist im Wawi Verzeichnis auch schon ein passendes Tool dabei. Dann kannst du das an die DB übertragene SQL mit der spOptimieren vergleichen.

(Außer Filestream da wir sql standard haben)
Ich verstehe nicht ganz, was du meinst, bzw. was hierzu deine Frage ist.
Filestream ist kein spezielles Feature von Standard oder Express. Es ist vielmehr ein Feature des SQL-Servers.


kannst du mir sagen wie ich den befehl über die aufgabenplanung starte? TX
So wie ich dich verstanden habe (s.o.), habt ihr doch die Standard Version des SQL-Servers.
D.h. du hast den SQL-Agent und kannst doch die Aufgaben von diesem Ausführen lassen (also brauchst du ja gar keine Windows Aufgabenplanung)