达梦动态性能监视
动态性能表
早期的达梦数据库服务器基本上是一个黑盒子,用户用来观察系统内部运行状态的手段比较有限,不利于系统的性能调优和故障诊断,这个局面在新版本中得到了极大地改善。为了帮助程序员和数据库管理员了解达梦数据库内部的运行状态,达梦数据库7.0版本提供了大量的动态表,这些动态表记录了内部各个主要子系统的重要运行时信息。分析这些动态表提供的数据,可以很容易地定位性能瓶颈,并进行针对性的优化。
动态表的名字都以V$开头,它们可以象普通表一样参与任何合法的查询,但是动态表的维护与更新,都由系统自动完成,用户不能用SQL语句更新、插入或删除动态表中的数据。动态表的数据显然也不符合普通表的ACID特性,因为数据是系统自动生成,事实上,它们反应的是系统内部数据结构的状态。有经验的达梦数据库用户可以通过这个窗口了解达梦数据库系统的设计思想和运行逻辑,考察系统设计的优劣,对比同类产品的相关特性,并得出客观的结论。
动态表在系统第一次启动时由系统自动创建,可以查看SYSOBJECTS来获得全部动态表的清单:
SELECT DISTINCT NAME FROM SYSOBJECTS WHERE NAME LIKE ‘V$%’;
因为有些和表名同名的同义词,因此需要使用DISTINCT修饰来过滤重复的名字。
线程
达梦数据库是一个单进程多线程系统。和多进程系统相比,线程的切换代价更小,线程间的数据共享也更容易,实现起来也相对比较容易。V$THREADS记录了系统正在运行的线程,该表定义如下:
CREATE TABLE V$THREADS(
ID INTEGER,
NAME VARCHAR(32),
START_TIME DATETIME
);
表中每一行对应一个线程。所谓名字,其实是这个线程的工作函数在DM7.0源码中的名字。这些线程的功能大致按下表分类:
名称 |
说明 |
缺省数量 |
arch_schedule_thread |
归档调度线程,用于定时本地或远程归档 |
1 |
arch_work_thread |
归档的实际工作线程 |
2 |
nsvr_lsnr_thread |
服务监听线程 |
1 |
nsvr_schedule_thread |
主调度线程,用于触发后台检查点、时间相关的触发器等 |
1 |
ntsk_worker_thread |
工作线程序,完成SQL的解析与执行 |
4 |
os_io_thread |
异步IO线程 |
2 |
purg_thread |
回滚段清理线程 |