YashanDB 数据字典
本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E6%A6%82%E5%BF%B5%E6%89%8B%E5%86%8C/%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8.html
数据字典指 YashanDB 用于管理和显示数据库元数据信息的一组系统表、系统视图和动态视图。数据字典中存储了数据库中各级对象的元数据,在数据库运行的各个场景均可能被使用。
例如,YashanDB 客户端工具或用户程序通过 YashanDB 驱动程序连接数据库时,数据库会从用户相关的数据字典中查找尝试登录的用户的身份信息(用户名、密码、角色等),从权限相关数据字典中查看该用户是否具备创建会话的权限。
当用户执行一条 SQL 语句,例如:
Copied!
数据库的语法解析器会解析该语句,分析出该语句试图查询 employees 对象,获取 id、name 两个字段的值。此外,数据库还需要通过数据字典确认以下信息:
employees 对象是否存储,对象的类型是否是表或视图。
当前用户是否对 employees 对象拥有 select 或 read 权限。
id,name 是否为 employees 表的列。
id,name 列的数据类型、长度。
employees 表的 id 列是否有索引。
employees 表的统计信息。
# 系统表
系统表由 YashanDB 自动维护,通常在用户执行数据声明语言(DDL)时,会引起系统表的变更。系统表中记录的信息是数据库及数据库中对象的关键元数据信息,其表结构、字段含义与 YashanDB 内部机制紧密相关,因此,不建议数据库管理员自行修改系统表中的数据。
# 系统视图
系统视图是基于系统表创建的一组视图,将用户关心的元数据信息以便于理解的方式进行呈现。
下表是常用的三组系统视图:
# DBA 视图
以 DBA_开头的视图用于让拥有 DBA 权限的用户查看数据库中所有对象。
例如,查看数据库中所有用户的所有对象:
Copied!
# ALL 视图
以 ALL_开头的视图用于让所有用户查看自己拥有访问权限的数据库对象的元数据,即从该用户视角所能看到的所有对象的元数据。
ALL_视图可以看到的对象包括:
属于该用户模式的所有对象。
其他用户授权该用户访问的对象,包括其他用户将访问权限授权给 PUBLIC 的对象。
PUBLIC 模式下的所有对象。
例如,查看数据库中所有可以访问的对象:
Copied!
# USER 视图
以 USER_开头的视图用于让所有用户查看所有者为自己的对象元数据。
USER 视图返回的数据通常是 ALL 视图的子集,相对于 ALL 视图,USER 视图一般没有 OWNER 列。
# 动态视图
动态视图是将实例、数据库运行阶段等一些未记录在系统表中的关键元数据通过内部机制以表的方式呈现出来。
例如,使用 V$DATABASE 查看数据库状态:
Copied!
通过系统视图可以看到 VDATABASE是SYS.V_DATABASE 的一个公共同义词。
Copied!
从定义可以看到 V_DATABASE 对象。此处的 V$DATABASE 是一个动态视图,不作为记录在系统表中的模式对象,但是在实例启动、数据库加载过程中,会在内存中加载该对象的定义。
用户可以通过查询 V$DYNAMIC_VIEWS 视图查看所有动态视图。
数据字典缓存
在数据库运行过程中可能需要频繁访问数据字典,尤其是存储在系统表中的用户账号、模式对象相关的元数据,若每次访问时都只能通过扫描系统表获取数据,会严重影响系统的响应速度。
YashanDB 支持数据字典缓存,在内存中以特定的数据结构对其关键元数据进行缓存。根据其使用频率、数量、内存占用大小,数据字典缓存可分为常驻缓存和动态缓存。
# 常驻缓存
对于使用频率高、数据量相对较少、占用内存较小的系统对象,缓存加载后常驻内存,例如用户账户信息。
# 动态缓存
对于数量多、内存占用较大的对象,仅在使用时动态生成缓存,例如表的元数据。当缓存内存不足时,可能暂时淘汰部分暂不使用的对象缓存。
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/c0e402674c7a20527fe4dac14】。文章转载请联系作者。
评论