SQLServerのクエリメタデータと動的管理オブジェクト
- 24-07-2022
- Toanngo92
- 0 Comments
テーブルやビューなどのオブジェクトのプロパティは、特別なシステムテーブルに保存されます。これらの属性はメタデータと呼ばれます。すべてのSQLオブジェクトにはメタデータがあります。これらのメタデータは、SQLServerの事前定義されたビューであるシステムビューで表示できます。
230を超える異なるシステムビューがあり、それらはユーザーが作成したデータベースに自動的に追加されます。これらのビューは、次のようにいくつかの異なるスキーマにグループ化されます。
Mục lục
システムカタログビュー
これらのビューには、SQLServerシステム内の目次に関する情報が含まれています。カタログは在庫やオブジェクトに似ています。これらのビューには、大量のメタデータが含まれています。以前のバージョンのSQLServerでは、このデータを取得するには、ユーザーはシステムテーブル、システムビュー、システム関数で大量のデータをクエリする必要がありました。バージョン2021以降、すべてのユーザーがカタログメタデータを簡単にクエリして検索できるようになりました。
例えば:
SELECT name,object_id,type,type_desc FROM sys.tables;
情報スキーマビュー
ユーザーはschemaview情報を照会し、システムメタデータを返すことができます。これらのビューは、サードパーティと通信するときに役立ちます。スキーマビュー情報により、基盤となるシステムテーブルが大幅に変更されても、アプリケーションは正しく機能します。
次の表は、SQLServer固有のシステムビューと情報スキーマビューのどちらをクエリするかを決定するのに役立ちます。
情報スキーマビュー | SQLServerシステムビュー |
それらは独自のスキーマINFORMATION_SCHEMAに格納されます | それらはsysスキーマに表示されます。 |
SQLServerの用語の代わりに標準の用語を使用します。たとえば、データベースの代わりにカタログを使用し、ユーザー定義のデータ型の代わりにドメインを使用します。 | これらはSQLServerの用語に従います。 |
SQLServer自体のカタログビューで使用できるすべてのメタデータが表示されない場合があります。たとえば、sys列にはIDおよび計算列のプロパティの属性が含まれますが、INFORMATION_SCHEMA列には含まれません。 | SQLServerカタログビューで使用可能なすべてのメタデータを表示できます。 |
例えば:
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES;
システムメタデータ機能
ビューに加えて、SQL Serverには、クエリのメタデータを返すいくつかの組み込み関数が用意されています。これらには、システム設定、セッション設定、およびその他のさまざまなオブジェクトに関する情報を返すことができるスカラー関数とテーブル値関数が含まれます。
SQL Serverメタデータ関数にはさまざまな形式があります。一部は、ERROR_NUMBER()などの標準のスカラー関数に似ているようです。他の関数は、@@VERSIONや$PARTITIONなどの特別なプレフィックスを使用します。
関数名 | 説明 | 例 |
OBJECT_ID(<object_name>) | データベースオブジェクトのIDを返します | OBJECT_ID('Sales.Customer') |
OBJECT_NAME(<object_id>) | オブジェクトIDの対応する名前を返します | OBJECT_NAME(197575742) |
@@エラー | 最後のステートメントが成功した場合は0を返し、それ以外の場合はエラーコードを返します | @@エラー |
SERVERPROPERTY(<プロパティ>) | サーバーの指定された値を返します。属性 | SERVERPROPERTY('照合') |
SELECTステートメントを使用してシステムメタデータを照会する例:
SELECT SERVERPROPERTY('EDITION') AS EditionName;
SQL Server 2019の新機能の1つは、メモリが最適化されたtempdbメタデータです。 SQL Serverチームは、最適化によってtempdbコードを拡張し、重いtempdbシステムのボトルネックとなる可能性のある一部のメタデータがメモリに依存できるようになり、RAMアクセス用に最適化されました。
大量のtempdbを使用する大容量の大規模な環境では、この種のボトルネックが発生することがよくあります。これを行う前に、tempdbの使用量を減らすための何らかのソリューションが必要になります。ただし、この新機能を使用すると、メタデータをメモリに残して最適にアクセスできるようにすることができます。
動的に管理されるオブジェクトクエリ
SQL Server 2006で最初に導入された動的管理ビュー(DMV)と動的管理機能(DMF)は、サーバー情報またはデータベース状態情報を返す動的管理オブジェクトです。 DMVとDMFは、まとめて動的管理対象オブジェクトと呼ばれます。これらはソフトウェア操作への洞察を提供し、SQL Serverインスタンスのステータスの確認、問題のトラブルシューティング、およびパフォーマンスの調整に使用できます。
DMVとDMFはどちらも表形式のデータを返しますが、違いは、DMFが少なくとも1つのパラメーターを取り、DMVがパラメーターを受け取らないことです。 SQL Server 2019は、200近くの動的管理オブジェクトを提供します。 DMVを照会するには、DMVのスコープに基づいて、サーバー状態の表示またはデータベース状態の表示のアクセス許可が必要になります。
DMVのカタログ化とクエリ
関数を使用してDMVを整理するのに役立つ規則のリスト
ネーミングParttern | 説明 |
db | データベース関連(リレーショナルデータベース) |
io | I/O統計 |
Os | SQLServerオペレーティングシステム情報 |
「トラン」 | トランザクション関連 |
'exec' | クエリ実行関連のメタデータ |
動的管理オブジェクトを照会するには、他のビューまたは複数値の表オブジェクトの場合と同じようにSELECTステートメントを使用します。例:以下のコードは、 sys.dm_exからの現在のユーザー接続のリストを返します。
sys.dm_exec_sessionsは、すべてのアクティブなユーザー接続と内部アクションに関する情報を表示するサーバースコープのDMVです。この情報には、ログインしたユーザー、現在のセッション設定、クライアントバージョン、クライアントプログラム名、クライアントログイン時間などが含まれます。sys.dm_exec_sessionsを使用して、セッション固有のセッションを識別し、そのセッションに関する情報を見つけることができます。
例えば:
SELECT session_id, login_time, program name FROM sys.dm_exec_sessions WHERE login_name='sa' and is_user_process = 1;
ここで、is_user_processは、セッションがシステムセッションであるかどうかを決定するビューの列です。値1は、それがシステムセッションではなく、ユーザーセッションであることを示します。 program_name列は、セッションを開始したクライアントプログラムの名前を定義します。login_time列は、セッションが開始された時刻を設定します。