 ## 導讀 國內某頭部券商是國內排名前三的全國性大型綜合證券公司。作為證券行業領頭羊之一,該券商一直高度重 ...
OceanBase 資料庫的系統視圖分為字典視圖和性能視圖。其中字典視圖就是描述數據字典的視圖,OceanBase 資料庫的字典視圖包含 information_schema.* 視圖、oceanbase.CDB_* 視圖、oceanbase.DBA_*視圖以及 mysql.* 視圖。本文所涉及的版本主要為OceanBase4.1.0。
information_schema.* 視圖
該類視圖提供對 MySQL 租戶中資料庫元數據(包括:資料庫或表的名稱、列的數據類型或訪問許可權)的訪問。稱為數據字典或系統目錄。這個視圖類似MySQL資料庫的information_schema,我們在MySQL中經常使用processlist、tables等查看當前連接,資料庫表信息等,在oceanbase資料庫中同樣提供了這樣的介面,這對MySQL DBA是比較方便的。可以看到,processlist和tables的表結構和MySQL里的也是如出一轍。
MySQL [information_schema]> select * from processlist limit 3; +------------+------+------------------+--------------------+---------+-------+--------+-----------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +------------+------+------------------+--------------------+---------+-------+--------+-----------------------------------+ | 1111111570 | root | 10.10.97.94:49426 | bghg | Sleep | 1430 | SLEEP | NULL | | 1111119446 | root | 10.10.97.94:6786 | information_schema | Query | 0 | ACTIVE | select * from processlist limit 3 | | 1111111020 | root | 10.10.97.84:59088 | oceanbase | Sleep | 24743 | SLEEP | NULL | +------------+------+------------------+--------------------+---------+-------+--------+-----------------------------------+ 3 rows in set (0.01 sec)
MySQL [information_schema]> desc tables; +-----------------+--------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------------+------+-----+---------+-------+ | TABLE_CATALOG | varchar(3) | NO | | | | | TABLE_SCHEMA | varchar(128) | NO | | | | | TABLE_NAME | varchar(256) | NO | | | | | TABLE_TYPE | varchar(12) | NO | | | | | ENGINE | null | NO | | | | | VERSION | null | NO | | | | | ROW_FORMAT | null | NO | | | | | TABLE_ROWS | decimal(20,0) | NO | | | | | AVG_ROW_LENGTH | decimal(24,4) | NO | | | | | DATA_LENGTH | decimal(20,0) | NO | | | | | MAX_DATA_LENGTH | null | NO | | | | | INDEX_LENGTH | null | NO | | | | | DATA_FREE | null | NO | | | | | AUTO_INCREMENT | null | NO | | | | | CREATE_TIME | timestamp(6) | NO | | NULL | | | UPDATE_TIME | timestamp(6) | NO | | NULL | | | CHECK_TIME | null | NO | | | | | TABLE_COLLATION | varchar(128) | NO | | | | | CHECKSUM | bigint(0) unsigned | NO | | | | | CREATE_OPTIONS | null | NO | | | | | TABLE_COMMENT | varchar(4096) | NO | | | | +-----------------+--------------------+------+-----+---------+-------+ 21 rows in set (0.02 sec)
mysql.* 視圖
這類視圖其實也是放資料庫裡面元數據的的數據字典表,和MySQL類似,用的比較多的是mysql.user表,用來查資料庫里的用戶信息。
oceanbase.CDB_* 視圖
從命名為CDB可以看出,這個視圖是SYS租戶下才能看到,從整個集群層面,獲取全部租戶的一些數據字典信息。oceanbase.CDB_TABLES展示了所有租戶表的信息,oceanbase.CDB_OB_DATABASES展示所有租戶的資料庫元信息,oceanbase.CDB_TAB_PARTITIONS展示所有租戶的分區表的一級分區信息。
oceanbase.DBA_*視圖
該類視圖可用於獲取整個資料庫中的所有相關信息。該類視圖需要使用管理員許可權訪問。對應於oceanbase.CDB_* 視圖,oceanbase.DBA_*視圖更多的是用來描述租戶級別的數據字典信息。比如oceanbase.DBA_OB_DATABASES展示的是租戶級別的資料庫元信息,對應於oceanbase.CDB_OB_DATABASES。oceanbase.DBA_TAB_PARTITIONS描述的是在當前租戶下當前用戶可訪問的多級分區信息、分區存儲參數和分區統計信息。
此外,也有部分oceanbase.DBA_*視圖只能在SYS租戶下才能訪問到,這些主要都是集群層面的監控。oceanbase.DBA_OB_TENANTS,展示所有租戶的基本信息(普通用戶訪問時只展示本租戶的信息)。oceanbase.DBA_OB_SERVERS展示所有 OBServer 節點的信息,oceanbase.DBA_OB_ZONES展示所有 Zone 的信息。
值得註意的是oceanbase.DBA_*視圖和大部分oceanbase.CDB_* 視圖在4.0.0以下的版本是沒有的。值得一提的是,3.x.x版本的oceanbase提供了很多__all_*視圖,__all_server和oceanbase.DBA_OB_SERVERS功能類似,__all_telnet和oceanbase.DBA_OB_TENANTS功能類似。但是在OceanBase的官方文檔中,並沒有找到對__all_*視圖的相關描述,白鱔老師也在他的文章中吐槽過ob的元數據藏得太深:https://mp.weixin.qq.com/s/gyxABzj7OY8o5vH-Kf0t2w 。這也是ob後續需要優化的一個方向吧。
obclient> desc __all_server; +-----------------------+--------------+------+-----+----------------------+--------------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+--------------+------+-----+----------------------+--------------------------------+ | gmt_create | timestamp(6) | YES | | CURRENT_TIMESTAMP(6) | | | gmt_modified | timestamp(6) | YES | | CURRENT_TIMESTAMP(6) | ON UPDATE CURRENT_TIMESTAMP(6) | | svr_ip | varchar(46) | NO | PRI | NULL | | | svr_port | bigint(20) | NO | PRI | NULL | | | id | bigint(20) | NO | | NULL | | | zone | varchar(128) | NO | | NULL | | | inner_port | bigint(20) | NO | | NULL | | | with_rootserver | bigint(20) | NO | | NULL | | | status | varchar(64) | NO | | NULL | | | block_migrate_in_time | bigint(20) | NO | | NULL | | | build_version | varchar(256) | NO | | NULL | | | stop_time | bigint(20) | NO | | 0 | | | start_service_time | bigint(20) | NO | | NULL | | | first_sessid | bigint(20) | NO | | 0 | | | with_partition | bigint(20) | NO | | 0 | | | last_offline_time | bigint(20) | NO | | 0 | | +-----------------------+--------------+------+-----+----------------------+--------------------------------+ 16 rows in set (0.01 sec)
obclient> select * from __all_tenant limit 1 \G *************************** 1. row *************************** gmt_create: 2022-07-19 10:57:45.156936 gmt_modified: 2022-07-19 10:57:45.156936 tenant_id: 1 tenant_name: sys replica_num: -1 zone_list: zone1;zone2;zone3 primary_zone: zone1;zone2,zone3 locked: 0 collation_type: 0 info: system tenant read_only: 0 rewrite_merge_version: 0 locality: FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 logonly_replica_num: 0 previous_locality: storage_format_version: 0 storage_format_work_version: 0 default_tablegroup_id: -1 compatibility_mode: 0 drop_tenant_time: -1 status: TENANT_STATUS_NORMAL in_recyclebin: 0 1 row in set (0.00 sec)