AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?
Thema durchsuchen
Ansicht
Themen-Optionen

Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

Ein Thema von alzaimar · begonnen am 15. Mär 2006 · letzter Beitrag vom 16. Mär 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 16:54
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO / Transact SQL
Folgende Anomalie:
Eine komplexe Summierungsabfrage dauert mal 90 Sekunden, mal 7 Minuten, und zwar:
Eingetippt in Query Analyzer (TSQL.EXE) ca. 90 Sekunden
Ausgeführt über TADOQuery unter Delphi: 7 Minuten. (Eine Form, ein TADOQuery, ein ShowMessage).

Wiederholbar. Beides läuft auf dem gleichen Rechner. Beide Verbindungen über den Rechnernamen.

Hä?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 18:01
Wie wärs denn mal mit dem SQL-Statement, Tabellenstruktur, Volumen, Testdaten...
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#3

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 18:05
Wie hast du den das Property "CursorLocation" eingestellt?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 19:15
Danke für die Antworten.
@Union: Es hat imho gar nix mit der Tabellenstruktur etc. zu tun, da ein und die selbe Abfrage aus TSQL 5x schneller ist, als mit ADO. Es ist einfach eine Tabelle, die über den Clustered Index (Datum) innerhalb eines Zeitraumes von einem Jahr mit ca. 1.000.000 kummuliert wird. Eine Jahresauswertung eben. Gruppiert wird über eine Spalte.

@dfried: Ich schau mal..warte... clUseClient.

Ok, langsam: Einfach TADOConnection nehmen, auf Form schmeissen. OLEDB-Provider für SQL-Server auswählen. Pronto. An der Connection habe ich sonst Nichts geändert.

Im Allgemeinen fällt diese Performancediskrepanz nicht auf oder ist nicht vorhanden... Es ist ja egal, obs 100 oder 500ms dauert:
Schwupps = Schwupps.

Aber hier... Wie gesagt, die Tabelle ist nach Summierung ca. 100-200 Zeilen lang, mit ca. 20 Integer-Spalten. Also nix Großes.

Mir ist das ein Rätsel. Wenn das kein bekanntes Problem ist, habe ich eins.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#5

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 19:19
Zitat von alzaimar:
@dfried: Ich schau mal..warte... clUseClient.
OK, stell das mal auf clUseServer, dann wird die Abfrage auch auf dem Server ausgeführt und nicht erst alles auf den Client rübergelutscht...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 21:11
Zitat von alzaimar:
Im Allgemeinen fällt diese Performancediskrepanz nicht auf oder ist nicht vorhanden... Es ist ja egal, obs 100 oder 500ms dauert:
Schwupps = Schwupps.
Bist Du dir 100%ig sicher das die Abfrage in TSQL immer so schnell ist und nicht auch ab und zu so lange dauert. Solange die Ergebnismenge nicht übermäßig groß ist dürfte der ADOExpress-Overhead nicht zu groß sein.
Ich vermute eher das der Server an den Leistungsgrenzen läuft und vermutlich 1-2 Speicherriegel u.U. gewaltige Performancezuwäche bringen würde. Hast Du schon mal auf dem Server überprüft ob der Serverprozess auch wirklich 100% CPU-Zeit benötigt oder es so scheint als macht die CPU gerade Brotzeit. Das wäre nämlich ein Indiz das u.U. nicht alle benötigten Indeze auch wirklich 100%ig im Speicher gehalten werden und teilweise Festplattenzugriffe benötigen. Auch las mal den Queryanalyzer einen Abfrageplan erstellen ob wirklich alle Teile der Abfrage Indexe verwenden können.

Zitat von dfried:
Zitat von alzaimar:
@dfried: Ich schau mal..warte... clUseClient.
OK, stell das mal auf clUseServer, dann wird die Abfrage auch auf dem Server ausgeführt und nicht erst alles auf den Client rübergelutscht...
Bringt mit Sicherheit nichts relevantes. Die Abfrage wird immer auf dem Server ausgeführt. Allein ob die Ergebnismenge komplett zum Client übertragen wird oder erst bei Bedarf ist bei dieser Abfrage und MS-SQL höchstwahrscheinlich irrelevant da MS-SQL aufgrund des fehlenden Multi-Version-Konzepts (die 2005er-Version soll sowas können) eh eine Temp-Tabelle mit dem Ergebnis anlegen muss. Bei Oracle, MySQL oder Interbase könnte ein Server-Client hier was bringen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 21:23
Welchen OLE DB Treiber setzt Du ein: MSDASQL oder SQLOLEDB? Der zweiter ist wesentlich performanter.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#8

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 15. Mär 2006, 21:45
Zitat von Bernhard Geyer:
Zitat von dfried:
Zitat von alzaimar:
@dfried: Ich schau mal..warte... clUseClient.
OK, stell das mal auf clUseServer, dann wird die Abfrage auch auf dem Server ausgeführt und nicht erst alles auf den Client rübergelutscht...
Bringt mit Sicherheit nichts relevantes.
Sorry, war auf dem falschen Dampfer (hab schon lang nix mehr mit ADO gemacht...). Als Faustregel (lt. Kosch) gilt ja clUseServer für Access und clUseClient für SQL-Server wenn ich mich richtig erinnere....
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 16. Mär 2006, 07:18
Zitat von dfried:
Sorry, war auf dem falschen Dampfer (hab schon lang nix mehr mit ADO gemacht...). Als Faustregel (lt. Kosch) gilt ja clUseServer für Access und clUseClient für SQL-Server wenn ich mich richtig erinnere....
clUseServer bei Access deshalb da ja auch der "Serverseitige-Curser" aufgrund der Tatsache das Access 'ne Desktopdatenbank ist nur auf dem Client abläuft und mit clUseClient nur ein unnötiges "Speicherkopieren" erfolgen würde.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Komplexe Abfrage an MSSQL:Dauert ewig über ADO, wieso?

  Alt 16. Mär 2006, 08:04
Moin,

Das geht ja richtig ab hier! Danke für die vielen Tipps.

@Berhard Geyer: Der Server ist ein Compaq Dual Xeon (Hyperthreading) mit GB-weise Ram, ziemlich neu. Die CPU-Auslastung beträgt natürlich knappe 100%. Bei einer der 4 CPU's.

Aber 100%ig sicher bin ich natürlich nicht, das die Abfrage IMMER schneller über TSQL ist. Aber 3x direkt verglichen: TSQL geöffnet, Test.EXE geöffnet. isqlw.exe gestartet => ca. 90sec, dann Test.EXE => 360 sec. Das ganze drei mal hintereinander. Jedesmal. Dann die Bestätigung des Kunden (die 6-7 minuten per ADO).

Die restlichen Tipps (Speicher, Abfrageplan) dürfte nichts bringen, weil es ja kein grundlegendes Problem einer suboptimalen DB/Index-Struktur ist, sonder imho eher ein Treiberproblem oder was-weiss-ich.

Interessant: Auf unserem Netz sind die Ausführungszeiten identisch (so wie man das erwartet), auf der Kundenseite hingegen nicht.

Also irgendwie ein Netzwerkproblem. Das liieebe ich. Hab nämlich keinen Blassen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz