INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

SQL Server Performance



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

17.09.2009, 11:05
Beitrag #1

danielsan Offline
LVF-Grünschnabel
*


Beiträge: 39
Registriert seit: Mar 2007

2011-SP1
2006
DE

22000
Deutschland
SQL Server Performance
Hallo zusammen!
Gibt es hier SQL-Cracks?
Ich hab folgendes Problem: Ich habe ein LV-Programm geschrieben, mit dem man Daten aus einer großen SQL-Server Tabelle (Einige Millionen Datensätze) abfragen kann.
Die Abfrage sieht dann mit verschiedenen Filterkriterien ungefähr so aus:

SELECT p.PPunktNr, p.Beschreibung, g.Ist, p.Soll, p.MaxWert, p.MinWert, p.Toleranz, g.Status, g.GerNr, g.Pruefdatum, g.Pruefablauf, ge.GerTyp, ge.WMNr FROM tbl_Pruefpunkt p INNER JOIN tbl_Geraete ge INNER JOIN tbl_GerPruefPunkt g ON ge.GerTypIDCnt = g.GerID ON p.PPunktIDCnt = g.PPunktID WHERE g.PPunktID IN (1173) AND g.GerID = 109 AND g.Status != 0 AND g.Pruefablauf = 'Prüfung Produktion' ORDER BY p.PPunktNr, g.GerNr

Tabellen:
tbl_Pruefpunkt p enthält Stammdaten, ca. 2000 Datensätze
tbl_Geraete ge enthält Stammdaten, ca. 100 Datensätze
tbl_GerPruefPunkt g enthält Ergebnissdaten, mehrere Millionen Datensätze

weitere Infos:
SQL Server 2000
LV 2009
Verbindung mittels Microsoft Native Client 9 (per OLE)
Für SQL Kommunikation verwende ich das ADO TOOL von IBB:
http://forum.ib-berger.com/index.php?showforum=12

Folgendes Verhalten ergibt sich:
Frage ich Geräte ab, zu denen nur wenige Datensätze existieren (GerID), geht die Abfrage relativ schnell (z.B. 3 s, erneute Abfrage um Faktor 100 beschleunigt). Bei Geräten mit mehr Datensätzen (GerID=xy) verlangsamt sich das ganze dramatisch (z.b. 190s, erneute Abfrage genau so lahm).
Dabei ist egal, wie viele Datensätze tatsächlich übertragen werden. Scheinbar dauert das Erstellen eines Recordsets so lange. Das Auslesen der Zeilen mittels getRows geht dann schnell.Ist auch in diesem Bild ganz gut zu sehen:

   

Das Programm steckt sehr lange in dem linken Teil bis die Referenz auf ein recordset ausgegeben wird.
Frage ich Werte ohne joins direkt ab mit z.B.:

SELECT g.Ist, g.Status, g.GerNr, g.Pruefdatum, g.Pruefablauf FROM tbl_GerPruefPunkt g WHERE g.PPunktID IN (1173) AND g.GerID = 109 AND g.Status != 0 AND g.Pruefablauf = 'Prüfung Produktion' ORDER BY g.GerNr

geht das Ganze auch nicht schneller. Daher vermute ich mal, dass es nicht wirklich an der Art und Weise der Abfrage liegen kann. Vom Netzwerktraffic scheint es auch nicht wirklich abhängig zu sein, da das Holen von 200 Zeilen genau so lange dauert, wie das von 200.000 zeilen.
Gibt es eine Möglichkeit, das Erstellen eines Recordsets in der DB zu beschleunigen? Müssen da evtl. noch Indizes gesetzt werden etc...?

Ach ja: Frage ich per Eigenschaftsknoten die Einstellungen des Cursors ab ist dieser auf server, fast forward, read only eingestellt. Sollte eigentlich passen.

Irgendwelche Tipps?

Gruß,
Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Nachrichten in diesem Thema
SQL Server Performance - danielsan - 17.09.2009 11:05
SQL Server Performance - RoLe - 17.09.2009, 15:23
SQL Server Performance - rolfk - 18.09.2009, 16:01
SQL Server Performance - danielsan - 21.09.2009, 11:03
SQL Server Performance - rolfk - 21.09.2009, 16:36
SQL Server Performance - danielsan - 23.09.2009, 14:47
SQL Server Performance - cb - 28.09.2009, 18:05
SQL Server Performance - danielsan - 29.09.2009, 09:47

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Performance-Frage: Was ist klüger? Cluster5020 5 4.760 17.08.2011 12:56
Letzter Beitrag: Cluster5020

Gehe zu: