1.监视的实用程序
动态服务器提供几种方法来监视数据库服务器:
-
系统监视接口(SMI)
-
onstat
-
oncheck
2. 系统监视接口
系统监视接口(SMI)是一个对与动态服务器系统相关的管理信息进行只读访问的方法,可以:
-
提供SQL 语句来访问共享内存结构
-
为特定的用户会话提供配置文件信息
-
允许动态服务器管理员轻松实现系统监控过程的自动化
-
注意:SMI 并不是一个实用程序!
SMI 提供有关动态服务器使用的共享内存数据结构内容的时间点信息。SMI 是基于sysmaster 数据库实现的。每个动态服务器实例都会创建一个 sysmaster 数据库。sysmaster 数据库包含其自身的系统目录表和一组虚拟表,这些虚拟表用作指向共享内存数据的指针。因为简化了监视功能的执行、便于重复使用,故SMI 非常有用。
3. sysmaster数据库
-
初始化服务器时,sysmaster 数据库会自动创建。
-
该数据库包含指向共享内存结构的数据字典信息。
sysmaster 数据库中保存着 SMI 用于提取诊断信息的各种表。每个动态服务器实例都会创建一个 sysmaster 数据库。该数据库是在初始化服务器时自动创建的。如果创建 sysmaster 数据库没有成功,则数据库服务器会在它每次变成online状态时重新尝试创建。
大部分的 SMI 表并不保存任何数据。而是由该表的数据词典结构指向在共享内存中的结构。
所有用户都有权查询 sysmaster 中的表。
3.1 SMI如何工作?
服务器识别syslocks 为 SMI 的表,并从共享内存而非缓冲池中读取。
当对一个常规表执行 SELECT 语句时,服务器会对该表读取数据字典信息,来查找其分区号和表的其他信息。如果它不在缓冲池中,就会从磁盘中访问相应的数据。
当对一个 SMI 表执行 SELECT 语句时,服务器对 SELECT 语句中列出的表读取数据字典信息。SMI 有一个特殊分区号(分区号中 dbspace 编号是 0)。当服务器检测到这个特殊分区号时,就知道要从共享内存中读取一组特定的数据集来满足该查询需求。
因为 SELECT 语句访问的是共享内存中的实时数据,所以两个 SMI 表之间的数据可能是不同步的。
3.2 SMI限制
使用 SMI 表应遵循下列限制:
-
不能对SMI 表加锁或使用隔离级别。因为这些表都是共享内存结构,传统的 SQL 加锁机制是无效的 (也不期望这么做)。
-
对于非永久性的 SMI 表,不允许使用INSERT、UPDATE和DELETE语句。
-
sysmaster 数据库上不能使用 dbschema 和 dbexport 实用程序。会收到以下的报错信息:
Database has pseudo tables - can’t build schema
- 在 SELECT 语句中使用 rowid 是不相关的,它会返回不一致的结果
3.3 sysmaster表与视图
表名 | 说明 |
---|---|
sysdatabases | 服务器中的数据库 |
systabnames | 服务器中的所有数据库的表 |
syslogs | 逻辑日志信息 |
sysdbspaces | Dbspace 信息 |
syschunks | Chunk信息 |
syslocks | 锁信息 |
sysvpprof | VP 信息 |
syssessions | 会话信息 |
syssesprof | 会话级概要信息 |
sysextents | extent信息 |
syschkio | Chunk的 I/O 统计 |
sysptprof | tblspace概要信息 |
sysprofile | 系统概要信息 |
sysmaster 数据库包括超过50个表。星瑞格只支持和文档化这些表中的少数一部分,以及一些使用这些表的视图。出于安全考虑,在查询中应只使用受支持的表和视图,因为不受支持的表可能会随版本发布(release)而发生改变。受支持的表和视图如下:
-
sysdatabases 表列出了数据库、所有者和数据库特征。
-
systabnames 表包含服务器中所有表的名字。要提取某个数据库中的所有表,运行:
SELECT tabname FROM systabnames WHERE dbsname = "db_name";
-
syslogs 视图包含有关逻辑日志的信息。可以使用 syslogs 确定日志是否需要被备份。如果 size = used ,则日志已满。
-
sysdbspaces 视图包含有关dbspace 的信息。
-
syschunks 视图包含服务器中的chunk信息。nfree 列显示了chunk中可用的页数。
-
syslocks 视图列出了所有活动锁。
-
sysvpprof 视图包含了所有活动的虚拟处理器(VP)。
-
syssessions 视图列出了每个会话的信息。
-
syssesprof 视图包含每个会话更详细的信息。
-
sysextents 视图列出了在服务器中分配了的extent。
-
syschkio 视图包含chunk 的 I/O 统计信息。
-
sysptprof 视图列出了在任意一个时间点上 tblspace 的有关信息。该视图中仅有目前正在使用的表。一旦最后一个用户关闭了该表,共享内存中此 tblspace 结构将被释放,随后任何概要统计数据都将丢失。
-
sysprofile 视图列出服务器里的一些特定事件,例如:磁盘读、磁盘写、回滚、检查点等等。每行包含一个概要事件及它的值。该视图的包含的一些列名展示如下:
列名 | 列名 | 列名 | 列名 |
---|---|---|---|
dskreads | iscommits | latchwts | llgpagewrites |
bufreads | isrollbacks | buffwts | llgwrites |
dskwrites | ovtbls | lockreqs | pagreads |
bufwrites | ovlock | lockwts | pagwrites |
isamtot | ovuser | ckptwts | flushes |
isopens | ovtrans | deadlks | dpra |
isstarts | compress | lktouts | rapgs_ |
isreads | fgwrites | numckpts | used |
iswrites | lruwrites | plgpagewrites | seqscans |
isrewrites | chunkwrites | plgwrites | btradata |
isdeletes | latchreqs | llgrecs |
sysmaster还包含一些其它的系统表:
表名 | 说明 |
---|---|
sysadtinfo | 审计配置信息 |
sysaudit | 审计事件掩码 |
sysconfig | 配置参数值 |
sysdri | 数据复制信息 |
sysseswts | 在各种对象上用户的等待时间 |
-
sysadtinfo 表包含数据库审计配置的信息。必须是sinodbms 用户才能从该表提取信息。
-
sysaudit 表包含每个已定义的审计掩码的十六进制表示。必须使用 onaudit 实用程序来列出、修改或添加审计掩码。必须是 sinodbms 用户才能从 sysaudit 表中提取信息。
-
sysconfig 表描述了配置参数的有效值、初始值和缺省值。
-
sysdri 表提供了数据库服务器数据复制状态的信息。
-
sysseswts 表提供了用户等待下列数据库对象所用时间的信息:
等待对象 | 等待对象 | 等待对象 | 等待对象 |
---|---|---|---|
unspecified | mt yield | lockfree mutex | ckpt mutex |
buffer | checkpoint | lockfree mutex | mutex |
lock | log I/O | deadlock mutex | mt ready |
asynchronous I/O | log copy | lrus mutex | mt yield x running |
mt yield 0 | condition | tblsp mutex | |
mt yield n | lock mutex | log mutex |
示例:
可以将syslocks 表和syssessions 表(实际上它们都是视图)连接起来,列出现有的锁、谁拥有它们、以及是否有会话在等待一个锁:
SELECT username, sid, waiter, dbsname, tabname,
rowidlk, keynum, type
FROM sysmaster:syslocks, sysmaster:syssessions
WHERE syssessions.sid = syslocks.owner
上述语句的输出类似于onstat -u 和onstat -k 命令的输出。
7. onstat实用程序
onstat 命令的语法如上所示。下面是一些常用的 onstat 命令的例子:
命令 | 说明 |
---|---|
onstat -m | 显示消息日志的最后 20行 |
onstat -d | 显示有关dbspaces和chunk的信息 |
onstat -l | 显示有关逻辑日志和物理日志的信息 |
onstat -g ath | 显示当前的活动线程 |
onstat -g glo | 显示虚拟处理器的信息 |
onstat -k | 显示锁的信息 |
onstat -g ses 16 | 显示会话号为16的会话信息 |
7.1 onstat 标头输出
动态服务器模式:
- On-Line联机
- Off-Line脱机
- Quiescent静默
- Shutdown关机
- Recovery恢复
- (CKPT REQ) 检查点被请求,但并未启动
- (CKPT) 检查点正在运行
任何 onstat 输出的第一行都是标头行。包含有关服务器的当前状态信息。以上是一个onstat 报告标头的示例以及一些常见的服务器模式。
7.2 onstat 选项
-
交互选项:
onstat -i -
多线程选项:
onstat -g sub_options -
列出最常用的选项:
onstat – -
显示实例的状态:
onstat - -
重复/刷新:
onstat -r value
有很多可用的onstat 选项。其中很多选项只在数据库技术支持在调试程序时使用。
交互选项
为了避免每次运行onstat 时连接到共享内存的开销,可以使用 onstat -i 一次性连接到共享内存。这个选项会显示一个提示符供您输入任何 onstat 选项(要去掉选项前边的连字符 -)。例如:
onstat -i
> u
也可以在交互模式中使用重复选项;例如:
> r 5
> u
这个示例会每 5秒执行一次 u 选项。要终止重复选项,按下 Control-c 。要退出交互选项,按下 q (quit)。
多线程选项
大部分的 onstat 选项会显示服务器的多线程子系统中的活动。这些是**-g** 选项后面跟一个三字母的选项(除非是在交互选项下运行的)。例如:
onstat -g ath
8. oncheck实用程序
-
oncheck 实用程序用于:
— 定位索引和数据页的损坏。
— 修复索引页和数据页损坏。
— 检查磁盘上的数据结构。
—打印包含磁盘上各种数据结构及其用法的信息的报告 -
oncheck 选项会在所处理的表或索引上放置一个共享锁。可以更新行,但表/索引不能被删除或更改。
-
在 oncheck 选项中添加一个 x 以放置共享锁。这样可以防止其他人在检查期间更新索引或表。
如**-pt** 或者 -pT )会在所处理的表上放置一个共享锁。这个动作会防止其他用户更新该表。对于大表,对每一个数据页和索引页的检查可能需要很长的时间。 -
oncheck -w 命令会检查和打印索引,而不会在相应的表上放共享锁。
-
oncheck 实用程序只能在服务器所在的计算机上检查;不支持网络上或分布式操作。
-c 和 -p 选项
oncheck 实用程序的语法和选项显示在下一页中。两个主要选项 -c 和 -p 都有自己的子选项。-c 选项指出应该被检查的内容。-p 选项指出应该被检查并打印到屏幕上的内容。
8.1 oncheck 语法
oncheck [-clist] [-plist] [-qny]
[{database[:[owner.]table[,frag_dbs] [{index | rowid]} |
tblspacenum logical_pagenum | chunknum physical_pagenum |
sbspace [partnum meta_pagenum]}]
以上就是oncheck 命令的语法。提供的选项依赖于所使用的命令。下面是常用命令的一些例子:
命令 | 说明 |
---|---|
oncheck -cc stores_demo | 检查stores_demo 数据库中的系统目录表,仅显示报错和警告信息 |
oncheck -pc stores_demo | 显示有关系统目录表的详细信息 |
oncheck -pe | 显示所有空间的extent分配信息 |
oncheck -pe dbspace4 | 仅显示 dbspace4 的extent分配信息 |
oncheck -pt stores_demo:customer | 显示有关customer表的详细信息 |
oncheck -pr | 显示服务器所用保留页的内容 |
oncheck -pP 1 53 | 显示chunk 1 第 53 页的内容 |
有关 onstat与oncheck选项的完整列表和描述,请参阅SinoDB管理员参考。