数据字典是数据库的一个重要组成部分,这是一组用于记录数据库信息的只读表。
平常意义上的数据字典是指静态数据字典信息,也即用户访问数据字典信息时,内容不会发生改变,静态字典表一般以 SYS 为前缀。数据存放在表文件中,关闭数据库实例后,数据不会被清空.数据库open状态下才可以查询。
达梦数据库中的动态性能视图能自动收集数据库中的一些活动信息,系统管理员根据这些信息可以了解数据库运行的基本情况,为数据库的维护和优化提供依据。数据字典中包含V$开头的是动态性能视图,其数据存放在内存中,动态变化,一旦实例被关闭,里面的数据就会被清空,重启实例后重新设置.数据库mount状态下可以查询。
达梦技术社区
https://eco.dameng.com
系统管理员可以通过查询动态性能视图更好的了解数据库的当前运行状态。
可以通过查询 V$DYNAMIC_TABLES 获 得所有的动态性能视图名称。
数据字典和动态视图对于巡检和运维,排查问题和了解系统架构来说是非常有用和高效的。
从数据库维护的角度来说,尤其对于初学者最重要也是最需要熟悉掌握的数据字典和动态视图有3个,分别是 SYSOBJECTS ,V$DYNAMIC_TABLES,和V$IFUN 。
第一个,SYSOBJECTS,记录系统中所有对象的信息。当在查询数据库中信息市,若需要用到数据库的基本架构、模块、组件和对象等信息,在不知道确认名字的情况下,可以使用SYSOBJECTS进行查询表名称,然后在进入到相应的表中查看具体信息。
第二个,V$DYNAMIC_TABLES视图,可以通过查询V$DYNAMIC_TABLES 获得所有的动态性能视图名称。
第三个,V$IFUN ,显示数据库提供的所有函数。比如,系统函数中最常用的查看参数,和配置参数的两类函数。可以使用如下语句查看系统函数的名称:
SELECT NAME FROM V$IFUN WHERE NAME LIKE '%SP_SET%VALUE';
SELECT NAME FROM V$IFUN WHERE NAME LIKE '%SF_GET%VALUE';
select name,type$,subtype$ from sysobjects where SUBtype$='PROC';
1. SYSOBJECTS,记录系统中所有对象的信息。
最有用的一个数据字典表,可以查询数据库中所有的对象
2. SYSINDEXES,记录系统中所有索引定义信息。
3. SYSCOLUMNS,记录系统中所有列定义的信息。
4. SYSCONS,记录系统中所有约束的信息。
5. SYSHPARTTABLEINFO,记录系统中分区表的信息。
6. SYSCOLINFOS,记录列的附加信息,例如是否虚拟列。
以上的几个数据字典表,可以查询到数据库中与数据表相关性最强的几个信息,如索引、列等。
7. SYSSTATS,记录系统中的统计信息。
8. SYSMSTATS,记录多维统计信息的内容。
统计信息对SQL语句的正确、高效的执行有着非常重要的作用。
9. SYSDUAL,为不带表名的查询而设,用户一般不需查看。
SYSDUAL是一个单行单列的表,为了某些特殊的SQL查询可以执行,而使用的。
10. SYSGRANTS,记录系统中权限信息。
在查看系统权限分配记录时非常有用。
11. SYSTEXTS 存放字典对象的文本信息。
12. SYSCONTEXTINDEXES,记录全文索引的信息。
13. SYSTABLECOMMENTS,记录表或视图的注释信息。
14. SYSCOLUMNCOMMENTS,记录列的注释信息。
可以查看表的文本和注释等信息
15. SYSUSERS,记录系统中用户信息。
16. SYSRESOURCES,记录用户使用系统资源的限制信息。
查看数据库系统中用户的相关信息
17. SYSOBJINFOS,记录对象的依赖信息。
18. SYSDEPENDENCIES,记录对象间的依赖关系。
查看数据库系统中对象的依赖信息
19. SYSINJECTHINT,记录已指定的 SQL 语句和对应的 HINT。
查看数据库系统中SQL和对应的HINT信息
动态管理视图的概要说明
在 DM达梦数据库中,动态视图提供的系统信息主要分为9个方面。
也可以将9个方面简单分为三类:
第一类,属于数据库系统的基本信息;
1、系统信息;2、存储信息;3、内存信息;
第二类,属于应用程序执行的相关信息,包含连接、会话、事务以及线程信息;
4、会话信息;5、事务信息;6、线程信息;
第三类,一些即时的,或者已经执行过的运行信息,包括缓存和历史,以及捕获信息。
7、缓存信息;8、历史模块;9、捕获信息;
以下就每个方面进行简要说明:
1. 系统信息
包括数据库版本、实例、统计信息、资源限制信息、进程信息、全局索引 IID 信息、 事件信息;
涉及的动态视图有,V$INSTANCE、V$RESOURCE_LIMIT、 V$PROCESS、V$IID、V$SYSSTAT 等。
2. 存储信息
包括数据库信息、表空间信息、数据文件信息、日志相关信息;
涉及的动态视图有, V$DATAFILE、V$DATABASE、V$TABLESPACE、$HUGE_TABLESPACE、V$RLOGFILE 等。
3. 内存管理信息
包括内存池使用情况、BUFFER 缓冲区信息、虚拟机信息、虚拟机栈帧信息;
涉及的动态视图有, V$MEM_POOL、V$VMS、V$STKFRM、V$BUFFERPOOL、V$BUFFER_LRU_FIRST、 V$BUFFER_UPD_FIRST、V$BUFFER_LRU_LAST、V$BUFFER_UPD_LAST、V$ RLOG_PKG、 V$COSTPARA 等。
4. 会话信息
包括连接信息、会话信息;
涉及的动态视图有, V$CONNECT、V$STMTS、V$SESSIONS 等。
5. 事务信息
包括所有事务信息、当前事务可见的事务信息、事务锁信息(TID 锁、对象锁)、回滚段信息、事务等待信息;
涉及的动态视图有, V$TRX、V$TRXWAIT、V$TRX_VIEW、V$LOCK、 V$PURGE 等。
6. 线程信息
包括所有活动线程信息、线程作业信息、线程锁信息、线程的资源等待信息;
涉及的动态视图有, V$THREADS、V$LATCHES 等。
7. 缓存信息
包括 SQL 语句缓存、执行计划缓存、结果集缓存、字典缓存信息、字典缓存中的对象信息、代价信息;
涉及的动态视图有, V$CACHEITEM、V$SQL_PLAN、V$CACHERS、 V$CACHESQL、V$DICT_CACHE_ITEM、V$DICT_CACHE 等。
8. 历史模块
包括 SQL 历史信息、SQL 执行节点历史信息、检查点历史信息、命令行历史信息、线程等待历史信息、死锁历史信息、回滚段历史信息、运行时错误历史信息、DMSQL 程序中执行 DDL 语句的历史信息、返回大数据量结果集历史信息、所有活动过线程的历史信息;
涉及的动态视图有, V$CKPT_HISTORY、V$CMD_HISTORY、V$DEADLOCK_HISTORY、V$PLSQL_DDL_HISTORY、V$PRE_RETURN_HISTORY、V$RUNTIME_ERR_HISTORY、V$WAIT_HISTORY、V$WTHRD_HISTORY、V$SQL_HISTORY、V$SQL_NODE_HISTORY、V$SQL_NODE_NAME 等。
9. 捕获信息
捕获信息涉及的视图为 V$CAPTURE。
动态视图使用示例:
在熟悉了DM达梦数据库的动态视图中的信息内容后,查看动态视图可以不单单只查询一个动态视图表,可以利用多个动态视图表之间的联系,进行查询得到更多想要的信息。
可以用一个动态视图的使用示例记性说明。例如,系统管理员如果要对一条 SQL 语句进行调优,需要知道每个执行节点花费了多少时间。
查询 V$SQL_NODE_NAME 可以知道执行节点的名字,
查询 V$SQL_NODE_HISTORY可以查询到每个执行节点的时间,
通过两个动态视图表的执行节点类型 TYPE$字段做等值连接。
示例:执行一条 SQL 语句,然后查询其执行节点所花费时间。
SELECT * FROM t1 WHERE c1 = (SELECT d1 FROM t2 WHERE c2 = d2);
假设其执行 ID(EXEC_ID)为 4,通过视图 V$SQL_NODE_NAME 与 V$SQL_NODE_HISTORY 视图查询结点执行时间:
SELECT N.NAME, TIME_USED, N_ENTER
FROM V$SQL_NODE_NAME N, V$SQL_NODE_HISTORY H
WHERE N.TYPE$ = H.TYPE$ AND EXEC_ID = 4;
结果为:
NAME TIME_USED N_ENTER
1 CSCN2 381 6
2 CSCN2 250 3
3 NLI2 52 14
4 SLCT2 102 8
5 HAGR2 11831 6
6 PRJT2 32 6
7 CSCN2 272 3
8 HI3 19309 9
9 PRJT2 29 6
10 NSET2 120 4
11 DLCK 23 2
根据结果可以看到执行计划中各执行节点花费的时间,进而对 SQL 语句进行分析和改写。