Lester Knutsen (lester@advancedatatools.com), 总裁, Advanced DataTools Corp.
2008 年 4 月 17 日 在 “IDS 11 Sysmaster 数据库,第 1 部分” 中,我讨论了 Informix Dynamic Server(IDS)11 Sysmaster 数据库中五个有用的新表。在本文中,我将继续讨论。 来自 IBM Database Magazine 。
回顾
前一篇 Informix DBA 专栏文章 讨论了 IDS 11 中新增的五个 Sysmaster 表:
-
Syscheckpoint,记录自从服务器启动以来最近的一组检查点
-
Sysenv,显示在服务器启动时生效的环境变量
-
Sysenvses,显示对于用户会话生效的环境变量
-
Sysmgminfo,显示 Parallel Database Query(PDQ)信息
-
Sysonlinelog,记录在线日志
概述
Sysmaster 数据库是 IDS 系统中的一个伪数据库,它提供关于 IDS 服务器的共享内存结构的信息,对于监视服务器的状态和性能非常有帮助
我将通过一些示例解释如何使用 IDS 11(代码号“Cheetah”)中新的 Sysmaster 特性,并讨论以下七个 Sysmaster 表:
-
Sysnetclienttype、Sysnetglobal 和 Sysnetworkio,显示网络状态
-
Syssqltrace、Syssqltrace_info 和 Syssqltrace_iter,显示 SQL 配置文件和跟踪信息
-
Systhreads,记录线程和它们的等待统计数据
监视网络活动
有三个新表可以帮助 DBA 监视和跟踪 IDS 服务器的用户和客户机网络活动。这些表是:
-
Sysnetclienttype,显示每种客户机类型的网络活动概况
-
Sysnetglobal,提供系统网络的概况
-
Sysnetworkio,提供系统网络 I/O 的概况
Sysnetclienttype 表显示可以连接到服务器的所有客户机类型,以及在客户机和服务器之间生成的网络流量。总会显示的一个客户机类型是 sqlexec,这个类型分配给执行查询、插入、删除和更新的用户。随着时间的推移,会发生更多活动,所以 nc_reads 和 nc_writes 列会反映不断增加的网络读写数量。另一个客户机类型是 ontape。对于这个类型,当执行备份时,nc_reads 和 nc_writes 列显示的活动数量会增加。通过使用 Sysnetclienttype 表,可以按照连接服务器的客户机类型查看总体网络活动量。
Sysnetglobal 表包含一个记录,它显示全局设置和网络读写的总数。Sysnetworkio 表按照会话显示网络 I/O —— 因此,可以在这里查找消耗网络资源最多的会话。net_open_time、net_last_read 和 net_last_write 列包含最近一次网络活动的日期和时间,这些数据采用 Unix 时间格式,所以需要用 dbinfo 函数把它们转换为人可阅读的格式。下面的 SQL 语句按照会话显示最近一次网络活动的日期和时间:
清单 1。显示最近一次网络活动的日期和时间
select
sid,
dbinfo( ‘utc_to_datetime’ , net_open_time ),
-- Date/time session started net connection
dbinfo( ‘utc_to_datetime’ , net_last_read ),
-- Date/time session performed last net read
dbinfo( ‘utc_to_datetime’ , net_last_write )
-- Date/time session performed last net
write from Sysnetworkio;
|
捕捉和跟踪 SQL 语句
最让兴奋的是,有三个新的 Sysmaster 表可以用来在运行 SQL 语句之后捕捉和跟踪 SQL 语句。要想使用这些表,必须在 ONCONFIG 文件中用 SQLTRACE 参数启用 SQL 跟踪特性,或者执行一个新的 dba 函数任务。这三个表是:
-
Syssqltrace,显示单一 SQL 语句的详细信息
-
Syssqltrace_info,包含 SQL 配置文件跟踪系统的信息
-
Syssqltrace_iter,列出 SQL 语句迭代器
这些都不是物理表,而是内存中的数据,所以在启用跟踪时,需要配置存储跟踪信息所用的内存量。当填满这个内存空间之后,就丢弃最旧的数据并替换为当前数据。在 ONCONFIG 文件中或通过新的 dba 函数任务启用跟踪需要四个参数:
-
Level 是要捕捉的数据的详细程度;这个参数可以设置为 off、low、med 或 high。默认值是 off,所以如果不启用跟踪,就不会捕捉信息。
-
Ntraces 是跟踪并存储在内存中的 SQL 语句的最大数量。达到这个数量之后,就会重用内存空间。最小数值是 500,最大数值取决于您希望使用的内存量。如果设置为 1000,那么第 1001 个 SQL 语句会重用第一个 SQL 语句的存储区域。
-
Size 是每个跟踪缓冲区的最大大小,以 KB 为单位,值的范围是从 1 到 100。
-
Mode 指定跟踪是针对所有用户(global),还是针对一个特定用户。
ONCONFIG 文件中的设置像下面这样:
SQLTRACE Level=low,Ntraces=1000,Size=2k,Mode=global
还可以使用新的 dba 函数临时启用这个特性,这在调试时非常方便。可以在 ONCONFIG 文件中禁用跟踪(换句话说,并不永久地启用它),只在需要时启用它。这个函数只能在新的 sysadmin 数据库上使用。下面的示例使用这个新函数启用跟踪。
清单 2。使用新的 dba 函数临时启用跟踪
database sysadmin;
execute function task (“set sql tracing on”,1000, “2k”, “high”, “global” );
Once turned on, the next 1,000 (or whatever number is specified in Ntraces)
|
表 1. Syssqltrace 列
sql_id
|
惟一的 SQL 执行 ID
|
sql_address
|
语句在代码块中的地址
|
sql_sid
|
运行 SQL 语句的用户的数据库会话 ID
|
sql_uid
|
运行 SQL 语句的用户的用户 ID
|
sql_stmttype
|
语句类型
|
sql_stmtname
|
显示为单词形式的语句类型
|
sql_finishtime
|
完成这个语句的时间(Unix 格式)
|
sql_begintxtime
|
开始执行这个语句的时间
|
sql_runtime
|
语句的执行时间
|
sql_pgreads
|
这个 SQL 语句的磁盘读数量
|
sql_bfreads
|
这个 SQL 语句的缓冲区读数量
|
sql_rdcache
|
从缓冲区池读取页面的次数的百分比
|
sql_bfidxreads
|
索引页面缓冲区读数量
|
sql_pgwrites
|
写到磁盘的页面数量
|
sql_bfwrites
|
修改并返回给缓冲区池的页面数量
|
sql_wrcache
|
向缓冲区池写页面的次数的百分比
|
sql_lockreq
|
这个 SQL 语句所需的锁的总数
|
sql_lockwaits
|
这个 SQL 语句等待锁的次数
|
sql_lockwttime
|
在执行这个 SQL 语句期间系统等待锁的时间
|
sql_logspace
|
这个 SQL 语句在逻辑日志中使用的空间量
|
sql_sorttotal
|
为这个语句运行的排序数量
|
sql_sortdisk
|
在磁盘上运行的排序数量
|
sql_sortmem
|
在内存中运行的排序数量
|
sql_executions
|
这个 SQL 语句运行的次数
|
sql_totaltime
|
运行这个语句花费的时间总量
|
sql_avgtime
|
运行这个语句花费的时间平均量
|
sql_maxtime
|
执行这个 SQL 语句花费的最大时间量
|
sql_numiowaits
|
不得不等待 I/O 的次数
|
sql_avgiowaits
|
这个 SQL 语句等待 I/O 的时间平均量
|
sql_totaliowaits
|
这个 SQL 语句等待 I
/O 的时间总量
|
sql_rowspersec
|
每秒产生的平均行数
|
sql_estcost
|
与这个 SQL 语句相关联的开销
|
sql_estrows
|
这个 SQL 语句返回的行数的估计值
|
sql_actualrows
|
这个 SQL 语句返回的行数
|
sql_sqlerror
|
SQL 错误号
|
sql_isamerror
|
RSAM/ISAM 错误号
|
sql_isollevel
|
这个 SQL 语句的隔离级别
|
sql_sqlmemory
|
执行这个 SQL 语句所需的字节数
|
sql_numiterators
|
这个语句使用的迭代器数量
|
sql_database
|
数据库名
|
sql_numtables
|
执行这个 SQL 语句所用的表数量
|
sql_tablelist
|
这个 SQL 语句中直接引用的表名的列表
|
sql_statement
|
运行的 SQL 语句
|
启用跟踪之后,sqltrace 表会捕捉后面 1000 个(或者 Ntraces 中指定的数量)SQL 语句。onstat -g 命令将读取这个表,显示配置设置以及跟踪所捕捉到的所有 SQL 语句。表 1 显示 Syssqltrace 表的列(见表 1 所示)。
可以通过这个表了解 IDS 服务器上已经执行的 SQL 语句的详细信息。Syssqltrace 表包含 SQL 语句、执行 SQL 所用的资源、运行 SQL 花费的时间、磁盘/页面/缓冲区读和写的数量、使用的锁数量、排序数量和使用的内存量。另外,它还包含 IDS 优化器估计的运行这个 SQL 所要花费的时间。这个表非常有意思的一个好处是,可以对比 IDS 优化器估计的返回行数和实际的返回行数(sql_estrows 和 sql_actualrows)。如果这两个数值差异很大,就说明 IDS 优化器并不掌握关于表中行和索引数量的正确的统计数据。这意味着需要运行 update statistics,从而向优化器提供正确的数据。
在进行 IDS 调优时信息是关键因素
在进行监视和调优时,获得关于 IDS 服务器及其性能的丰富信息的能力是一个关键因素。IDS 11 中新增的这些 Sysmaster 表可以提供有用的信息。请在 dbaccess 或 Server Studio 中对这些新表运行一些选择语句,体会它们所提供的信息。
参考资源
关于作者  | |  | Lester Knutsen 是 Advanced DataTools Corp. 的总裁,这家公司是 IBM 的 Informix 咨询和培训合作伙伴,专门从事数据仓库开发、数据库设计、性能调优以及 Informix 培训和支持。他还是 Washington D.C. Area Informix User Group 的主席、International Informix Users Group 的创始人之一和 IBM Gold Consultant。 |
对本文的评价
|