geschwindigkeitsproblem,hilfe!

wolfganga

Grünschnabel
wir programmieren in Delphi und benutzen sql 2000 (enterprise edition). bei verschiedenen abfragen haben wir doch relativ lange wartezeiten obwohl die hardwarekonfiguration perfekt ist. wer kennt sich aus und koennte hilfe leisten.
wolfganga
 
Vielleicht solltest du mal aufzählen bei welchen Operationen die Geschwindigkeit zu wünschen übrig lässt, denn da gibt es seitens des Client also des Programms schon ein paar Tricks um den SQL-Server net so auszulasten.

Gruss Homer
 
Antwort zu Geschwindigkeitsproblem

Hallo Homer,
vielen Dank fuer Deine Antwort. Ich habe Deinen Komentar an 2 unserer Programmierer weitergegeben, wenn Du nichts dagegen hast, wird einer sich mit Dir in Verbindung setzen.
Vielen Dank im voraus
Wolfganga
 
Kein Problem. Ich hab zwar keine Ahnung von Delphi, aber habe schon reichlich mit Datenbanken in anderen Sprachen gearbeitet (ASP, PHP, VB, C++)

Also ein Trick währe z.B.:

Wenn ihr aus einer oder Mehreren Abfragen Daten zusammen holt und in eine Tabelle schreiben wollt.
Bei einem INSERT INTO sollte man aufpassen, denn der braucht etwas länger als ein SELECT.
Wenn ihr nun sagen wir mal 1000 Datensätze mit einer Schleife durchlaufen müsst, und die Daten dann immer wieder mit INSERT INTO einfügen wollt, dann schickt ihr bei 1000 Durchläufen 1000mal einen INSERT INTO an den SQL-Server. Damit wird 1. mal das Netz ziemlich belastet und 2. muss der SQL-Server immer wieder eine Connection auf machen den Datensatz einfügen und dann die Connection wieder schließen.
So und da gibt es jetzt einen kleinen Trick und zwar kann man immer so sagen wir mal 50 oder 100 oder mehr (je nach inhalt der Daten) zusammenfassen und losschicken.
Realisieren lässt sich das mit Hilfe einer MODULO-Operation innerhalb der Schleife und ganz normaler Stringverkettung.

Gruss Homer
 
Prinzipiell ist es so, dass SQL 2000 ein recht komplexes System intern verwendet.
Dies basiert auf Indexerstellung, pk, fk, joins, sp
Das Problem sind keine Inserts, denn man kann auch die connection offen lassen, und mit Hilfe von rs.updatebatch und resync arbeiten, sondern vielmehr das Datenbankdesign...
Da kommt es in erster Linie darauf an, welchen Zweck die DB erfüllt: OLAP oder OLTP?
Dann sollte man anhand dessen die darin enthaltenen Daten analysieren, und entscheiden, ob eine extreme Normalisierung sinnvoll ist.
Außerdem ist das Auslagern von Vorgängen in SPs und Trigger fast immer sinnvoll, da vor allem SPs in vorkompilierter Form mit einem Ergebniscache vorliegen...

Und für die Menge von 1000 Inserts ist ein Bulk Insert bei weitem besser als irgendeine Schleife...

Wenn noch fragen sind: schnitto@gmx.de
 

Neue Beiträge

Zurück