Metadaten und dynamisches Verwaltungsobjekt in SQL Server abfragen
- 24-07-2022
- Toanngo92
- 0 Comments
Eigenschaften eines Objekts wie einer Tabelle oder Ansicht werden in einer speziellen Systemtabelle gespeichert. Diese Attribute werden als Metadaten bezeichnet. Alle SQL-Objekte haben Metadaten. Diese Metadaten können von Systemansichten angezeigt werden, bei denen es sich um vordefinierte Ansichten von SQL Server handelt
Es gibt mehr als 230 verschiedene Systemansichten, die automatisch der vom Benutzer erstellten Datenbank hinzugefügt werden. Diese Ansichten sind wie folgt in mehrere unterschiedliche Schemas gruppiert.
Mục lục
Systemkatalogansichten
Diese Ansichten enthalten Informationen über das Inhaltsverzeichnis innerhalb des SQL Server-Systems. Kataloge ähneln Inventar oder Objekten. Diese Ansichten enthalten eine große Menge an Metadaten. In früheren Versionen von SQL Server mussten Benutzer große Datenmengen in Systemtabellen, Systemansichten und Systemfunktionen abfragen, um diese Daten zu erhalten. Ab Version 2021 können alle Benutzer die Katalogmetadaten zur Suche einfach abfragen.
Zum Beispiel:
SELECT name,object_id,type,type_desc FROM sys.tables;
Informationsschemaansichten
Benutzer können Schemaview-Informationen abfragen und Systemmetadaten zurückgeben. Diese Ansichten sind nützlich, wenn Sie mit Dritten kommunizieren. Die Informationen zu den Schemaansichten ermöglichen es Anwendungen, trotz erheblicher Änderungen an den zugrunde liegenden Systemtabellen ordnungsgemäß zu funktionieren.
Die folgende Tabelle hilft uns bei der Entscheidung, ob SQL Server-spezifische Systemansichten oder Informationsschemaansichten abgefragt werden sollen:
Informationsschemaansichten | SQL Server-Systemansichten |
Sie werden in ihrem eigenen Schema INFORMATION_SCHEMA gespeichert | Sie erscheinen im sys-Schema. |
Es verwendet Standardterminologie anstelle der SQL Server-Terminologie. Verwenden Sie beispielsweise einen Katalog anstelle einer Datenbank und eine Domäne anstelle eines benutzerdefinierten Datentyps. | Sie folgen der SQL Server-Terminologie. |
Sie zeigen möglicherweise nicht alle Metadaten an, die für die eigenen Katalogansichten von SQL Server verfügbar sind. Beispielsweise enthält die Spalte sys Attribute für die Identitäts- und berechneten Spalteneigenschaften, während dies bei den INFORMATION_SCHEMA-Spalten nicht der Fall ist. | Sie können alle Metadaten anzeigen, die für SQL Server-Katalogansichten verfügbar sind. |
Zum Beispiel:
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES;
System-Metadaten-Funktionen
Zusätzlich zu Ansichten stellt SQL Server mehrere integrierte Funktionen bereit, die Metadaten für eine Abfrage zurückgeben. Dazu gehören Skalar- und Tabellenwertfunktionen, die Informationen über Systemeinstellungen, Sitzungspräferenzen und eine Vielzahl anderer Objekte zurückgeben können.
SQL Server-Metadatenfunktionen liegen in einer Vielzahl von Formaten vor. Einige scheinen Standard-Skalarfunktionen zu ähneln, wie z. B. ERROR_NUMBER(). Andere Funktionen verwenden spezielle Präfixe wie @@VERSION oder $PARTITION.
Funktionsname | Bezeichnung | Beispiel |
OBJECT_ID(<Objektname>) | Gibt die ID des Datenbankobjekts zurück | OBJECT_ID('Verkauf.Kunde') |
OBJECT_NAME(<Objekt_ID>) | Gibt den entsprechenden Namen einer Objekt-ID zurück | OBJECT_NAME(197575742) |
@@ERROR | Gibt 0 zurück, wenn die letzte Anweisung erfolgreich war, ansonsten einen Fehlercode | @@ERROR |
SERVERPROPERTY(<Eigenschaft>) | Gibt den angegebenen Wert des server .-Attributs zurück | SERVERPROPERTY('Sortierung') |
Beispiel für die Verwendung der SELECT-Anweisung zum Abfragen von Systemmetadaten:
SELECT SERVERPROPERTY('EDITION') AS EditionName;
Eines der neuen Features in SQL Server 2019 sind speicheroptimierte tempdb-Metadaten. Das SQL Server-Team hat den tempdb-Code mit Optimierungen erweitert, sodass einige Metadaten, die auf schweren tempdb-Systemen einen Engpass darstellen können, jetzt auf Arbeitsspeicher angewiesen sind und für RAM-Zugriff optimiert sind.
Umgebungen mit hohem Volumen und großem Maßstab, die viel tempdb verwenden, treten häufig mit dieser Art von Engpass auf. Davor wäre eine Lösung erforderlich, um die tempdb-Nutzung zu reduzieren. Mit dieser neuen Funktion ist es jedoch möglich, dass Metadaten im Speicher verbleiben und optimal darauf zugegriffen werden kann.
Dynamisch verwaltete Objektabfrage
Dynamic Management Views (DMVs) und Dynamic Management Functions (DMFs), die erstmals von SQL Server 2006 eingeführt wurden, sind dynamische Verwaltungsobjekte, die Serverinformationen oder Datenbankstatusinformationen zurückgeben. DMVs und DMFs werden gemeinsam als dynamisch verwaltete Objekte bezeichnet. Sie bieten Einblick in den Softwarebetrieb und können verwendet werden, um den Status von SQL Server-Instanzen zu überprüfen, Probleme zu beheben und die Leistung zu optimieren.
Sowohl DMVs als auch DMFs geben tabellarische Daten zurück, aber der Unterschied besteht darin, dass das DMF mindestens einen Parameter akzeptiert, das DMV keine Parameter. SQL Server 2019 bietet fast 200 dynamische Verwaltungsobjekte. Um DMVs abzufragen, ist je nach Umfang der DMV die Berechtigung VIEW SERVER STATE oder VIEW DATABASE STATE erforderlich.
Katalogisieren und Abfragen von DMVs
Liste der Konventionen zur Organisation von DMVs mithilfe von Funktionen
Partern benennen | Bezeichnung |
db | Datenbankbezogen (Relationale Datenbank) |
io | E/A-Statistiken |
Os | Informationen zum SQL Server-Betriebssystem |
'Tran' | Transaktionsbezogen |
'exec' | Abfrageausführungsbezogene Metadaten |
Um ein dynamisches Verwaltungsobjekt abzufragen, verwenden Sie die SELECT-Anweisung wie bei jeder Ansicht oder jedem mehrwertigen Tabellenobjekt. Beispiel: Der folgende Code gibt eine Liste der aktuellen Benutzerverbindungen von sys.dm_ex zurück .
sys.dm_exec_sessions ist eine serverbezogene DMV, die Informationen zu allen aktiven Benutzerverbindungen und internen Aktionen anzeigt. Zu diesen Informationen gehören angemeldeter Benutzer, aktuelle Sitzungseinstellungen, Client-Version, Client-Programmname, Client-Anmeldezeit usw. sys.dm_exec_sessions kann verwendet werden, um eine sitzungsspezifische Sitzung zu identifizieren und Informationen zu dieser Sitzung zu finden.
Zum Beispiel:
SELECT session_id, login_time, program name FROM sys.dm_exec_sessions WHERE login_name='sa' and is_user_process = 1;
Hier ist is_user_process eine Spalte in der Ansicht, die bestimmt, ob die Sitzung eine Systemsitzung ist oder nicht. Ein Wert von 1 gibt an, dass es sich nicht um eine Systemsitzung, sondern um eine Benutzersitzung handelt. Die Spalte program_name definiert den Namen des Client-Programms, das die Sitzung initiiert hat. Die Spalte login_time legt die Zeit fest, zu der die Sitzung gestartet wurde.