Einzelnen Beitrag anzeigen

OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

FireDAC macht unendlich viele Fetches

  Alt 21. Apr 2020, 11:53
Datenbank: MSSQL • Version: 2016 • Zugriff über: FireDAC
Hallo Freunde,

heute ein Mysterium. Ein simples Delphi-Programm (10.2 Tokyo) mit FireDAC. Man nehme eine normale TFDConnection, binde den SQL-Server via "Microsoft ODBC Driver 17 for MSSQL" ein, hänge eine einfache TFDQuery dran und verpasse letzterer ein einfaches Statement: "SELECT * FROM Orte ORDER BY StatOrt". Ein * geht hier in Ordnung, werden eh alle Felder abgefragt.

Die Tabelle hat etwa 30k Einträge, also kein Hexenwerk. Auf unserem internen SQL-Server generiert FireDAC dabei so um die 200 EXEC-Statements, bis alles so weit abgeholt ist.

Nun haben wir bei einem Kundensystem ein Phänomen, bei dem die Anzahl der Exec's regelrecht explodiert, auf >120.000 statt 200. Es ist immer dieselbe Abfolge pro Datensatz:

Code:
declare @p1 int
set @p1=1073741826
declare @p2 int
set @p2=180150009
declare @p5 int
set @p5=8
declare @p6 int
set @p6=1
declare @p7 int
set @p7=11130
exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'SELECT * FROM Orte ORDER BY StatOrt',@p5 output,@p6 output,@p7 output
select @p1, @p2, @p5, @p6, @p7
Dieses Statement ist das SELECT. Es folgt nun:

Code:
exec sp_cursoroption 180150009,1,24
exec sp_cursoroption 180150009,1,25
exec sp_cursorfetch 180150009,2,1,50
exec sp_cursoroption 180150009,3,24
exec sp_cursor 180150009,40,1
-- ab hier repeat
exec sp_cursoroption 180150009,1,24
exec sp_cursoroption 180150009,3,25  -- die 3 ist anders
exec sp_cursor 180150009,40,1 --die 1 ist wohl der Datensatz
exec sp_cursoroption 180150009,1,25
exec sp_cursor 180150009,40,1
exec sp_cursor 180150009,40,1
exec sp_cursor 180150009,40,1
exec sp_cursor 180150009,40,1
exec sp_cursor 180150009,40,1
exec sp_cursoroption 180150009,3,24
exec sp_cursor 180150009,40,2  -- die 2 ist anders
...
...
...
Und diese Kette an Execs für jeden einzelnen Datensatz. Das belastet den Server ganz enorm und das Starten der Anwendung dauert statt eines Wimpernschlags ne geschlagene Minute.

Hat jemand eine Ahnung, was da am SQL-Server umgestellt werden müsste ?
  Mit Zitat antworten Zitat