OceanBaseデータベースのシステムビューは、ディクショナリビューとパフォーマンスビューに分類されます。本記事では、主にディクショナリビューとパフォーマンスビューの内容および参照方法について説明します。
ディクショナリビューは、データベース内のメタデータ情報やシステム状態情報を表示するための仮想テーブルであり、テーブル、列、インデックス、ユーザー、ロール、権限などが含まれます。ディクショナリビューは通常、システムテーブル領域に格納され、読み取り専用であり、変更や削除はできません。
パフォーマンスビューは、データベースのメモリ構造に基づいて構築された仮想テーブルであり、データベースのパフォーマンス統計情報や監視情報を表示するために使用されます。主にパフォーマンスに関連しているため、動的パフォーマンスビューとも呼ばれます。パフォーマンスビューは内部のディスク構造やメモリ構造に関するデータを提供することができますが、それが主な目的ではありません。パフォーマンスビューも通常、システムテーブル領域に格納され、読み取り専用であり、変更や削除はできません。
ディクショナリビューとパフォーマンスビューは、データベースにおける非常に重要なメタデータ情報およびシステム状態情報の源泉であり、データベースの構造、状態、パフォーマンスを理解し、パフォーマンスチューニングや最適化を行うのに役立ちます。
sysテナントのビュー概要
OceanBaseデータベースのメタデータ情報やシステム状態情報を照会する必要がある場合、sys テナントのビューを照会することで取得できます。sys テナントはOceanBaseデータベース内の特殊なテナントであり、テーブルスペース、ユーザー、ロール、権限など、すべてのシステムレベルのオブジェクトとメタデータ情報を含んでいます。sys テナントには、データベース構造と状態情報を表示するための仮想テーブル、すなわちビューが多数存在します。以下では、OceanBaseデータベースの sys テナントにおけるビューを概説します。
ディクショナリビュー
sys テナントのディクショナリビューは、データベース内のメタデータ情報とシステム状態情報を表示するための仮想テーブルであり、これらのビューを照会することでデータベースの構造と状態情報を取得できます。 sys テナントのディクショナリビューには、oceanbase.CDB_* ビューと oceanbase.DBA_* ビューが含まれます。
oceanbase.CDB_*ビュー:この種のビューは、システムテナントからすべてのテナントのデータベースオブジェクト情報にアクセスするために使用されます。一般的に、テナントレベルのデータディクショナリビューはDBA_OB_*に対応します。oceanbase.DBA_*ビュー:この種のビューは、現在のテナント内のすべてのデータベースオブジェクト情報を取得するために使用されます。すべてのテナントから参照可能なビューですが、この種のビューには管理者権限が必要です。以下のビューは
sysテナントでのみ参照可能です:- oceanbase.DBA_OB_RESOURCE_POOLS
- oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY
- oceanbase.DBA_OB_SERVERS
- oceanbase.DBA_OB_SERVER_EVENT_HISTORY
- oceanbase.DBA_OB_SERVER_JOBS
- oceanbase.DBA_OB_TENANT_JOBS
- oceanbase.DBA_OB_UNITS
- oceanbase.DBA_OB_UNIT_CONFIGS
- oceanbase.DBA_OB_UNIT_JOBS
- oceanbase.DBA_OB_ZONES
パフォーマンスビュー
sys テナントのパフォーマンスビューは、データベースのパフォーマンス統計情報と監視情報を表示するための仮想テーブルであり、これらのビューを照会することでデータベースのパフォーマンス状態と監視情報を取得できます。 パフォーマンスビューの名前は GV$* または V$* で始まります。GV$ ビューを照会すると、すべての条件に合致する V$ ビューの情報が返されます。
GV$*: クラスタ全体の稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能で、グローバルな状態情報を提供します。 アクセス権限によって以下のように分類されます:sysテナントからアクセスした場合、すべてのテナントの情報が表示されます。- 通常のテナントからアクセスした場合、そのテナント自身の情報が表示されます。
V$*: クライアントが接続しているノードの稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続しているノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、GV$*ビューを使用してください。
ビューの照会
sys テナントにログインし、SHOW ステートメントを使用して該当するタイプのビューを確認できます。
oceanbase.CDB_*ビュー、oceanbase.DBA_*ビュー、およびパフォーマンスビューの例を以下に示します:obclient> USE oceanbase; obclient> SHOW TABLES;
MySQLテナントにおけるビューの概要
OceanBaseデータベースでは、MySQLテナント内のビューは仮想テーブルであり、1つまたは複数の基本テーブルの行と列を組み合わせて作成された論理テーブルです。ビューは基本テーブルの複雑さを隠蔽し、クエリ操作を簡素化するとともに、データアクセスの効率とセキュリティを向上させます。
データディクショナリビュー
MySQLテナント内のデータディクショナリビューには、information_schema.xxx ビューと mysql.xxx ビューが含まれます。
information_schema.xxxビュー:この種のビューは、MySQLテナント内のデータベースメタデータ(データベースやテーブルの名前、列のデータ型、アクセス権限など)へのアクセスを提供します。これらはデータディクショナリまたはシステムカタログと呼ばれます。mysql.xxxビュー:この種のビューには、データベースオブジェクトのメタデータを格納するデータディクショナリテーブルと、その他の操作目的で使用されるシステムテーブルが含まれます。また、一部のmysql.xxxプレフィックスを持つビューと互換性があります。例えば、mysql.help_xxxビューにはサーバー側のヘルプ情報が含まれ、mysql.time_zone_xxxにはタイムゾーン関連情報が記録され、mysql.userビューとmysql.dbビューにはユーザー権限関連情報が記録されています。
以下は、MySQLテナント内でよく使用されるデータディクショナリビューの例です:
information_schema.tables:データベース内のテーブル情報を表示します。テーブル名、テーブルタイプ、テーブルが属するデータベースなどが含まれます。
information_schema.columns:データベース内の列情報を表示します。列名、データ型、主キーであるかどうかなどが含まれます。
information_schema.indexes:データベース内のインデックス情報を表示します。インデックス名、インデックスタイプ、インデックスが属するテーブルなどが含まれます。
information_schema.views:データベース内のビュー情報を表示します。ビュー名、ビュー定義などが含まれます。
mysql.user:データベース内のユーザー情報を表示します。ユーザー名、パスワード、権限などが含まれます。
パフォーマンスビュー
MySQLテナント内のパフォーマンスビューの名前は GV$* または V$* で始まります。各 V$ ビューには、ほぼ対応する GV$ ビューが存在します。
GV$*: クラスタ全体の稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能で、グローバルな状態情報を提供します。 アクセス権限の違いにより、以下のように分類されます:sysテナントからアクセスした場合、すべてのテナントの情報が表示されます。- 通常のテナントからアクセスした場合、現在のテナントの情報が表示されます。
V$*: クライアントが接続するノードの稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続するノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、GV$*ビューを使用してください。
ビューの確認
MySQLテナントにログインし、SHOW ステートメントを使用して対応するタイプのビューを確認できます。
information_schema.*ビューを確認する例は以下のとおりです:obclient> USE information_schema; obclient> SHOW TABLES;mysql.*ビューを確認する例は以下のとおりです:obclient> USE mysql; obclient> SHOW TABLES;
Oracleテナントにおけるビューの概要
OceanBaseデータベースでは、OracleテナントはOracleデータベースで一般的に使用されるテーブル、ビュー、ストアドプロシージャなどのオブジェクトとの互換性を提供し、ユーザーの移行と利用を容易にします。Oracleテナントには通常、データベースのメタデータやオブジェクト情報を表示するためのシステムテーブルやビューも存在します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
ディクショナリビュー
Oracleテナントのディクショナリビューは、以下の表に示す情報で構成されています。
プレフィックス |
権限 |
その他の情報 |
|---|---|---|
| DBA_ | データベース管理者 | すべてのユーザーのテーブル、インデックス、ビュー、ストアドプロシージャなどを含みます。一部の DBA_ ビューには、管理者にとって有用な情報を含む追加の列があります。 |
| ALL_ | すべてのユーザー | ユーザーが所有するオブジェクトを含みますが、現在のユーザーがアクセス権限を持つオブジェクトのみが表示されます。 |
| USER_ | すべてのユーザー | 現在のユーザーのテーブル、インデックス、ビュー、ストアドプロシージャなどを含みます。プレフィックス USER_ を持つビューには通常、OWNER 列が含まれません。 |
DBA_プレフィックスを持つビューデータベース全体のすべての関連情報を表示します。
DBA_ビューは管理者権限でアクセスする必要があります。ALL_プレフィックスを持つビューユーザーがデータベース全体を概観するために使用します。ユーザーが所有するスキーマオブジェクトに加えて、公開または明示的にユーザーに付与されたスキーマオブジェクトも返します。
USER_プレフィックスを持つビュー一般のデータベースユーザーが最もよく使用するビューです。この種のビューには以下の特徴があります:
ユーザーのプライベート環境を参照し、ユーザーが作成したスキーマオブジェクト、ユーザーが付与した権限などのメタデータを含みます。
ユーザーに関連する行のみを表示し、
ALL_ビューの情報のサブセットを返します。他のビューと同じ列を持ちますが、列
OWNERは暗黙的に含まれます。
Oracleテナントでは、ディクショナリビューへのアクセスには、ユーザーごとに異なる権限が必要です:
SYSユーザー データベースのスーパーユーザーであり、最高レベルの権限を持ち、すべてのデータベースオブジェクトとメタデータ情報にアクセスできます。SYSユーザーは、すべての
DBA_、ALL_、USER_プレフィックスを持つビューにアクセスでき、すべてのユーザーのメタデータ情報を参照できます。一般ユーザー 自身のオブジェクトとメタデータ情報、および自身に付与されたオブジェクトとメタデータ情報にのみアクセスできます。つまり、自身の
USER_プレフィックスを持つビューとすべてのユーザーのALL_プレフィックスを持つビューにのみアクセスでき、DBA_プレフィックスを持つビューにはアクセスできません。
要するに、Oracleテナントでは、DBA_、ALL_、USER_ プレフィックスを持つビューはデータベースメタデータ情報にアクセスするためのビューです。SYSユーザーはすべてのビューにアクセスできますが、一般ユーザーは自身のビューとすべてのユーザーの共通ビューにのみアクセスできます。
パフォーマンスビュー
Oracleテナントのパフォーマンスビューには SYS.V$* ビューと SYS.GV$* ビューが含まれ、いずれもSYSデータベースに配置されています。クエリ時には SYS. プレフィックスを省略できます。
SYS.V$*: クライアントが接続するノードの稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続するノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、SYS.GV$*ビューを使用してください。SYS.GV$*: クラスタ全体の稼働状態とパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能で、グローバルな状態情報を提供します。 アクセス権限の違いにより、以下のように分類されます:- SYSテナントからアクセスする場合、すべてのテナントの情報が表示されます。
- 一般テナントからアクセスする場合、現在のテナントの情報が表示されます。
ビューのクエリ
SELECT ステートメントを使用して、対応するタイプのシステムビューを確認できます。
ビューのクエリ例は以下のとおりです:
obclient> SELECT * FROM DBA_VIEWS;
obclient> SELECT * FROM ALL_VIEWS;