![]() |
Datenbank: MS SQL Server • Version: 2000 - 2008R2 • Zugriff über: DBexpress
Umstellung ADO -> DBExpress
Hiho,
So, zwar gleiches Thema, aber andere Fragen: Wie ich ![]() Da wir nur unidirektional auf die Daten zugreifen, sehe ich darin erstmal kein Problem. Wir benutzen hauptsächlich TADODataSet und TADOCommand. Ist es möglich diese ohne weiteres auf TSQLDataset bzw. TSQLQuery umzustellen? D.h. ist TSQLQuery überhaupt das Pandon zu TADOCommand? Gibt es evtl. generelle Unterschiede in der Datenbehandlung, z.B. im Hinblick auf NULL, Datumswerte, Booleanwerte, etc.? Vielen Dank schonmal |
AW: Umstellung ADO -> DBExpress
Wenn du nur auf MS SQL Server zugreifst bleib bei ADO. Ist der native Zugriffsweg. dbExpess verkompliziert hier nur den Zugriff.
|
AW: Umstellung ADO -> DBExpress
Naja, wir reden hier aber von einem Unterschied von 10 Minuten (ADO) zu 4 Sekunden (DBX) bei ein und derselben Abfrage. Das ist schon erheblich.
Es sei denn du kannst mir verraten, wie man ADO zu einer solcher Geschwindigkeit kriegt. Ich hab schon ein bisschen rumprobiert, z.B. CursoLocation auf clUseServer gesetzt, wodurch ich die Performance zwar verbessern konnte, was aber an anderer Stelle wieder zu Fehlern geführt hat, weil auf einmal RecordSets leer waren (die definitv nicht leer sein können). Im Großen und Ganzen weis ich aber nicht, was man da noch alles wie rauskitzeln kann. Der Zugriff auf die Daten erfolgt im Prinzip wie folgt (beispielhaft):
Delphi-Quellcode:
Die Datenübertragung vom Server zum Client ist dabei (clUseClient) in wenigen Sekunden beendet. Das Iterieren durch das Dataset braucht dann ewig (~10min).
procedure GetData;
var DataSet: TADODataSet; begin // Verbindung aufbauen {...} DataSet.Open; while not DataSet.Eof do begin // Daten lokal in Objekten speichern {...} DataSet.next; end end; Gleicher Code nur mit TSQLDataSet (also DBX) ist in ca. 4 Sekunden erledigt. Also wenn es da was zu verbessern gäbe, würde das auch reichen ;-) |
AW: Umstellung ADO -> DBExpress
kenn' ich so gar nicht (so viele Daten ? / Blobs?), wobei serverseitige Cursor mit MSSQL-Server ohnehin problematisch sind. Hast Du schon mal:
Delphi-Quellcode:
versucht ?
Adodataset1.LockType := ltBatchOptimistic;
Adodataset1.Open; Adodataset1.Connection := nil; While not ..... |
AW: Umstellung ADO -> DBExpress
Zitat:
Zitat:
Zitat:
|
AW: Umstellung ADO -> DBExpress
Zitat:
Ich hab das jetzt mal mit verschiedenen LockTypes probiert. Ergebnis: ltBatchOptimistic: 503 Sekunden ltOptimistic (default): 508 Sekunden ltReadOnly: 506 Sekunden ltPessimistic 509 Sekunden Die Werte liegen unter 10 Min. weil ich in dem Bsp. alles unnötige weggelassen habe (Anzeigeaktualisierung, Application.ProcessMessage...). Macht also auch keinen unterschied. Zitat:
Zitat:
Zitat:
Edit: Zeit bei Readonly vergessen... Edit2: ltPessimistic ergänzt |
AW: Umstellung ADO -> DBExpress
Hast du einen Profiler zur Hand? Unter D6 hatten wir performanceprobleme bei öffnen einer Dataset. War dann die bestimmung des Autoinc-Feldes. Evtl. gibts ja in D2010 auch ein Bottleneck bei ADO. Würde sich mit AQTime & Co. sehr schnell finden lassen.
|
AW: Umstellung ADO -> DBExpress
Ja, den im SQL Server Management Studio enthaltenen Profiler. Auf was muss ich den einstellen bzw. nach was suchen?
|
AW: Umstellung ADO -> DBExpress
Nein, einen Profiler für den Pascal-Quellcode.
|
AW: Umstellung ADO -> DBExpress
OK, während ich (bisher erfolglos) mit ProDelphi rumgespielt habe, hat mein Kollege in der Zwischenzeit durch händisches Profiling (^^) die Lösung gefunden:
Delphi-Quellcode:
bringt einen Performanceschub, sodass ADO die Aufgabe auch in 4 Sekunden erledigt. Und das obwohl wir keine Datencontrols benutzen. :gruebel:
...
DataSet.DisableControls; DataSet.Open; ... Gut, dann wirds wohl bei ADO bleiben. :-) Trotzdem danke ich euch, für die schnelle Hilfe :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz