Jump to content

2K5 SP4 - Problem beim automatisierten Ermitteln der fragmentierten Indexe


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...