Hintergrund:
Ich habe zahlreiche Datenbanken mit einer großen Anzahl von VIEWs und einer extrem großen Anzahl von SYNONYMs. Zum Beispiel hat eine Datenbank mehr als 10.000 VIEWs und mehr als 2 Millionen SYNONYMs.
Allgemeines Problem:
Abfragen mit sys.objects
(und Systemtabellen im Allgemeinen) sind in der Regel langsam. Fragen, die sich sys.synonyms
beziehen , sind eisig. Ich frage mich, was ich tun kann, um die Leistung zu verbessern.
Spezifisches Beispiel
Dieser Befehl wird von einem Drittanbieter-Tool ausgeführt. Sowohl in der App als auch in SSMS ist es langsam:
exec sp_tables_rowset;2 NULL,NULL
Meine Frage :
Wie kann ich das schneller machen?
Was ich versucht habe :
Wenn ich SET STATISTICS IO ON
diese Ausgabe erhalte:
(2201538 Zeile (n) betroffen)
Tabelle 'sysobjrdb'. Scananzahl 1, logische Lesevorgänge 28, physische Lesevorgänge 0,
Vorauslesevorgänge 0, logische Lobs- Lesevorgänge 0, physikalische Lobs -Lesevorgänge 0 , Lobs-Vorauslesevorgänge 0. Tabelle 'sysschobjs'. Scanzählung 1, logische Lesevorgänge 53926, physische Lesevorgänge 0, Vorlesevorgänge 0, logische Vorlesevorgänge 0, physische Vorlesevorgänge 0, Vorlesevorgänge 0.
Ich konnte Statistiken zu den zugrunde liegenden Systemtabellen aktualisieren. Dies hat in meiner SQL 2008 R2 oder neueren Umgebungen funktioniert:
UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
Ich konnte auch Indexpflege durchführen. Dies funktioniert in SQL 2012 oder neueren Umgebungen. Zum Beispiel sp_help 'sys.sysschobjs'
identifiziert running die Indizes für die Tabelle und von dort aus erstelle ich diese Befehle und führe sie aus:
ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE
Das Aktualisieren von Statistiken und das Reorganisieren von Indizes hilft, aber nicht viel.