AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADOQuery.Open dauert manchmal 30sec..??
Thema durchsuchen
Ansicht
Themen-Optionen

TADOQuery.Open dauert manchmal 30sec..??

Ein Thema von kaju74 · begonnen am 5. Sep 2013 · letzter Beitrag vom 6. Jun 2017
Antwort Antwort
Seite 1 von 2  1 2      
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#1

TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 07:38
Datenbank: MS-Access • Version: 6.1 • Zugriff über: MDAC
Hallo Ihr Lieben.

Ich habe hier ein großes Problem, dem ich nicht auf die Schliche komme. Spreche über Delphi 2010 eine MS-Access Datenbank (etwa 31MB) an. Dort setze ich ein Query ab, das ~400 Datensätze aus einer Tabelle mit ~50.000 Datensätze liest. Der Query wird in etwa so gesetzt:

Code:
dbqAllocations.SQL.Text := BuildAllocSQL('Allocations', ID, TempAccount.StartDate, EndOfAYear(ComputationYear - 1), [btVacation]);
dbqAllocations.Prepared := True;
dbqAllocations.Open;
Jetzt ist es in der Regel so, dass die Zeit zum Öffnen (also der Open-Befehl) so um die 120msec benötigt. Hin und wieder benötigt der Open-Befehl aber geschlagene 10-30 Sekunden???

Warum???

Ich bin hier echt am verzweifeln....

LG,
Marc
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:00
wie sieht denn der SQL Befehl aus der da gemacht wird ?

Die Fehler, die mit WHERE abgefragt werden sollten entsprechenden INDEX haben, dann wird es i.D.R. schneller
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#3

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:08
Hi.

Der Befehl sieht so aus:

SELECT * FROM Allocations WHERE UserID IN (80006, 80015, 80082, 80092, 80025, 80026, 80135, 80043, 80133, 80080, 80059, 80061, 80064, 80066, 80131, 80138, 80013, 80002, 80139, 80140, 80148, 80031, 80030, 80147, 80034, 80145, 80111, 80125, 80046, 80124, 80048, 80053, 80120, 80142, 80132, 80146, 80149, 80141, 80123, 80038, 80040, 80054, 80143, 80101) AND (StartDate <= "201212312359") AND (EndDate >= "200901010000") AND (Type = 0) AND (BarType in (2)) ORDER BY UserID, StartDate

Auf UserID und StartDate liegen jeweils ein Index. Bei StartDate/EndDate nicht wundern, dass die ein String sind. Leider historisch bedingt...

Selbst wenn kein Index drauf liegen würden, erklärt das doch nicht die Differenz von ~150msec -> 30sek bei immer dem gleichen SQL-Befehl...?!?

Gruß,
Marc
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:11
Liegt die Datenbankdatei auf der lokalen Festplatte?
Ist Property CursorLocation = clUseServer?
fork me on Github
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#5

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:31
Ja, liegt lokal und der Cursor auf Server....

Anbei mal ein Performance-Auszug.

LG,
Marc
Miniaturansicht angehängter Grafiken
pm_perf.jpg  

Geändert von kaju74 ( 5. Sep 2013 um 08:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rweinzierl
rweinzierl

Registriert seit: 22. Mär 2005
98 Beiträge
 
#6

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:38
Ist Access ein richtiger Server? , vielleicht irgend eine Deadlock situation wo ein anderer die Datenbank exklusiv öffnet ?


mfg

Reinhold
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#7

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 08:41
Nein, nutze Access über ADODB/MDAC lokal als einziger...kein Parallel-Zugriff, oder so...

Marc
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 09:18
Hi.

Der Befehl sieht so aus:

SELECT * FROM Allocations WHERE UserID IN (80006, 80015, 80082, 80092, 80025, 80026, 80135, 80043, 80133, 80080, 80059, 80061, 80064, 80066, 80131, 80138, 80013, 80002, 80139, 80140, 80148, 80031, 80030, 80147, 80034, 80145, 80111, 80125, 80046, 80124, 80048, 80053, 80120, 80142, 80132, 80146, 80149, 80141, 80123, 80038, 80040, 80054, 80143, 80101) AND (StartDate <= "201212312359") AND (EndDate >= "200901010000") AND (Type = 0) AND (BarType in (2)) ORDER BY UserID, StartDate

Auf UserID und StartDate liegen jeweils ein Index. Bei StartDate/EndDate nicht wundern, dass die ein String sind. Leider historisch bedingt...

Selbst wenn kein Index drauf liegen würden, erklärt das doch nicht die Differenz von ~150msec -> 30sek bei immer dem gleichen SQL-Befehl...?!?

Gruß,
Marc
Also Optiomiert ist was anderes .....

der Unterschied zwischen 30 sec und 150 msec ist der Cache ..... Bei erstenmal dauerts lange, wenn er das schon kennt und hat das im Cache dauert es nur die 150 msec
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#9

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 10:03
Kann man ausschliessen, dass es der Verbindungsaufbau zur Datenbank ist? Wird die Verbindung nur einmal bei Programmstart hergestellt und beim Beenden getrennt, oder ist wird die Verbindung erst kurz vor Ausführung der Query geöffnet?

Ein ähnliches, unregelmäßiges Problem mit um einen drei Minuten verzögerten Connect habe ich bei InterBase 7.5.1 seit mindestens 2012 im Logfile.

Kann man Kosmische Strahlung ausschliessen?
Michael Justin
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#10

AW: TADOQuery.Open dauert manchmal 30sec..??

  Alt 5. Sep 2013, 10:04
Hi.

Bin offen für Optimierungen...aber:

Das Laden dauert mitnichten immer beim ersten Mal so lange...sondern teilweise kommt der
Hänger erst beim 3-5 Mal und das erste Mal ist < 300msec...

Gruß,
Marc
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:47 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