Tabellen per SMO auslesen ist sehr langsam

11/08/2008 - 17:36 von michael.kalo | Report spam
Hallo,

ich möchte die Struktur (Tabellen, Felder, Indexes, Stored Procedures)
einer Datenbank per SMO auslesen.
Der Quellcode hierzu sieht in etwa so aus. Wie man leicht erkennt,
werden die SMO-Objekte durchlaufen:


If SMOServer IsNot Nothing Then
SMODatabase = Me.DataBaseConnect(LsDatabaseName, False)
If SMODatabase IsNot Nothing Then
For Each SMOTable In SMODatabase.Tables
For Each SMOColumn In SMOTable.Columns

Next SMOColumn

For Each SMOIndex In SMOTable.Indexes

For Each SMOIndexedColumn In
SMOIndex.IndexedColumns

Next SMOIndexedColumn

Next SMOIndex

Next SMOTable
End If
End If

Mein Problem:

Beim ersten Durchlauf ist das Ganze sehr sehr langsam. Für 1 Datenbank
mit mehr als 200 Tabellen werden mehrere Minuten benötigt.

Meine Frage:

Wie kann ich das beschleunigen? Insoweit ich richtig informiert bin,
setzt das Management Studio ja auch auf SMO auf und dort wartet man
keinesfalls so lange, um sich die Serverstruktur anzusehen.


Danke für eure Antworten.

Michael
 

Lesen sie die antworten

#1 Elmar Boye
11/08/2008 - 19:19 | Warnen spam
Hallo Michael,

schrieb:
ich möchte die Struktur (Tabellen, Felder, Indexes, Stored Procedures)
einer Datenbank per SMO auslesen.

Beim ersten Durchlauf ist das Ganze sehr sehr langsam. Für 1 Datenbank
mit mehr als 200 Tabellen werden mehrere Minuten benötigt.



SMO ist grundsàtzlich nicht die schnellste Bibliothek.
Das liegt zum einen an einigen konzeptionellen Schwàchen
und auch daran, daß alle Metadaten abgerufen werden können,
die der SQL Server irgendwo speichert - von denen man für
Standardaufgaben vieles nicht benötigt.

Etwas làsst sich SMO durch das Setzen von Optionen beschleunigen,
wie gezeigt in
<URL:http://msdn.microsoft.com/en-us/lib...2.aspx>

Wenn Du jedoch nur Informationen abrufen willst, und keine
Verànderungen an den Strukturen vornehmen willst, ist der
Zugriff über die Katalogsichten mit einem eigenen vereinfachten
Objektmodell (oder auch DataSet/DataTable) hàufig schneller
und besser handhabbar.

Meine Frage:

Wie kann ich das beschleunigen? Insoweit ich richtig informiert bin,
setzt das Management Studio ja auch auf SMO auf und dort wartet man
keinesfalls so lange, um sich die Serverstruktur anzusehen.



Beim Management Studio ruft man ja auch nicht alle Indizes ab.
Dort werden die meisten Daten erst abgerufen, wenn man den
jeweiligen Knoten expandiert.
(Wie du im Profiler nachvollziehen kannst).

Gruß Elmar

Ähnliche fragen