DBASK-数据库管理员结构化知识体系-Structured knowledge system for DataBase Administrators

Home

Adaptive Server 中的监控表




Adaptive Server 提供一组系统表,这些表中包含监控信息和诊断信息。这些表中的信息为您提供了 Adaptive Server 状态的统计快照,能让您分析服务器以便分析服务器性能。例如,您可以执行查询以报告有关服务器进程和应用程序的活动、查询性能、数据库表的使 用情况、数据高速缓存的效率、数据库设备上的 I/O 活动以及 AdaptiveServer 影响系统性能的许多其它方面的信息。

监控表中的数据不存储在磁盘上。当您在一个监控表上执行查询时,数据便会被计算。表定义包含在服务器安装脚本所创建的代理表定义中。当您执行查询时,这些代理表使用一个到 Adaptive Server 的接口来收集监控数据。

需使用服务器安装脚本创建监控表

安装监控表




Adaptive Server 15.0.2 版和更高版本以及 Cluster Edition 的监控表:

• 当您运行 installmaster 脚本时安装

• 使用物化视图

• 要求您创建回送服务器

低于 15.0.2 的版本,使用位于 $SYBASE/ASE-15_0/scripts 目录 (对于 Windows 为 %SYBASE%\ASE-15_0\scripts)中的 installmontables 脚本创建监控表。

isql -Usa -Ppassword -Sserver_name -i $SYBASE/ASE-15_0/scripts/installmontables

配置监控表以收集数据




缺省情况下,Adaptive Server 不收集监控表所需的监控信息。使用sp_configure 将配置 Adaptive Server 为开始收集监控信息。

若要配置 Adaptive Server 以收集常规监控信息,请执行以下操作(默认为启用状态):

sp_configure “enable monitoring”, 1

当您输入以下命令时,Adaptive Server 会显示专用于监控的配置参数的完整列表:

sp_configure Monitoring

用于控制监控信息收集的配置参数有:

 • enable monitoring
 • deadlock pipe active
 • deadlock pipe max messages
 • errorlog pipe active
 • errorlog pipe max messages
 • max SQL text monitored
 • object lockwait timing
 • per object statistics active
 • plan text pipe active
 • process wait events
 • sql text pipe active
 • sql text pipe max messages
 • statement pipe active
 • statement pipe max messages
 • statement statistics active
 • SQL batch capture
 • wait event timing

- 为管道错误消息分配内存

许多监控表使用内存缓冲区(称为“管道”)来收集监控数据。以下参数可控制为每个管道分配的内存量:

 • deadlock pipe max messages
 • errorlog pipe max messages
 • sql text pipe max messages
 • plan text pipe max messages
 • statement pipe max message

Adaptive Server 可以动态向管道中添加内存,但无法动态从中删除内存,因此,如果减小管道参数的大小,则必须重新启动 Adaptive Server 才能让新的管道大小生效。

- mon_role 和其它访问控制

只有具有 mon_role 的用户才可以访问这些监控表。只有被授予此角色的用户可以在监控表上执行查询。可以授予或撤消特定登录名、角色或组对监控表的 select 权限,从而向部分(或全部)监控表添加其它访问控制。

- 有态历史监控表

许多监控表提供各个事件的记录,而不是有关当前状态的信息。这些表称为“历史的”,因为这些表中报告的事件提供服务器在一段时间内的历史记录。Adaptive Server 维护访问历史表的每个客户端连接的上下文信息,而且,在对该表进行的每个后续查询中仅返回客户端以前没有收到的行。历史监控表的这种“有态”属性旨在最大限度地提高性能,以及在用于填充历史数据的存储库时避免重复行。

历史监控表有:

• monErrorLog
 • monDeadLock
 • monSysStatement
 • monSysSQLText
 • monSysPlanText

- 瞬时监控数据

由于监控表经常包含瞬时数据,因此在查询中连接或使用集合时要小心:如果查询计划要求多次查询表,则这些操作返回的结果可能不同。例如:

select s.SPID, s.CpuTime, s.LineNumber, t.SQLText
 from master..monProcessStatement s, monProcessSQLText t
 where s.SPID=t.SPID
 and s.CpuTime = (select max(CpuTime) from master..monProcessStatement)

此示例查询 monProcessStatement 两次,首先查找最大 CpuTime,然后匹配这个最大值。当 Adaptive Server 执行第二次查询时,从 monProcessStatement 返回的潜在结果有三种:

• 该语句执行更多工作,消耗更多 CPU,使 CpuTime 值大于前一个最大值,因此,where 子句中没有匹配项,查询不返回任何结果。

• 该语句在第二个查询执行之前就已执行完毕,不生成任何结果,除非另一个语句使用的 CPU 量完全和上次获取的最大值相同。

• 该语句不使用任何其它的 CPU,并且它的 CpuTime 值仍然与最大值匹配。只有这种情况会生成预期的结果。

建议您在分析监控表中的数据之前,将其保存在临时表或存储库中。这样做会冻结数据并消除由于瞬时数据或历史监控表的无态性质可能造成的意外结果。

语句高速缓存的监控表




Adaptive Server 语句高速缓存一旦启用,便可存储即席 update、delete 和 select 命令以及其它可能重用的语句的 SQL 文本。启用语句高速缓存后,这些语句的查询计划会被保存以便重用。发出新语句后,Adaptive Server 将搜索要重用的计划的语句高速缓存。如果 Adaptive Server 找到可重用的计划,则无需重新编译语句,因此会提高性能。

配置 Adaptive Server 以监控语句高速缓存

使用 enable stmt cache monitoring 可配置 Adaptive Server 以收集有关语句高速缓存的监控信息。

sp_configure 'stmt cache monitoring',enable        ----确认是否已enable,执行sp_configure 'stmt cache monitoring',

显示高速缓存语句的文本和参数信息

使用 show_cached_text 可查看高速缓存语句的 SQL 文本。show_cached_text 将语句 ID 用作输入,并显示相应语句的文本和参数信息。语法为:

select show_cached_text(SSQLID)

使用 show_cached_text 可在查询中获取语句高速缓存中的语句的文本。例如:

select SSQLID, show_cached_text(SSQLID) from master..monCachedStatement

查询监控表的示例




• 若要返回所有可用监控表的列表:

select TableName  from master..monTables

• 若要列出特定监控表中的列,请输入:

select ColumnName, TypeName, Length, Description
 from master..monTableColumns
 where TableName=”monProcessSQLText”

通过在 where 子句中替代任一监控表的名称并运行查询,您可以确定此监控表中存在哪些列。

• 若要确定当前执行的查询中哪些最消耗 CPU 并列出这些查询的文本,请输入:

select s.SPID, s.CpuTime, t.LineNumber, t.SQLText
 from master..monProcessStatement s, master..monProcessSQLText t
 where s.SPID = t.SPID
 order by s.CpuTime DESC

• 若要确定 Adaptive Server 生存周期内的过程高速缓存的命中率,请输入:

select "Procedure Cache Hit Ratio" = (Requests-Loads)*100/Requests from master..monProcedureCache

- 以下查询还提供数据高速缓存的命中率。在此示例中,命中率是针对 10 分钟的间隔计算的,而不是针对服务器的整个生存周期:

select * into #moncache_prev 
from master..monDataCache
 waitfor delay "00:10:00"
 select * into #moncache_cur
 from master..monDataCache
 select p.CacheName, 
"Hit Ratio"=((c.LogicalReads-p.LogicalReads) - (c.PhysicalReads - 
p.PhysicalReads))*100 / (c.LogicalReads - p.LogicalReads) 
from #moncache_prev p, #moncache_cur c 
where p.CacheName = c.CacheName

• 若要创建一个存储过程,用以输出已执行的 SQL 以及当前执行存储过程的所有进程的反馈,请输入:

create procedure sp_backtrace @spid int as
 begin
 select SQLText
 from master..monProcessSQLText
 where SPID=@spid
 print "Stacktrace:"
 select ContextID, DBName, OwnerName, ObjectName 
from master..monProcessProcedures
 where SPID=@spid
 end

• 若要确定用于 dbid 为 5、对象 ID 为 1424005073 的数据库中的表的任何索引,请输入:

select DBID, ObjectID, LastUsedDate, UsedCount
 from master..monOpenObjectActivity
 where dbid=5 and ObjectID=1424005073 and IndexID > 1

若要确定可否删除不被在服务器上运行的应用程序使用的索引,请执行以下操作:

a 在访问相关表的应用程序中运行所有查询。确保 Adaptive Server 运行足够长时间,以便所有应用程序都执行其 select。

b 若要确定您的应用程序是否未在数据库中使用任何索引,请执行:

select DB = convert(char(20), db_name()),
 TableName = convert(char(20), object_name(i.id, db_id())),
 IndexName = convert(char(20),i.name),
 IndID = i.indid
 from master..monOpenObjectActivity a, 
sysindexes i
 where a.ObjectID =* i.id
 and a.IndexID =* i.indid
 and (a.UsedCount = 0 or a.UsedCount is NULL)
 and i.indid > 0
 and i.id > 99 -- No system tables
 order by 2, 4 asc

sp_sysmon




说明:显示性能信息。

语法

sp_sysmon begin_sample
 sp_sysmon { end_sample | interval }[, section[, applmon] ]
 [, 'cache wizard'  [, top_N [, filter] ] 

参数

 begin_sample
开始采样。如果指定了 begin_sample,则不能指定部分。
section
是 sp_sysmon 输出的部分中某一个部分的缩写。报告部分的值和相应名称为:
参数 报告部分
appmgmt返回表达式的绝对值。
dcache数据高速缓存管理
diskio磁盘 I/O 管理
espESP 管理
indexmgmt索引管理
kernel内核使用率
locks锁管理
memory内存管理
mdcache元数据高速缓存管理
monaccess对执行 SQL 的监控访问
netio网络 I/O 管理
parallel并行查询管理
pcache过程高速缓存管理
recovery恢复管理
taskmgmt任务管理
xactmgmt事务管理
xactsum事务配置文件
wpm工作进程管理
applmon 指定输出应用程序细节、应用程序和登录名细节或无应用程序细节。 缺省设置为省略应用程序细节。有效值及其报告的信息为: • appl_only — 按应用程序名输出的 CPU、I/O、优先级更改和资源限制违反信息。 • appl_and_login — 按应用程序名和登录名输出的 CPU、I/O、优先级更改和资源限制违反信息。 • no_appl — 跳过报告的“按应用程序”或“按登录名”部分。这是缺省值。 只有在输出完整报告并且为 section 指定了 appmgmt 时此参数才有效。 end_sample 结束采样并输出报告。 interval 指定采样的时间范围。必须采用 HH:MM:SS 格式,例如“00:20:00”。 'cache wizard' 可帮助监控和配置数据高速缓存以获得最佳性能。 top_N 是一种 varchar 数据类型,它根据指定间隔内的逻辑读取次数(显示在 LR/sec 列中)的排列条件限制在“对象部分”报告的对象列表。 根据指定值是正整数还是负整数,排列顺序为升序或降序。通过指定值“0”,可以获取在间隔结束时占用高速缓存的对象的整个列表。 缺省值为 10。 filter 是一种 varchar 数据类型,用来为报告中包括的高速缓存指定模式。 例如,如果将它指定为 default data cache,报告将只包含有关缺省数据高速缓存的信息。如果将它指定为 emp%,输出将包括名称与此模式匹配的所有高速缓存的有关信息。 如果未指定任何值,输出将包含所有高速缓存,且首先显示缺省数据 高速缓存,然后按字母顺序显示其它高速缓存。

示例 1 在 10 分钟后输出监控信息:

sp_sysmon "00:10:00"

示例 2 在 5 分钟后只输出 sp_sysmon 报告的“磁盘管理”部分:

sp_sysmon "00:05:00", diskio      ----diskio修改为上表中的其他参数,即可输出相关信息