Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Elmar Boye <ElmarB@xxxxxxx>
- Date: Tue, 15 Apr 2008 11:08:05 +0200
Hallo Achim,
Achim Domma schrieb:
> die Leitung müssen zählt auch noch beim .Net Assembly, oder?Mit "servserseitig" meinte ich keine .NET Assembly.
Damit meinte ich eine direkte Verarbeitung mittels
XML Funktionalität des SQL Servers.
ok, verstanden. Aber das Argument, daß weniger Daten durch
Ja.
Als Vergleich führe das SELECT in einer Standard Prozedur aus.
Obiger Code entspräche dabei einem FAST_FORWARD Cursor mit
10maligem FETCH (näheres findest Du unter DECLARE CURSOR).
> Scheinbar baut das ExecuteReader einen komplettes Resultset auf.
Normalerweise nicht.
So hatte ich mir das vorgestellt, aber das ist nicht das, was ich
beobachte. Ich bin wie gesagt eher .Net Entwickler als T-SQL Guru,
(Ich bin genauso Entwickler, nur einer der sich zudem fürs SQL Server
Innenleben interessiert)
von daher kann ich beim Cursor nicht ganz folgen. Mir ist klar,> daß ich in 'ner Stored Procedure einen Cursor aufmachen und mit ihm
> über die Daten iterieren kann.
Das war jetzt die Illustration des .NET Assembly <-> Stored Procedure
> Ich glaube mich aber gelesen zu haben, daß man von sowas möglichst die
> Finger lassen soll.
Zum einen gilt: Ein DataReader in einer SQL Server Assembly ist
nichts besser als ein herkömmliche Prozedur mit DECLARE Cursor.
Zum anderen: In der einen oder anderen Weise hast Du beim Client Zugriff
immer mit einem Cursor zu tun (das gilt bei DAO, ADO, ADO.NET usw).
Nur gibt es dabei bessere und schlechtere (FASTFORWARD ist der bessere ;-)
Optimal wäre (nur nicht immer einfach realisierbar) gar keiner,
das wäre eben INSERT ... SELECT - in Deinem Falle mit XQuery garniert.
Wobei bei komplexen Verarbeitungen das in Frage gestellt werden darf,
wenn die Verarbeitung nicht mehr durch eine oder einige wenige
Anweisungen auf dem Server erledigt werden kann.
Dann wiegt der Overhead durch das ineffizientere Lesen (da der
SQL Server dabei keine blockweise Verarbeitung vornehmen kann)
und der zusätzliche Netztransport weniger, als man durch die
beschränkteren Ausdruckmöglichkeiten
Und eine .NET Assembly kann schon Sinn machen. Nur müßte dort
einiges mehr als eine Read (FETCH) Schleife stehen. Wenn der
weitere Code 90% oder mehr der Zeit ausmacht, wäre das durchaus
zulässig.
Trotzdem wüßte ich gerne, warum mein DataReader sich anders verhält!?
Ich hab' gesucht, aber keine Parameter gefunden, mit denen ich das
Verhalten ändern kann. Zumal der DataReader ja von Hause aus schon
forward-read-only ist!?
Ist er immer - deswegen auch der Vergleich. Auch wenn der nicht
immer 100% hinkommt, so ist er so organisiert, dass der SQL Server
den wenigsten Verwaltungsaufwand benötigt.
Was könnte ich falsch machen?
Prüfe zunächst mal ob die Ursache unabhängig vom Zugriff ist.
Wie lange dauert ein "SELECT TOP(10) * FROM RawDocument"
Wenn das schnell ist, so führe mal Deinen Code auf dem
Server selbst aus (einfache Leseschleife wie im Assemblyversuch)
- dabei sollten keine großen Unterschiede messbar sein.
Tritt die Zeitverzögerung unabhängig davon auf, wäre zu prüfen,
ob da etwas blockiert - d. h. andere Anwendungen auf die RawDocument
Tabelle zugreifen (ggf. auch Deine eigene Testumgebung)
Oder - wenn es übers Netzwerk geht - ob da ein Flaschenhals ist.
Gruß Elmar
.
- Follow-Ups:
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- References:
- Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Uwe Ricken
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Torsten Schuessler
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Elmar Boye
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Elmar Boye
- Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- From: Achim Domma
- Daten schnell lesen (Gegenstück zu BULK INSERT?)
- Prev by Date: Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- Next by Date: Well-known SID im SQL Server nutzen
- Previous by thread: Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- Next by thread: Re: Daten schnell lesen (Gegenstück zu BULK INSERT?)
- Index(es):
Relevant Pages
|
|