对 IDS 数据库进行调优和配置是一个复杂的过程,有时候会让经验不足的 DBA 感到棘手。但是,IDS 中有许多工具、功能和应用程序可以简化这个任务。
本教程将介绍 IDS 11 提供的监视工具,并讲解如何使用这些工具监视数据库系统的运行状态。在这个教程中,您将:
onstat 和 oncheck 实用程序监视系统学习如何监视 IBM® Informix® Dynamic Server(IDS)的数据库服务器活动。研究用来监视、诊断问题和操作 IDS 数据的各种工具。
在学习完本教程之后,您应该能够:
onstat 实用程序oncheck 实用程序一、自动监视和纠正操作
可以使用管理 API、调度程序和 sysadmin 数据库中存储的信息来管理自动维护、监视和管理任务。Dynamic Server 的这些组件可以简化复杂系统中的信息收集和服务器维护。
SQL 管理 API 让管理员能够使用各种 SQL 命令执行远程管理,比如管理空间、管理配置、运行日常作业和系统检验。
可以使用 EXECUTE FUNCTION 语句调用内置的 admin( ) 或 task( ) 函数来执行管理任务,这相当于执行 Dynamic Server 的各个管理实用程序。
在 EXECUTE FUNCTION 语句中,参数列表中的值指定实用程序及其命令行参数。例如,下面的 SQL 语句(它相当于 oncheck -ce 命令)要求数据库服务器检查区段(extent):
EXECUTE FUNCTION admin('check extents'); |
sysadmin 数据库中的一些表存储任务属性。使用任务属性(而不是配置参数)来定义调度程序收集的信息以及调度程序运行的语句。
sysadmin 数据库还包含:
task() 函数admin() 函数表 | 描述 |
PH_TASK | 包含每个任务执行时间和执行方式的相关信息。 |
PH_ALERT | 包含必须监视的错误、警告或信息性消息的列表。 |
PH_GROUP | 包含组名的列表。每个任务都是一个组的成员。 |
PH_RUN | 列出任务,并包含数据库服务器如何和什么时候执行每个任务的相关信息。 |
PH_THRESHOLD | 包含定义的阈值的列表。如果满足一个阈值,任务可以决定采用另一个操作,比如在 PH_ALERT 表中插入一个警告。 |
调度程序让数据库服务器能够在预定义的时间执行数据库函数和过程,也可以由服务器自己决定执行的时间。通过使用一个基于 SQL 的管理系统和一组任务,这些函数和过程可以收集信息并监视和调整服务器。
调度程序管理和执行那些安排好的维护、监视和管理任务。可以使用这个工具监视服务器的活动(例如,空间管理,或者以指定的时间间隔自动地备份上一次日志备份之后的所有新日志数据),还可以创建自动运行的纠正操作。
调度程序管理:
一组任务属性控制着调度程序,这些属性定义需要收集什么信息或执行什么操作。任务属性存储 sysadmin 数据库的 ph_task 表中。
这个表中的每行都是一个单独的任务,每列都是一个任务属性。任务属性指定的内容包括什么时候运行 SQL 语句、存储过程或函数,以及如何处理这个任务等等。
例如,可以定义一个任务,在每天的 9:00:00 到 19:00:00 之间每小时检查空闲的日志空间。
只使用任务属性(而不是配置参数)来定义调度程序要收集什么信息或执行什么操作。调度程序在预定义的时间执行任务,也可以根据数据库服务器的需要决定执行的时间。
任务 | 描述 |
mon_command_history | 清空命令历史表。 |
mon_config | 保存 ONCONFIG 文件中的任何修改。 |
mon_config_startup | 在每次服务器启动时保存 ONCONFIG 文件。 |
mon_vps | 收集虚拟处理器信息。 |
mon_checkpoint | 保存关于检查点的信息。 |
mon_table_profile | 保存表的配置信息,包括表上发生的更新、插入和删除操作的总数。 |
mon_table_names | 保存表名以及表的创建时间。 |
mon_users | 保存每个用户的配置信息。 |
check_backup | 检查备份操作是否已经运行。 |
可以修改这些任务并设置更多的任务。
要想设置任务,首先需要进行计划。需要掌握以下信息:
如下面的示例所示,可以使用 SQL 在 ph_task 表中插入一行。还可以包含显示在表列中的值。
清单 1 中的示例创建一个称为 mon_chunkio 的表,并使用一个存储过程收集和存储数据。这个任务指示数据库服务器每 5 分钟执行一次存储过程 chunkio 来收集数据。使用默认的调度策略(例如,在每个工作日的 8:00 A.M. 到 5:00 P.M.),但是 7 天之后数据过期并被删除。
INSERT INTO ph_task
(
tk_description,
tk_result_table,
tk_create,
tk_execute,
tk_frequency,
tk_delete
)
VALUES
(
"Chunk I/O counts and space usage",
"mon_chunkio",
"create table mon_chunkio (ID integer, chunknum smallint,
free integer, size integer, reads integer, pagereads integer,
writes integer, pageswritten integer)",
"chunkio",
"0 0:05:00",
"7 0:00:00"
);
|
传感器是专门用来收集和保存数据的任务。创建传感器的方法就是在 ph_task 表中插入一行,但是要提供一些额外信息。
要想设置新的传感器,首先需要进行计划。需要掌握以下信息:
清单 2 中的示例显示了一个传感器的代码,它收集关于正在使用的内存量的信息,并将这些信息存储在 mon_memory_system 表中。如果这个表不存在,就创建它。这个任务每 30 分钟运行一次,并删除 mon_memory_system 表中超过 30 天的数据。
清单 2. 收集关于正在使用的内存量的信息,并将这些数据存储在 mon_memory_system 表中
INSERT INTO ph_task
(tk_name, tk_type, tk_group, tk_description, tk_result_table, tk_create,
tk_execute, tk_stop_time, tk_start_time, tk_frequency, tk_delete )
VALUES
("mon_memory_system",
"SENSOR",
"MEMORY",
"Server memory consumption",
"mon_memory_system",
"create table mon_memory_system (ID integer, class smallint, size int8,
used int8, free int8 )",
"insert into mon_memory_system select $DATA_SEQ_ID, seg_class, seg_size,
seg_blkused, seg_blkfree FROM sysmaster:sysseglst",
NULL,
NULL,
INTERVAL ( 30 ) MINUTE TO MINUTE,
INTERVAL ( 30 ) DAY TO DAY);
|
修改任务的方法是修改 sysadmin 数据库中以 ph_ 开头的表中的行。
进入 sysadmin 数据库中的 ph_task 表或需要修改的其他表。手工修改任务信息。
sysadmin 数据库中的 command_history 表包含在这个数据库服务器上执行过的 SQL 管理 API 命令的历史信息。
二、系统监视接口
系统监视接口(system-monitoring interface,SMI)表是由数据库服务器管理的特殊的表,其中包含关于数据库服务器状态的动态信息。可以对这些表使用 SELECT 语句,从而了解关于数据库服务器的几乎任何信息。
在首次运行数据库服务器时,它运行一个称为 buildsmi 的脚本(这个脚本在 $INFORMIXDIR/etc 目录中)。这个脚本构建支持 SMI 的 sysmaster 数据库和表。数据库服务器需要大约 1750 个空闲的逻辑日志空间页面来构建 sysmaster 数据库。
如果收到一个错误消息,指示您运行 buildsmi 脚本,那么可能是数据库服务器在构建 SMI 数据库、表和视图时发生了问题。执行 buildsmi 脚本时,会删除并重新创建现有的 sysmaster 数据库。
OnBar 在 sysutils 数据库中存储它执行的每个备份/恢复操作的相关信息。每个 dbspace 和逻辑日志的备份信息也存储在这里。在执行热恢复时,OnBar 会使用这些表。
在首次初始化数据库服务器时,它运行一个称为 bldutil.sh(在 UNIX® 上)或 bldutil.bat(在 Windows® 上)的脚本。这个脚本构建 sysutils 数据库。如果脚本运行失败,数据库服务器会在 tmp 目录中创建一个输出文件。输出文件是 bldutil.process_id(在 UNIX 上)或 bldutil.out(在 Windows 上)。这个输出文件中的消息说明在脚本执行期间发生了什么错误。
sysmaster 数据库是一个 “伪数据库”。这意味着它的大多数表不是磁盘上的普通表,而是指向 IDS 引擎中的共享内存结构的指针。sysmaster 数据库包含的表超过 120 个。Informix Dynamic Server Administrators Guide 中只描述了其中一部分表。其他表没有文档记录,这意味着它们是供内部使用的。
IDS 11 中引入了下面这些新的表。对于其他许多 sysmaster 表,可以在手册中找到更多的详细信息。
表 | 描述 |
syscheckpoint | 关于检查点和相关统计数据的信息。 |
systcblst | 修改了现有的表,增加了等待统计数据。 |
sysenvses | 查看 Informix 的会话环境变量。 |
sysenv | 查看服务器环境变量。 |
sysonlinelog | 查看服务器的 online.log。 |
sysscblst | 经过改进,可以查看会话使用的内存。 |
sysnetworkio | 查看数据库会话产生的网络 I/O。 |
sysdual | Oracle 兼容性特性。 |
syssqlcacheprof | 显示每个 SQL 缓存的配置信息。 |
syssqltrace | 系统上最近执行的 SQL 语句。 |
syssqltrace_itr | SQL 语句的迭代器的列表。 |
syssqltrace_info | 关于 SQL 跟踪的一般信息。 |
sysnetglobal | 全局网络信息。 |
sysnetclienttype | 基于客户机类型的网络信息。 |
sysbaract_log | OnBar 活动日志文件。 |
sysrstcb | 经过改进,可以查看 I/O 和锁等待信息。 |
SMI 由数据库服务器自动维护的表和伪表组成。尽管 SMI 表在用户看起来像是表,但是它们并不像普通表那样存储在磁盘上。相反,数据库服务器在需要时根据共享内存中当前的信息在内存中构建这些表。在您查询 SMI 表时,数据库服务器从这些共享内存结构读取信息。因为数据库服务器不断更新共享内存中的数据,所以可以通过 SMI 提供的信息了解数据库服务器的当前状态。
SMI 表提供以下方面的相关信息:
随着用户访问和修改数据库服务器管理的数据库,SMI 表中的数据会动态地改变。
任何用户都可以使用 SQL SELECT 语句查询 SMI 表,但是标准用户不能执行 SELECT 之外的其他语句。尝试这么做会导致权限错误。管理员可以执行 SELECT 之外的其他语句,但是这些语句的结果是无法预测的。
Dynamic Server 提供 sysadtinfo 和 sysaudit 表。只有 UNIX 上的用户 informix 或者 Windows 上的 Informix-Admin 组成员可以查询 sysadtinfo 和 sysaudit 表。
不能在 sysmaster 数据库中的任何表上使用 dbschema 或 dbexport。如果这样做,数据库服务器会生成下面的错误消息:
Database has pseudo tables - can't build schema
只要可以对普通表使用 SELECT 语句(DBAccess、SPL 例程、ESQL/C 等),都可以对 SMI 表使用 SELECT 语句,但是有一个限制:在查询 SMI 表时,不能引用 rowid。使用 rowid 的 SELECT 语句不会返回错误,但结果是无法预测的。
所有标准的 SQL 语法对 SMI 表都是有效的,包括表之间的连接、输出的排序等等。例如,如果希望连接一个 SMI 表和一个非 SMI 表,那么用以下标准语法命名 SMI 表:
sysmaster[@dbservername]:[owner.]tablename
目标:列出打开数据库的用户,以及他们用来连接数据库的工作站。
onstat -u 实用程序会报告哪些用户连接到了这个服务器,但是并不报告他们正在使用哪个数据库以及工作站。Onstat -g ses 会报告用户和工作站,但是不报告数据库。Onstat -g sql 会报告会话 ID 和数据库,但是不报告用户名和工作站。QUERY SELECT sysdatabases.name database, syssessions.username, syssessions.hostname, syslocks.owner sid FROM syslocks, sysdatabases, outer syssessions WHERE syslocks.tabname = "sysdatabases" AND syslocks.rowidlk = sysdatabases.rowid AND syslocks.owner = syssessions.sid; OUTPUT database stores_demo username informix hostname istation1 sid 27 database sysmaster username informix hostname istation1 sid 29 |
三、onstat 实用程序
onstat 实用程序提供了一种从命令行监视数据库服务器共享内存的方法。onstat 实用程序从共享内存读取数据,并报告执行这个命令期间的精确统计数据。也就是说,onstat 提供那些在处理期间动态改变的信息,包括缓冲区、锁、索引和用户方面的变化。
onstat 输出的标题表示数据库服务器的状态。当数据库服务器被阻塞时,onstat 在标题行后面显示下一行:所有 onstat 输出都包含一个标题。onstat - 选项只显示输出标题,这可以用来检查数据库服务器模式。标题采用以下形式:
Version--Mode (Type)--(Checkpnt)--Up Uptime--Sh_mem Kbytes
>>-onstat------------------------------------------------------->
.-----------------------------. V (1)
>--+-+-----------------+----+-------------------------+-+------+->
'-filename_source-' +- -a---------------------+ +- -b---------------------+
+- -B---------------------+ +- -c---------------------+ +-
-C---------------------+ +- -d---------------------+ +-
-D---------------------+ +- -f---------------------+ +-
-F---------------------+ +- -g--Monitoring options-+ +-
-G---------------------+ +- -i---------------------+ +-
-k---------------------+ +- -K---------------------+ +-
-l---------------------+ +- -m---------------------+ +-
-o--+---------------+--+ '-filename_dest-' +- -O---------------------+ +-
-p---------------------+ +- -P---------------------+ +-
-r--+---------+--------+ '-seconds-' +- -R---------------------+ +-
-s---------------------+ +- -t---------------------+ +-
-T---------------------+ +- -u---------------------+ +-
-x---------------------+ +- -X---------------------+ '-
-z---------------------' +-
---------------------------------------------------------+ '-
--------------------------------------------------------- |
注意:每个选项只能出现一次。在一个 onstat 命令调用中可以指定多个选项。
元素 | 用途 |
- | 显示输出标题。 |
-- | 显示所有onstat选项及其功能。 |
-a | 解释为onstat -cuskbtdlp;以这个次序显示输出。 |
-b | 显示关于当前使用的缓存区的信息,包括缓冲池中的常驻页面数量。 |
-B | 获得关于所有数据库服务器缓冲区(而不只是当前使用的缓存区)的信息。参见-b。 |
-c | 显示 ONCONFIG 文件:* $INFORMIXDIR/etc/ $ONCONFIG(在 UNIX 上) * %INFORMIXDIR%\etc\ %ONCONFIG% (在 Windows 上)。 |
-C | 输出 B-tree 扫描器信息。 |
-d | 显示每个存储空间中的块的信息。 |
-D | 显示每个 dbspace 中前 50 个块的页面读和页面写信息。 |
-f | 列出当前受 DATASKIP 特性影响的 dbspace。 |
-F | 显示将页面刷新到磁盘的每种写操作类型的计数。 |
-g | 提供监视选项。 |
-G | 输出全局事务 ID。 |
-i | 使onstat实用 |
-j | 显示活动的 onpload 进程的交互状态。 |
-k | 显示关于活动的锁的信息。 |
-l | 显示关于物理和逻辑页面的信息,包括页面地址。 |
-m | 显示数据库服务器消息日志中最近的 20 行。 |
-o | 将共享内存段的拷贝保存到文件。 |
-O | 显示关于 Optical Subsystem 内存缓存和 blobspace 缓冲区的信息。 |
-p | 显示配置计数。 |
-P | 显示所有分区的分区号,以及属于这个分区的缓冲池页面的拆分情况。 |
-r | 以指定的时间间隔重复执行附带的onstat选项。默认值是 5 秒。 |
-R | 显示关于 LRU 队列、FLRU 队列和 MLRU 队列的详细信息。 |
-s | 显示一般的锁存器信息。 |
-t | 显示活动的 tblspace 的 tblspace 信息,包括驻留状态。 |
-T | 显示所有 tblspace 的 tblspace 信息。 |
-u | 输出用户活动的配置。 |
-x | 显示关于事务的信息。 |
-X | 获得关于正在共享和等待缓冲区的线程的精确信息。 |
-z | 将配置计数设置为零。 |
filename_dest | 为共享内存段的拷贝指定目标文件。 |
filename_source | 指定onstat对于请求的信息读取的信息源文件。 |
监视选项 | 指定要使用的onstat -g监视选项。 |
秒数 | 指定每次执行onstat -r命令之间间隔的秒数。 |
下面的 onstat -g 选项只用于支持和调试。在每个 onstat -g 命令中只能包含其中一个选项。更多信息参见 IBM Informix Performance Guide。
onstat -g 选项 | 主题或功能 |
-g act | 活动的线程。输出示例见onstat -g act选项。 |
-g afr pool name session id | 显示为指定的会话或共享内存池分配的内存段。每个会话获得一个共享内存池。获得池名称的方法见-mem选项。输出示例见onstat -g afr pool name session id选项。 |
-g all | 输出所有多线程信息。 |
-g ath | 输出所有线程。sqlmain 线程代表客户机会话。rstcb 值对应于onstat -u命令的用户字段。输出示例见onstat -g ath选项。关于使用onstat -g ath输出 Enterprise Replication 线程的信息,参见 IBM Informix Dynamic Server Enterprise Replication Guide。 |
-g cat [modifier] | 输出 Enterprise Replication 全局编目中的信息。全局编目包含企业中每个服务器上定义的服务器、复制和复制集的汇总信息。更多信息和输出示例见onstat -g cat选项。 |
-g cac agg | 显示缓存中当前的用户定义的聚合定义。 |
-g cac stmt | 显示 SQL 语句缓存的内容。输出与-g ssc语句相同。 |
-g con | 输出条件和等待者。输出示例见onstat -g con选项。 |
-g ddr | 输出 Enterprise Replication 数据库日志读取 |
-g dic table | 如果不带任何参数,就会为共享内存词典中缓存的每个表输出一行信息。如果提供一个表名作为参数,就输出这个表的内部 SQL 信息。更多信息见 IBM Informix Performance Guide。输出示例见onstat -g dic table选项。 |
-g dis | 输出数据库服务器列表及其状态,以及关于每个数据库服务器、INFORMIXDIR、sqlhosts 文件、ONCONFIG 文件和主机名的信息。输出示例见onstat -g dis选项。 |
-g dll | 输出已经装载的动态库的列表。输出示例见onstat -g dis选项。 |
-g dri | 输出数据复制信息。参见 IBM Informix 管理员指南中关于监视高可用性数据复制状态(High-Availability Data-Replication)的内容。输出示例见onstat -g dri选项。 |
-g dsc | 输出数据分布缓存信息。输出示例见onstat -g dsc选项。 |
-g dss [modifier] | 输出关于各个数据同步线程的活动和用户定义数据类型的详细统计信息。更多信息和输出示例见onstat -g dss选项。 |
-g dtc | 输出关于删除表清理器的统计数据,删除表清理器会从删除表中删除不再需要的行。更多信息和输出示例见onstat -g dtc选项。 |
-g env | 输出数据库服务器当前使用的环境变量值。更多信息见onstat -g env选项。 |
-g ffr pool name session id | 输出一个共享内存池的空闲段。输出示例见onstat -g ffr pool name session id选项。 |
-g glo | 输出全局多线程信息。这些信息包括虚拟处理器的 CPU 使用信息、会话的总数和其他多线程全局计数器。在 Windows 上,虚拟处理器就是操作系统线程。'pid' 字段下显示的值是线程 id,而不是进程 id(Windows)。输出示例见onstat -g glo选项。 |
-g grp [modifier] | 输出 Enterprise Replication 分组 |
-g his | 输出关于 SQLTrace 配置参数的信息。 |
-g imc | 输出关于连接到数据库服务器的 MaxConnect 实例的信息。如果 MaxConnect 没有连接到数据库服务器,那么这个命令显示 “No MaxConnect servers are connected”。 |
-g ioa | 输出来自 -g ioq和-g iov的组合信息。输出示例见onstat -g ioa选项。 |
-g iob | 输出大缓冲区使用信息汇总。输出示例见onstat -g iob选项。 |
-g iof | 按照块或文件,输出异步 I/O 统计数据。这个选项与-D选项相似,但是它还显示非块、临时和分类工作文件的信息。输出示例见onstat -g iof选项。 |
-g iog | 输出 AIO 全局信息。输出示例见onstat -g iog选项。 |
-g ioq queue name | 输出特定队列中未完成的 I/O 操作。如果给出 gfd 或 kaio 队列名,就为每个 CPU VP 显示一个队列。如果省略队列名,就显示所有队列的 I/O 统计数据。输出示例见onstat -g ioq queue name选项。 |
-g iov | 按照虚拟处理器,输出异步 I/O 统计数据。输出示例见onstat -g iov选项。 |
-g ipl | 输出索引页面日志状态。 |
-g lmx | 输出所有锁定的互斥(mutex)。输出示例见onstat -g lmx选项。 |
-g lsc | 显示关于 light scan 的信息。 |
-g mem pool name session id | 输出一个内存池的统计数据。还显示池名称、包含这个池的共享内存段类型、池的地址、池的总大小、它包含的空闲内存的字节数,以及池中空闲和已分配的内存段数量。如果不提供参数,就显示所有池的信息。块池在主池列表后面的部分单独列出。还可以使用 ISA 获得关于内存池的详细信息。如果运行的 SQL 查询从 PER_STMT_EXEC 和 PER_STMT_PREP 内存池中分配内存,onstat -g mem会显示关于 PRP.sessionid.threadid 池和 EXE.sessionid.threadid 池的信息。输出示例见onstat -g mem pool name session id选项。更多信息见 IBM Informix DataBlade API |
-g mgm | 输出 Memory Grant Manager 资源信息。输出示例见onstat -g mgm选项。 |
-g nbm | 输出非常驻段的块位图,每个 8 KB 块对应一位。位设置为 1 就表示这个块是空闲的。输出示例见onstat -g nbm选项。 |
-g nif [modifier] | 输出网络接口的统计数据。可以通过这些信息判断数据为什么没有复制。更多信息和输出示例见onstat -g nif选项。 |
-g nsc client id | 按照客户机 id,输出共享内存状态。如果省略客户机 id,就显示所有客户机状态。这个命令输出与 nss 命令相同的状态数据。输出示例见onstat -g nsc client_id选项。 |
-g nsd | 输出轮询线程(poll thread)线程的网络共享内存数据。输出示例见onstat -g nsd选项。 |
-g nss session id | 按照会话 id,输出共享内存状态。如果省略会话 id,就显示所有会话状态。这个命令输出与nsc命令相同的状态数据。 |
-g nta | 输出来自 -g ntd、-g ntm、-g ntt和-g ntu的组合网络统计数据。如果安装了 MaxConnect,就可以使用这个命令提供的统计数据进行 MaxConnect 性能调优。 |
-g ntd | 按照服务,输出网络统计数据。输出示例见onstat -g ntd选项。 |
-g ntm | 输出网络邮件统计数据。输出示例见onstat -g ntm选项。 |
-g ntt | 输出网络用户时间。输出示例见onstat -g ntt选项。 |
-g ntu | 输出网络用户统计数据。输出示例见onstat -g ntu选项。 |
-g pos | 输出 $INFORMIXDIR/etc/ .infos.DBSERVERNAME 文件(UNIX)或 %INFORMIXDIR%\etc\ .infos.DBSERVERNAME 文件(Windows)。输出示例见onstat -g pos选项。 |
-g ppf partition number 0 | 输出特定分区的分区配置;如果使用 0,就输出所有分区的配置。如果 TBLSPACE_STATS 配置参数设置为 0,就显示:Partition profiles is disabled。输出示例见onstat -g ppf partition number 0选项。 |
-g prc | 输出关于 SPL 例程缓存的信息。输出示例见onstat -g prc选项。 |
-g qst | 输出队列统计数据。 |
-g que | 输出高层队列接口(这是 Enterprise Replication Queue Manager 的所有队列的通用接口)的统计数据。更多信息和输出示例见onstat -g que选项。 |
-g rbm | 输出常驻段(通信消息区域)的块位图。输出示例见onstat -g rbm选项。 |
-g rcv [serverid] | 输出关于接收管理器的统计数据。接收管理器是接收队列和数据同步之间的一组服务例程。更多信息和输出示例见onstat -g rcv选项。 |
-g rea | 显示已经做好准备的线程。输出示例见onstat -g rea选项。 |
-g rep [replname] | 输出调度管理器队列中的事件。更多信息和输出示例见onstat -g rep选项。 |
-g rqm [modifier] | 输出由 Reliable Queue Manager(RQM)管理的低层队列(每个单独的队列)的统计数据和内容。更多信息和输出示例见onstat -g rqm选项。 |
-g rwm | 输出读/写互斥。输出示例见onstat -g rwm选项。 |
-g sch | 输出每个虚拟处理器的信号量操作、旋转(spin)和忙等待的数量。在 Windows 上,虚拟处理器就是操作系统线程。‘pid’ 字段下显示的值是线程 id,而不是进程 id(Windows)。输出示例见onstat -g sch选项。 |
-g seg | 输出共享内存段统计数据。这个选项显示数据库服务器当前使用的共享内存段的数量和大小。输出示例见onstat -g seg选项。 |
-g ses sessionid | 按照会话 id,输出会话信息。如果省略会话 id,就为每个会话输出一行汇总信息。更多信息见onstat -g ses选项。 |
-g sle | 显示所有休眠的线程。输出示例见onstat -g sle选项。 |
-g smb option | 输出关于 sbspace 的详细信息。更多信息见onstat -g smb选项。 |
-g smxoption | 显示服务器多路复用器组的连接信息。 |
-g spi | 输出虚拟处理器请求过 10,000 次以上的旋转锁。这些旋转锁称为 longspin。longspin 的总数显示在glo命令输出的最前面。longspin 过多就意味着系统负载过大,同一个计算机或节点具有过多的虚拟处理器,或者出现了内部问题。要想减少 longspin,可以减少虚拟处理器的数量(通常对 CPU 分类)、减少计算机上的负载或者使用不会过时的或处理器亲合性特性。 |
-g sql session id | 按照会话 id,输出 SQL 信息。如果省略会话 id,就为每个会话输出一行汇总信息。更多信息见onstat -g sql选项。 |
-g ssc | 监视数据库服务器读取缓存中的 SQL 语句的次数。输出示例见onstat -g ssc选项。它显示与onstat -g cac stmt相同的输出。更多信息见 IBM Informix Performance Guide 中的 improving query performance。 |
-g ssc all | 报告 key-only 缓存项以及完整缓存的语句。如果 hits 列中的值小于 STMT_CACHE_HITS 值,这个缓存项就是 key-only 缓存项。更多信息见 IBM Informix Performance Guide 中有关内存使用的信息。 |
-g ssc pool | 报告 SQL 语句缓存的所有内存池的使用情况。输出显示内存池的名称、类、地址和总大小。更多信息见 IBM Informix Performance Guide 中有关改善查询性能的信息。 |
-g stk tid all | 显示线程 ID 指定的线程的堆栈,或者是所有线程的堆栈。这个选项并未在所有平台上都得到支持,而且输出不一定精确。输出示例见onstat -g stk tid选项。 |
-g stm [session id] | 显示每个 SQL 预备语句使用的内存。输出示例见onstat -g stm选项。更多信息见 IBM Informix Performance Guide 中有关内存使用和改善查询性能的信息。 |
-g sts | 输出每个线程的最大和当前堆栈使用量。输出示例见onstat -g sts选项。 |
-g sync | 显示哪个同步是活跃的。输出示例见onstat -g sync选项。 |
-g tpf tid | 输出特定线程 ID 的线程配置。输出示例见onstat -g tpf tid选项。 |
-g ufr pool name session id | 输出分配的段。 |
-g vpcache | 返回关于 CPU VP 内存块缓存的统计数据。 |
-g wai | 显示正在等待的线程;包括所有等待互斥或条件的线程和正在生成的线程。 |
-g wmx | 显示所有互斥以及等待者。输出示例见onstat -g wmx选项。 |
-g wst | 输出等待统计数据。 |
通过使用 filename_source 参数和其他选项标志,可以从 filename_source 包含的共享内存段中获得 onstat 统计数据。首先,必须使用 onstat -o 命令创建一个包含共享内存段的文件。
Creating a snapshot of the shared memory for further analysis
onstat -o myfile
Checking some information, for example dbspace information
onstat -d myfile
Results
Dbspaces
address number flags fchunk nchunks pgsize flags owner name
ad357e8 1 0x60001 1 1 2048 N B informix rootdbs
b62a5b0 2 0x60001 2 1 4096 N B informix dbsp1
2 active, 2047 maximum
Chunks
address chunk/dbs offset page Rd page Wr pathname
ad35948 1 1 0 493 5803 /local0/engines/ol_tuxedo/ifmxdata/rootdbs
b62a710 2 2 0 4 20 /local0/engines/ol_tuxedo/ifmxdata/dbsp1
2 active, 32766 maximum
NOTE: The values in the "page Rd" and "page Wr" columns for DBspace chunks are
displayed in terms of system base page size.
Expanded chunk capacity mode: always
|
要想让 onstat 实用程序进入交互模式,应该使用 -i 选项。在交互模式下,可以一个接一个地输入多个选项,而不必退出程序。关于使用交互模式的更多信息,参见 onstat -i。
通过使用 seconds 参数和 -r 选项标志,可以让其他所有标志以指定的时间间隔反复执行。
四、oncheck 实用程序
oncheck 实用程序显示关于数据库磁盘配置和使用情况的信息,比如一个表使用的页面数量、保留页面的内容和一个表中的区段数量。
通过执行 oncheck 命令调用 oncheck 实用程序。这个命令最简单的形式见清单 6:
清单 6. Oncheck 语法
oncheck
<-option>
<database | database:owner.table | tablespacenum logical pagenum ... >
<-x>
<-n>
<-y>
-x Places a shared lock on the table when you check and print an index
-n Indicates that no index repair should be performed,
even if errors are detected Use with the index repair options
(-ci, -cI, -pk, -pK, -pl, and -pL).
-y Repairs indexes when errors are detected.
|
选项 | 描述 |
-cc | 检查指定的数据库的系统编目表 |
-cd | 读取所有页面,但是不包括来自指定的数据库、表或段的 tblspace 的简单大对象,并检查每个页面的一致性。还检查那些使用用户定义的访问方法的表。不检查简单大对象或智能大对象。 |
-cD | 与-cd相同,但是还读取每个 blobpage 的头并检查一致性。检查简单大对象,但是不检查智能大对象。 |
-ce | 检查每个空闲块列表(对应于空闲空间)和每个 tblspace 区段。还检查智能大对象区段和 sbspace 元数据。oncheck 进程会检查磁盘上的区段是否与当前描述它们的控制信息相符。 |
-ci | 检查与指定的表相关联的所有索引的键值次序以及横向和纵向节点链接的一致性。还检查那些使用用户定义的访问方法的索引。 |
-cI | 与-ci相同,但是还检查与索引中的 rowid 相关联的键值是否与行中的键值相同。 |
-cr | 根据几个条件,检查每个根 dbspace 保留页面。 |
-cR | 检查根 dbspace 保留页面、物理日志页面和逻辑日志页面。 |
-cs | 检查一个 sbspace 的智能大对象和 sbspace 元数据。 |
-cS | 检查一个 sbspace 的智能大对象和 sbspace 元数据以及区段。 |
-pB | 显示统计数据,这些数据描述指定的表中 blobspace blobpage 的平均完整性。这些统计数据可以用来衡量一个数据库或表中简单大对象的存储效率。如果没有指定表或段,就显示整个数据库的统计数据。 |
-pc | 与-cc相同,但是还显示系统编目信息(因为它会检查系统编目表),包括每个表的区段使用情况。 |
-pd | 以十六进制格式显示行。 |
-pD | 以十六进制格式显示行,还显示 tblspace 中存储的智能大对象值或 sbspace sbpage 中存储的智能大对象的头信息,以及 blobspace blobpage 中存储的简单大对象。 |
-pe | 与-ce相同,但是还显示块和 tblspace 区段信息(因为它会检查空闲块列表)、对应的空闲空间和每个 tblspace 区段。 |
-pk | 与-ci相同,但是还显示指定表的所有索引的键值。 |
-pl | 与-ci相同,但是还显示键值。只检查叶节点索引页面。 |
-pL | 与-cI相同,但是还显示叶节点索引页面的键值和 rowid。 |
-pp | 显示一个逻辑页面的内容。 |
-pP | 与-pp相同,但是要求输入块号和逻辑页面号或内部 rowid。 |
-pr | 与-cr相同,但是还显示保留页面信息。 |
-ps | 检查并显示一个 sbspace 的智能大对象和 sbspace 元数据。 |
-pS | 检查并显示智能大对象和 sbspace 元数据。列出各个智能大对象的区段和头信息。 |
-pt | 显示一个表或段的 tblspace 信息。 |
-pT | 与-pt相同,但是还按照页面类型显示索引信息和页面分配信息(针对 dbspace)。 |
oncheck 实用程序可以修复以下磁盘结构:
如果 oncheck 探测到其他结构中有不一致的地方,就会发出警告,但是 oncheck 无法纠正问题。
如果索引是使用支持 oncheck -y 选项的访问方法创建的,oncheck 就可以修复 sbspace 和外部空间中的索引。尽管 oncheck 实用程序不修复分段的索引,但是用户定义的访问方法可以修复它们。
在以下操作期间,oncheck 实用程序会在表上放一个共享锁,所以在检查完成之前,其他用户不能执行更新、插入或删除:
-ci、-cI、-pk、-pK、-pl 或 -pL),而且表使用页面锁定-ci、-cI、-pk、-pK、-pl 或 -pL 选项的同时指定了 -x 选项,而且表使用行锁定如果表没有使用页面锁定,那么在用 oncheck -ci、-cI、-pk、-pK、-pl 或 -pL 选项检查索引时,数据库服务器就不会在表上放共享锁。如果在索引检查期间表上没有共享锁,其他用户就可以在检查期间更新行。
由于在索引检查期间在使用行锁的表上不放置共享锁,oncheck 实用程序的索引检查可能不准确。要想绝对保证完整的索引检查,可以使用 -x 选项执行 oncheck。使用 -x 选项执行时,oncheck 会在表上放一个共享锁,在检查完成之前,其他用户不能执行更新、插入或删除。
五、消息日志
数据库服务器消息日志是一个操作系统文件。数据库服务器消息日志中包含的消息通常并不要求管理员马上采取措施。
指定消息日志路径的方法是设置 MSGPATH 配置参数。对 MSGPATH 的修改会在数据库服务器重新启动之后生效。
应该每天查看消息日志一两次,确认服务器运行正常而且日志记录的事件都是预料中的事件。使用 onstat -m 命令获得消息日志的名称和最近的 20 个记录。使用文本编辑器查看完整的消息日志。可以使用操作系统命令(比如 UNIX 命令 tail -f)在消息出现时查看它们。
应该监视消息日志的大小,因为数据库服务器会将新的记录追加到这个文件的末尾。根据需要编辑日志,或者将它备份到磁盘上并删除它。
如果数据库服务器遇到失败,消息日志可以作为审计工具,可以用来研究哪些事件导致了问题。数据库服务器常常会在消息日志中提供问题的性质和建议的纠正措施。
在研究问题的原因时,可以仔细查看数据库服务器消息日志。但是,在日常监视中不需要这样做。
有四个消息类别,但是某些消息属于多个类别:
日志消息的示例
Wed Apr 18 19:01:23 2007
22:56:00 Maximum server connections 284
22:56:03 Level 1 Archive started on dbsherm05
23:23:40 Logical Log 42173 Complete, timestamp: 0xeee826ad.
23:23:41 Logical Log 42173 - Backup Started
23:24:26 Logical Log 42173 - Backup Completed
23:26:30 Checkpoint Completed: duration was 29 seconds, 36019 buffers not flushed.
23:26:30 Checkpoint loguniq 42174, logpos 0x281d658, timestamp: 0xeeece592
|
19:12:26 Who: Session(33, informix@rdbms2, 0, 25da90ba8)
Thread(63, xchg_1.6, 25da5d308, 1)
File: rspartn.c Line: 2426
19:12:26 Results: Could not complete operation on 'erv:"informix".stmy'
19:12:26 Action: Run 'oncheck -cDI ermes:"informix".avvisi_out_tot_e2'
19:12:26 stack trace for pid 1474 written to /appl/InformixDump/af.4274f8a
19:12:26 See Also: /appl/InformixDump/af.4274f8a
19:12:38 ptmap
19:12:38 Assert Failed: ptmap
|
11:05:49 Maximum server connections 4
11:08:05 Logical Log Files are Full -- Backup is Needed
|
15:24:33 IBM Informix Dynamic Server Started.
15:24:33 shmget: [EEXIST][17]: key 52584801: shared memory already exists
15:24:33 mt_shm_init: can't create resident segment
15:40:09 Assert Failed: Unexpected virtual processor termination,
pid = 526411, exit = 0x9
|
数据库服务器可以根据数据库服务器环境中发生的事件,自动地触发管理操作。这种机制称为事件警告(event-alarm)特性。事件可以是信息性的(例如,备份完成),也可以是需要管理员注意的错误(例如,无法分配内存)。要想使用事件警告特性,需要将 ALARMPROGRAM 配置参数设置为一个可执行文件的完整路径,这个可执行文件执行必需的管理操作。
数据库服务器可以执行一个程序,每当出现某些值得注意的事件警告时,或者每当出现任何事件警告时,这个程序会执行操作。值得注意的事件警告包括数据库、表、索引、块或 dbspace 离线,内部子系统失败,启动失败,以及探测到长事务。可以通过电子邮件或 pagermail 接收事件警告的通知。
使用 表 7 中的参数指定:
参数 | 描述 |
ALRM_ALL_EVENTS | 指定ALARMPROGRAM是针对 MSGPATH 中记录的所有事件运行,还是只针对指定的值得注意的事件运行。 |
ALARMPROGRAM | 指定在发生事件警告时执行的文件的位置。 |
六、操作系统工具
sar 命令可以用来监视 CPU 利用率、磁盘活动和内存利用率。
$ sar -u 60 10
09:42:17 %usr %sys %wio %idle
09:43:17 1 5 0 94
09:44:17 1 4 0 95
09:45:17 5 3 0 92
09:46:17 4 6 1 89
|
清单 11 所示的示例以 60 秒的时间间隔监视 CPU 利用率,共执行 10 次。
要想识别潜在的或实际的性能瓶颈或问题,就需要连续地监视系统,并长期捕捉数据。
UNIX sar 命令非常适合创建和维护长期的性能历史:
sar。sar 报告。time 和 timex 命令可以用来对进程进行计时。time 和 timex 报告真实的时间以及用户和系统 CPU 时间。
ps 命令可以用来获得当前运行的系统进程的快照信息。
$ ps -el
S UID PID PPID STIME TTY TIME CMD
T root 0 0 08:59:54 ? 0:01 sched
S root 1 0 08:59:57 ? 0:00 /etc/init
S root 434 1 09:03:51 ? 0:05 oninit
S root 435 434 09:03:53 ? 0:00 oninit
S root 445 434 09:06:02 ? 0:00 oninit
where PID is Process Id
STIME is process start time
TIME is accumulated CPU time for process
|
iostat 命令可以以很高的精度度量吞吐量、利用率、队列长度、事务处理速度和服务时间。
$ iostat -x 5 1
extended device statistics
device r/s w/s Kr/s Kw/s wait actv svc_t %w %b
sd0 6.2 0.0 21.5 0.0 0.0 0.1 24.1 0 15
sd1 1.8 0.0 14.3 0.0 0.0 0.1 41.6 0 7
sd6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd30 0.2 0.2 25.7 0.2 0.0 0.1 22.5 0 13
|
vmstat 命令提供关于进程状态、内存利用率、分页统计数据、系统活动和 CPU 利用率的信息。
$ vmstat 5 4
procs memory page disk faults
r b w swap fre re mf pi po ... d0 d1 d2 in sy ...
4 1 0 104512 1792 8 0 288 192 ... 4 6 1 23 15 ...
2 3 0 105184 1952 4 0 96 128 ... 0 2 1 14 15 ...
3 2 0 106688 1952 7 0 256 224 ... 4 4 12 29 21 ...
4 2 0 104672 6240 4 0 384 32 ... 3 1 3 2 75 ...
where w is processes swapped out page outs
swap is Kbytes of swap space available
d0 is # of disk operations/sec
p0 is pageouts
|
|
事件查看器显示关于操作系统、其他应用程序和数据库服务器的信息、警告和错误消息。
在 Windows 上显示数据库服务器消息的步骤如下:
|
下面的 Informix 实用程序可以简化 Windows 上的数据库服务器管理。
ixpasswd.exe 可以修改以用户 informix 登录的所有服务的登录密码。可以交互式地修改密码,也可以在命令行上使用 -y 选项修改密码。有了这个实用程序,在需要修改 informix 密码时,就不需要为每个服务手工修改密码,可以节省大量时间。
如果在本地登录并运行 ixpasswd,它会修改以本地 informix 用户登录的服务的密码。如果在域上登录并运行 ixpasswd,它就会修改以 domain\informix 登录的服务的密码。
使用方法:
ixpasswd [-y new_password] |
启动一个命令行窗口,这个窗口以一个指定的用户的身份运行。如果不指定域名,这个用户就是个本地用户。如果没有指定用户名,默认用户是 informix。不需要注销当前用户,再作为 informix 登录;相反,只需使用 ixsu.exe 就可以执行那些需要作为 informix 用户运行的 DBA 任务。ixsu 实用程序需要高级用户权力:
执行操作系统的部分权利
使用方法:
ixsu [[domain\]username] |
ixsu 实用程序相当于 Windows 2000 上的 runas 命令。使用 runas 作为另一个用户运行命令 shell 的方法如下:
使用方法:
runas /user:username cmd |
ntchname.exe 将 Dynamic Server 的注册表项从老的主机名改为新的主机名。在修改主机名之后,应该运行 ntchname。这个实用程序并不修改用户环境变量。在执行 ntchname 之后,应该编辑 %INFORMIXDIR%\%INFORMIXSERVER%.cmd 文件,将 INFORMIXSQLHOSTS 改为新的主机名。
使用方法:
ntchname old_name new_name |
七、结束语
本教程介绍了 IDS 11 提供的监视工具,并讲解了如何使用这些工具监视数据库系统的运行状态。数据库监视是一种重要的活动,定期执行数据库监视可以不断地提供数据库系统状态的反馈。
SQL 管理 API 让管理员能够使用各种 SQL 命令执行远程管理,比如管理空间、管理配置、运行日常作业和系统检验。
调度程序管理和执行那些安排好的维护、监视和管理任务。可以使用这个工具监视服务器的活动(例如,空间管理,或者以指定的时间间隔自动地备份上一次日志备份之后的所有新日志数据),还可以创建自动运行的纠正操作。
系统监视接口(system-monitoring interface,SMI)表是由数据库服务器管理的特殊表,其中包含关于数据库服务器状态的信息。可以对这些表使用 SELECT 语句,从而了解关于数据库服务器的几乎任何信息。
onstat 实用程序提供了一种从命令行监视数据库服务器共享内存的方法。onstat 实用程序从共享内存读取数据,并报告执行这个命令期间的精确统计数据。也就是说,onstat 提供那些在处理期间动态改变的信息,包括缓冲区、锁、索引和用户方面的变化。
oncheck 实用程序显示关于数据库磁盘配置和使用情况的信息,比如一个表使用的页面数量、保留页面的内容和一个表中的区段数量。
数据库服务器消息日志是一个操作系统文件。在研究服务器问题的原因时,可以仔细查看数据库服务器消息日志,了解发生问题之前的事件。
事件警告特性这种机制可以根据数据库服务器环境中发生的事件,自动地触发管理操作。
本日志由 flyinweb 于 2009-11-03 09:33:04 发表,目前已经被浏览 4424 次,评论 0 次;
引用通告:http://www.517sou.net/Article/309/Trackback.ashx
而且直接配置文件是效率最高的,通过其它驱动效率都相对较低,BDB
这个测试不太准确,看官方的测试结果:http://bind-dlz.sourceforg
为什么使用BDB时QPS这么低? 我在bind版本基本相似的环境中测试的
It is quite useful and interesting too.
VIRT 的上限是64G,也就是36位, cat /proc/cpuinfo的结果是:addre
昨天要准备用线程重写webbench,试验了下Fedora Linux 2.6.35.14
不明白您的具体的意思是什么?
已经发送到你QQ邮箱