IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

IDS 11 Sysmaster 数据库,第 2 部分:

通过更多的数据库监视选项监视和调优 Informix 服务器

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


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。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款