Hallo zusammen,
leider habe ich momentan einige Probleme bzgl. Performance, weshalb ich auf Hilfe dritter angewiesen bin. Vielleicht kennt sich hier der ein oder andere gut bis sehr gut damit aus und kann mir Unterstützung geben.
Kurz zur Umgebung:
Ich habe eine MSSQL-Datenbank. In dieser Datenbank habe ich einige Tabellen. Die meisten dieser Tabellen sind nicht fortlaufend - Einmal täglich bügelt der eine Momentaufnahme rüber von der Hauptdatenbank (DB von einer Anwendung). 3 der Tabellen sind jedoch fortlaufend, weshalb ein Skript von meinem Kollegen geschrieben wurde, das die Daten jeden morgen um eine bestimmte Uhrzeit rüberkopiert (die alten jedoch nicht wie bei der Momentaufnahme löscht).
Datenbank: Sendungsmanger
Tabellen: 37 Tabellen
Zweck der Datenbank: Eine, über PHP angesteuerte, Weboberfläche, wo Analysen, Auswertungen und Übersichten dargestellt werden.
Für die meisten dieser Analysen brauche ich die selben Daten, weshalb ich eine Sicht geschrieben habe die wie folgt aussieht:
Da 2 dieser Tabellen (SBB und SendungDet) jedoch ca 44 Millionen Datensätze beinhaltet, dauert eine kleine Abfrage wie zum Beispiel:
knappe 4 Minuten, was nicht vertretbar ist. Die Weboberfläche sollte möglichst schnell abrufbar sein und die Daten sollten möglichst "schnell" zur Verfügung stehen.
für das obige Beispiel habe ich zum Beispiel nun nicht mehr auf die Sendung_Sicht gegriffen, sondern Frage die Anzahl der letzten Tage über die SBB ab. Was mich statt 4 Minuten, nur noch 1 Minute kostet..
Aber, sobald man die Weboberfläche öffnet mit bisher nur diesem Count braucht sie schon über 1 Minute Ladezeit.
Ich will mir nicht ausdenken wie lange es braucht, wenn ich mal aktiv die Sendung_Sicht aufrufe für ein ganzes Jahr mit allen Spalten.
Ich bin überfordert, weil ich mit dem Thema Datenbanken in der Vergangenheit eher weniger zu tun hatte.
Ich weis, es gibt jetzt womöglich nicht eine Anleitung wie zum Beispiel: "Mach einfach XY dann läufts". Aber eventuell können wir gemeinsam, durch diverse Schritte und Optimierungen versuchen, die Ladezeiten und Abfragedauer immens zu verbessern.
Ich freue mich auf Antworten und hoffe, ihr könnt mir da evtl. helfen.
Bis dahin ganz liebe Grüße
Domenic
leider habe ich momentan einige Probleme bzgl. Performance, weshalb ich auf Hilfe dritter angewiesen bin. Vielleicht kennt sich hier der ein oder andere gut bis sehr gut damit aus und kann mir Unterstützung geben.
Kurz zur Umgebung:
Ich habe eine MSSQL-Datenbank. In dieser Datenbank habe ich einige Tabellen. Die meisten dieser Tabellen sind nicht fortlaufend - Einmal täglich bügelt der eine Momentaufnahme rüber von der Hauptdatenbank (DB von einer Anwendung). 3 der Tabellen sind jedoch fortlaufend, weshalb ein Skript von meinem Kollegen geschrieben wurde, das die Daten jeden morgen um eine bestimmte Uhrzeit rüberkopiert (die alten jedoch nicht wie bei der Momentaufnahme löscht).
Datenbank: Sendungsmanger
Tabellen: 37 Tabellen
Zweck der Datenbank: Eine, über PHP angesteuerte, Weboberfläche, wo Analysen, Auswertungen und Übersichten dargestellt werden.
Für die meisten dieser Analysen brauche ich die selben Daten, weshalb ich eine Sicht geschrieben habe die wie folgt aussieht:
Code:
SELECT dbo.Zustellorganisation.strBez, dbo.Zustellorganisation.strUPOC AS ZustellOrgUPOC, dbo.SendungFormat.strBezeichnung AS Sendungsformat, dbo.Bezirk.strBezeichnung AS Bezirk, dbo.KundeKostenstelleView.strKundeNr,
dbo.KundeKostenstelleView.strKundeUPOC, dbo.KundeKostenstelleView.fKundeAktiv, dbo.KundeKostenstelleView.strKundename1, dbo.KundeKostenstelleView.strKundename2, dbo.KundeKostenstelleView.strKundeStrasse,
dbo.KundeKostenstelleView.strKundeHausNr, dbo.KundeKostenstelleView.strKundePlz, dbo.KundeKostenstelleView.strKundeOrt, dbo.KundeKostenstelleView.lKsKKSID, dbo.KundeKostenstelleView.strKsUPOC,
dbo.KundeKostenstelleView.fKostenstelleAktiv, dbo.KundeKostenstelleView.strKsName1, dbo.KundeKostenstelleView.strKsName2, dbo.KundeKostenstelleView.strKsStrasse, dbo.KundeKostenstelleView.strKsHausNr,
dbo.KundeKostenstelleView.strKsPlz, dbo.KundeKostenstelleView.strKsOrt, dbo.EmpfAdr.strStrasse, dbo.EmpfAdr.strHausNr, dbo.EmpfAdr.strPlz, dbo.EmpfAdr.strOrt, dbo.EmpfAdr.strLand, dbo.EmpfAdr.strOrgStrasse,
dbo.EmpfAdr.strOrgHausNr, dbo.EmpfAdr.strOrgLand, dbo.EmpfAdr.strOrgPlz, dbo.EmpfAdr.strOrgOrt, dbo.EmpfAdr.fKorrigiert, dbo.SendungDet.lGewicht, dbo.SendungDet.lLeistungID, dbo.SendungDet.dtPlanZustellung,
dbo.SendungDet.fRedress, dbo.SendungDet.fZustellungOK, dbo.SBB.dtErfassungszeit AS [Sendung Erfassungszeit], dbo.SBB.lImageCount AS [Anzahl Bilder], dbo.SBB.strUPOC AS SendungsUPOC,
dbo.Artikel.strBez AS Artikelbezeichnung, dbo.SendungDet.curPreis
FROM dbo.SBB INNER JOIN
dbo.SendungDet ON dbo.SBB.lSBBID = dbo.SendungDet.lSBBID INNER JOIN
dbo.EmpfAdr ON dbo.SBB.lSBBID = dbo.EmpfAdr.lSBBID INNER JOIN
dbo.Bezirk ON dbo.SendungDet.lBezirkID = dbo.Bezirk.lBezirkID INNER JOIN
dbo.SendungFormat ON dbo.SendungDet.lSendungFormatID = dbo.SendungFormat.lSendungFormatID INNER JOIN
dbo.KundeKostenstelleView ON dbo.SBB.lKKSID = dbo.KundeKostenstelleView.lKKSID INNER JOIN
dbo.Depot ON dbo.Bezirk.lDepotID = dbo.Depot.lDepotID INNER JOIN
dbo.Zustellorganisation ON dbo.Depot.lZustellorganisationID = dbo.Zustellorganisation.lZustellorganisationID INNER JOIN
dbo.Artikel ON dbo.SendungDet.lArtikelID = dbo.Artikel.lArtikelID
Da 2 dieser Tabellen (SBB und SendungDet) jedoch ca 44 Millionen Datensätze beinhaltet, dauert eine kleine Abfrage wie zum Beispiel:
Code:
use Sendungsmanager
select count(*), dtPlanZustellung from Sendung_Sicht
where dtPlanZustellung >= DateADD(DAY,-10,GETDATE())
group by dtPlanZustellung
knappe 4 Minuten, was nicht vertretbar ist. Die Weboberfläche sollte möglichst schnell abrufbar sein und die Daten sollten möglichst "schnell" zur Verfügung stehen.
für das obige Beispiel habe ich zum Beispiel nun nicht mehr auf die Sendung_Sicht gegriffen, sondern Frage die Anzahl der letzten Tage über die SBB ab. Was mich statt 4 Minuten, nur noch 1 Minute kostet..
Aber, sobald man die Weboberfläche öffnet mit bisher nur diesem Count braucht sie schon über 1 Minute Ladezeit.
Ich will mir nicht ausdenken wie lange es braucht, wenn ich mal aktiv die Sendung_Sicht aufrufe für ein ganzes Jahr mit allen Spalten.
Ich bin überfordert, weil ich mit dem Thema Datenbanken in der Vergangenheit eher weniger zu tun hatte.
Ich weis, es gibt jetzt womöglich nicht eine Anleitung wie zum Beispiel: "Mach einfach XY dann läufts". Aber eventuell können wir gemeinsam, durch diverse Schritte und Optimierungen versuchen, die Ladezeiten und Abfragedauer immens zu verbessern.
Ich freue mich auf Antworten und hoffe, ihr könnt mir da evtl. helfen.
Bis dahin ganz liebe Grüße
Domenic