监视动态服务器

1.监视的实用程序

  动态服务器提供几种方法来监视数据库服务器:

  • 系统监视接口(SMI)

  • onstat

  • oncheck

2. 系统监视接口

  系统监视接口(SMI)是一个对与动态服务器系统相关的管理信息进行只读访问的方法,可以:

  • 提供SQL 语句来访问共享内存结构

  • 为特定的用户会话提供配置文件信息

  • 允许动态服务器管理员轻松实现系统监控过程的自动化

  • 注意:SMI 并不是一个实用程序!

  SMI 提供有关动态服务器使用的共享内存数据结构内容的时间点信息。SMI 是基于sysmaster 数据库实现的。每个动态服务器实例都会创建一个 sysmaster 数据库。sysmaster 数据库包含其自身的系统目录表和一组虚拟表,这些虚拟表用作指向共享内存数据的指针。因为简化了监视功能的执行、便于重复使用,故SMI 非常有用。

3. sysmaster数据库

1700184714691

  • 初始化服务器时,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 数据库上不能使用 dbschemadbexport 实用程序。会收到以下的报错信息:

    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 -uonstat -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管理员参考