Kann ich die Leistung auf aufgeblähten Systemtabellen verbessern?


12

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.synonymsbeziehen , 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 ONdiese 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.


Autsch. Ich vermute, Sie machen einen durcheinandergebrachten Multi-Tenant-Typ, halten die Daten aller in denselben Tabellen und filtern sie mit Ansichten und verwenden Synonyme, um sie nach dem Basisobjekt zu benennen, in großem Maßstab?
Wie auch immer

2
Mehrmieter? Nicht wirklich. Ist es nicht. Ziemlich durcheinander, oder? FWIW, ich verstehe, dass für jeden Anwendungsbenutzer 5 SYNONYME für jede Tabelle erstellt werden. Ich Glückspilz.
Dave Mason

Erhöht das Entfernen von Berechtigungen für einige dieser Objekte die Leistung (sodass möglicherweise weniger Objekte verwendet werden können?). Ich weiß nicht, ob dies überhaupt eine Option auf Benutzerebene ist.
ConstantineK

Interessant wäre ein Ausführungsplan dazu. Vielleicht können Sie einen Eintrag vom SQL Sentry Plan Explorer auf answers.sqlperformance.com posten und einen Link dazu erstellen , es sei denn, es gibt eine Möglichkeit, dies auch hier einzubetten. Es würde mich interessieren, es
anzusehen

Antworten:


1

Wenn Sie dies noch nicht getan haben, können Sie die Leistung steigern, indem Sie die primäre Datendatei auf einen anderen Spindelsatz als die restlichen Daten verschieben (siehe Architektur von Dateien und Dateigruppen und SQL Server: Dateigruppe nur für Systemtabellen? ).


Ich denke, dass dies ein guter Rat ist, aber es würde sich negativ auf die Auswirkungen auswirken, wenn das E / A-Setup kein physischer Standardserver mit angeschlossenen Datenträgern ist, z. B. eine virtuelle Instanz mit SAN, oder SSD-Laufwerke die spürbaren Auswirkungen der Trennung von Primärdatendateien minimieren würden an einen anderen Ort, oder?
SheldonH

1
Wenn Sie die Kontrolle über die Hardware haben (dh Sie werden nicht von einem Drittanbieter gehostet), können Sie verschiedene Spindelsätze in einem SAN haben (z. B. zwei oder mehr separate RAID-10-Volumes). Wenn Sie SSDs verwenden (oder gehostet werden), gibt es keine Spindeln, und die E / A-Leistung wird hauptsächlich durch den Engpass zwischen Laufwerken und Motherboard (z. B. SATA-, RAID- oder NIC-Karte, Verkabelung, Router / Switches) begrenzt , SAN, SSDs Geschwindigkeit), so dass Sie in diesem Fall nichts gewinnen würden, wenn Sie die Dateien trennen.
Ziggy Crueltyfree Zeitgeister
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.