fha 10 Geschrieben 18. April 2011 Melden Teilen Geschrieben 18. April 2011 Hallo Zusammen, ich möchte über alle Datenbanken einer Instanz die Fragmentierung der Indexe ermitteln. Für eine Datenbank habe ich folgende Abfrage: use DB; SELECT DB.name as DatabaseName, a.index_id as IndexID, a.object_id as ObjektID, b.name as Indexname, avg_fragmentation_in_percent as Fragmentierung FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id JOIN master.dbo.sysdatabases as DB on a.database_id = DB.dbid WHERE avg_fragmentation_in_percent > 10.0 AND a.index_id > 0 order by avg_fragmentation_in_percent DESC; Nun versuche ich diese Abfrage so zu verpacken,dass alle Datenbanken durchgegangen werden: Declare @DBID smallint Declare @ID smallint Declare @DBNAME as varchar(64) Declare dbid_cursor CURSOR FOR select dbid from master.dbo.sysdatabases where name='DB'; Open dbid_cursor; FETCH NEXT FROM dbid_cursor INTO @ID; WHILE @@FETCH_STATUS = 0 Begin select @DBNAME=name from master.dbo.sysdatabases where dbid=@ID; Set @DBID=DB_ID(@DBNAME); SELECT DB.name as DatabaseName, a.index_id as IndexID, a.object_id as ObjektID, b.name as Indexname, avg_fragmentation_in_percent as Fragmentierung FROM sys.dm_db_index_physical_stats (@DBID, NULL, NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id JOIN master.dbo.sysdatabases as DB on a.database_id = DB.dbid WHERE avg_fragmentation_in_percent > 10.0 AND a.index_id > 0 ORDER by avg_fragmentation_in_percent DESC; FETCH NEXT FROM dbid_cursor INTO @ID; END CLOSE dbid_cursor; DEALLOCATE dbid_cursor; Nun habe ich das Problem, dass die beiden ABfragen für die selben Datenbanken unterschiedliche Ergebnisse liefern. Wenn die erste 101 Ergebnisse bringt, bekomme ich von der zweiten nur 98. Sind bei der ersten 65, sinds bei der zweiten nur 13. Ich kann keine System feststellen. Das einzige was ich weiß ist, dass wenn ich manuell ein 'USE DB;' bei der zweiten einbringe, dann funktioniert es. Allerdings kann ich das USE-Kommando ja nicht dynamisch in die Abfrage einbringen. Hat jemand eine Idee, woran das liegen könnte? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.