SQL Server Performance

p.peter16.07

Benutzer
Beiträge
11
Hallo Zusammen,

ich wende mich nun an euch weil Ihr mir in der Vergangenheit bei einigen fehleren oder Problemen helfen könnte, so hoffe ich das Ihr jetzt auch einen guten Tipp für mich habt.

Wir haben einen Kunden bei dem eine bestimmte anwendung läuft für Rechnungen usw. hinter dieser Anwenudng steht wie immer eine Datenbank.

der Kunde beschwet sich nun über zulange warte drauer bei bestimmten Abfragen nachmal geht die Abfrage mega schnell 0,1 sec und manchmel dauert die Abfrage mega lange 240 sec mit dem fehler " ;(Objects: 0);(Exception: Traceback (most recent call last): File "<string>", line 28, in mainRuntimeError: Query timeout expired) ".
Allgemein dauern alle Abfragen mal paar sec und dann mal wieder extrem lange.

Ich meine das ist nun sehr allgemein geschieben aber Vielleicht eine Idee ?

bei Fragen gerne melden ;)

Mit freundlichen Grüßen
Philipp Peter
 
Werbung:
Was der Kunde oder Du hier bemerkt, ist evtl. nicht das direkte Resultat der Abfrage an sich bzw. eine Analogie zum Abfrageaufwand, sondern der Seiteneffekt einer anderen Operation. Ist das System "passend" ausgelastet, erhält man zufällig, bei gleichzeitigem Start der Abfrage und (bereits) laufender, langandauernder anderer Operation diesen Effekt. Nimmt die Last durch mehr Abfragen oder mehr solcher lang anhaltender Operationen zu, ist es nicht mehr so zufällig und es werden mehr und mehr lange Abfragen mit Timeouts.

Grund für solch ein Verhalten ist am ehesten eine lange, schreibende, blockierende Transaktion.

Finde heraus, ob und welche (mglw. zyklischen) Operationen eine hohe Schreiblast auf das System bringen.
Finde heraus, welche Abfragen konkret betroffen sind und welche Tabellen diese beinhalten.
Finde heraus, welche Tabellen in beiden Fällen betroffen sind.

Allgemeiner Ansatz: Nutze Monitoring Tools von MS, um hohe Lasten zu finden und finde korrespondierende Programmoperationen.
 
Manchmal ist es auch so, dass eine schlecht geschriebene Anwendung oder eine nicht optimierte Datenbank bis zu einer gewissen Useranzahl/Last völlig problemlos läuft und dann scheinbar wie aus dem Nichts zu zicken beginnt, weil einfach die Last nicht mehr bewältigbar ist.

Neben den Anmerkungen von @dabadepdu - denn ich zu 100% zustimme - würde ich mich auch fragen, was sich in letzter Zeit geändert hat (vorher lief es ja offenbar).
 
Tja, weiß nicht, was das für eine Anzeigen sind. Und 49 Tausend ms pro Sekunde ist eine recht lange Sekunde. Aber vielleicht ist das kumuliert von allen Kernen / Prozessen oder ab irgendeinem Startzeitpunkt ..
Auch der Waitcounter sagt mir nichts, ich verwende MSSQL Server nicht.

Du musst die Prozesse und die SQL Statements dahinter finden.
In DB gibt es immer Abfragen, die die aktuellen Table Locks anzeigen und dazu Referenzen liefern, welcher Prozess, welches Statement da zugange ist.
 
Werbung:
Hallo Zusammen,

ich wende mich nun an euch weil Ihr mir in der Vergangenheit bei einigen fehleren oder Problemen helfen könnte, so hoffe ich das Ihr jetzt auch einen guten Tipp für mich habt.

Wir haben einen Kunden bei dem eine bestimmte anwendung läuft für Rechnungen usw. hinter dieser Anwenudng steht wie immer eine Datenbank.

der Kunde beschwet sich nun über zulange warte drauer bei bestimmten Abfragen nachmal geht die Abfrage mega schnell 0,1 sec und manchmel dauert die Abfrage mega lange 240 sec mit dem fehler " ;(Objects: 0);(Exception: Traceback (most recent call last): File "<string>", line 28, in mainRuntimeError: Query timeout expired) ".
Allgemein dauern alle Abfragen mal paar sec und dann mal wieder extrem lange.

Ich meine das ist nun sehr allgemein geschieben aber Vielleicht eine Idee ?

bei Fragen gerne melden ;)

Mit freundlichen Grüßen
Philipp Peter
Wo kommt denn der Fehler her? Ist das ein Anwendungsfehler oder steht das im SQL Server Error Log? Wie ist die Auslastung wenn die Queries lange daueren? Du solltest Dir die Execution Plans anschauen. Spontan würde mir da Parameter Sniffing einfallen. Brent Ozar sp_blitz kann Dir da weiterhelfen
 
Zurück
Oben