Adaptive Server Enterprise: Performance and Tuning Series: Monitoring Tables
Adaptive Server Enterprise: Performance and Tuning Series: Monitoring Tables
Tables
To order additional documents, U.S. and Canadian customers should call Customer Fulfillment at (800) 685-8225, fax (617) 229-9845.
Customers in other countries with a U.S. license agreement may contact Customer Fulfillment via the above fax number. All other
international customers should contact their Sybase subsidiary or local distributor. Upgrades are provided only at regularly scheduled
software release dates. No part of this publication may be reproduced, transmitted, or translated in any form or by any means, electronic,
mechanical, manual, optical, or otherwise, without the prior written permission of Sybase, Inc.
Sybase trademarks can be viewed at the Sybase trademarks page at http://www.sybase.com/detail?id=1011207. Sybase and the marks listed
are trademarks of Sybase, Inc. ® indicates registration in the United States of America.
SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of
SAP AG in Germany and in several other countries all over the world.
Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
Unicode and the Unicode Logo are registered trademarks of Unicode, Inc.
IBM and Tivoli are registered trademarks of International Business Machines Corporation in the United States, other countries, or both.
All other company and product names mentioned may be trademarks of the respective companies with which they are associated.
Use, duplication, or disclosure by the government is subject to the restrictions set forth in subparagraph (c)(1)(ii) of DFARS 52.227-7013
for the DOD and as set forth in FAR 52.227-19(a)-(d) for civilian agencies.
Action ...................................................................................... 29
Event 32: waiting for an APF buffer read to complete.................... 29
Action ...................................................................................... 30
Event 35: waiting for buffer validation to complete......................... 30
Action ...................................................................................... 30
Event 36: waiting for MASS to finish writing before changing ........ 30
Action ...................................................................................... 31
Event 37: wait for MASS to finish changing before changing ........ 31
Action ...................................................................................... 31
Event 41: wait to acquire latch ....................................................... 31
Action ...................................................................................... 32
Event 46: wait for buf write to finish getting buf from LRU ............. 33
Action ...................................................................................... 33
Event 51: waiting for last i/o on MASS to complete ....................... 33
Action ...................................................................................... 33
Event 52: waiting for i/o on MASS initiated by another task........... 34
Action ...................................................................................... 34
Event 53: waiting for MASS to finish changing to start i/o.............. 34
Action ...................................................................................... 34
Event 54: waiting for write of the last log page to complete ........... 35
Action ...................................................................................... 35
Event 55: wait for i/o to finish after writing last log page ................ 35
Action ...................................................................................... 36
Event 57: checkpoint process idle loop.......................................... 36
Action ...................................................................................... 36
Event 61: hk: pause for some time................................................. 36
Action ...................................................................................... 36
Event 70: waiting for device semaphore ........................................ 37
Action ...................................................................................... 37
Event 83: wait for DES state is changing ....................................... 37
Action ...................................................................................... 37
Event 84: wait for checkpoint to complete...................................... 37
Action ...................................................................................... 38
Event 85: wait for flusher to queue full DFLPIECE ........................ 38
Action ...................................................................................... 38
Event 91: waiting for disk buffer manager i/o to complete ............. 38
Action ...................................................................................... 39
Event 99: wait for data from client .................................................. 39
Action ...................................................................................... 39
Event 104: wait until an engine has been offlined.......................... 39
Action ...................................................................................... 40
Event 124: wait for mass read to finish when getting page ............ 40
Action ...................................................................................... 40
Event 142: wait for logical connection to free up............................ 40
Action ...................................................................................... 41
Event 143: pause to synchronise with site manager...................... 41
Action ...................................................................................... 41
Event 150: waiting for a lock .......................................................... 41
Action ...................................................................................... 42
Event 157: wait for object to be returned to pool............................ 42
Action ...................................................................................... 42
Event 169: wait for message .......................................................... 43
Action ...................................................................................... 43
Event 171: wait for CTLIB event to complete................................. 43
Action ...................................................................................... 43
Event 178: waiting while allocating new client socket .................... 43
Action ...................................................................................... 44
Event 179: waiting while no network read or write is required ....... 44
Action ...................................................................................... 44
Event 197: waiting for read to complete in parallel dbcc................ 44
Action ...................................................................................... 45
Event 200: waiting for page reads in parallel dbcc......................... 45
Action ...................................................................................... 45
Event 201: waiting for disk read in parallel dbcc ............................ 45
Action ...................................................................................... 45
Event 202: waiting to re-read page in parallel................................ 46
Action ...................................................................................... 46
Event 203: waiting on MASS_READING bit in parallel dbcc ......... 46
Action ...................................................................................... 46
Event 205: waiting on TPT lock in parallel dbcc............................. 47
Action ...................................................................................... 47
Event 207: waiting sending fault msg to parent in PLL dbcc.......... 47
Action ...................................................................................... 47
Event 209: waiting for a pipe buffer to read ................................... 48
Action ...................................................................................... 48
Event 210: waiting for free buffer in pipe manager ........................ 48
Action ...................................................................................... 48
Event 214: waiting on run queue after yield ................................... 49
Action ...................................................................................... 49
Event 215: waiting on run queue after sleep.................................. 49
Action ...................................................................................... 50
Event 222: replication agent sleeping during flush......................... 50
Action ...................................................................................... 50
Event 250: waiting for incoming network data................................ 50
Action ...................................................................................... 50
Event 251: waiting for network send to complete........................... 51
Action ...................................................................................... 51
Event 259: waiting until last chance threshold is cleared............... 51
Action ...................................................................................... 52
Event 260: waiting for date or time in waitfor command ................ 52
Action ...................................................................................... 52
Event 266: waiting for message in worker thread mailbox............. 52
Action ...................................................................................... 52
Event 272: waiting for lock on ULC ................................................ 53
Action ...................................................................................... 53
Event 334: waiting for Lava pipe buffer for write ............................ 53
Action ...................................................................................... 53
Event 374: wait for lock pending/data pending to be cleared......... 53
Action ...................................................................................... 54
Event 375: OCM wait for finishing BAST handling ......................... 54
Action ...................................................................................... 54
Event 389: OCM wait for pushing data flag to be cleared .............. 54
Event 380: lock/data pending to reset when OCM_ERR_DIDNTWAIT
55
Action ...................................................................................... 55
Event 483: Waiting for ack of a multicast synchronous message .. 56
Action ...................................................................................... 56
Index ............................................................................................................................................. 57
You must create the monitoring tables using a server installation script. See
“Installing the monitoring tables” on page 3.
Because Adaptive Server versions may change the definitions of the
monitoring tables, Sybase® recommends that when you upgrade, you run the
appropriate installation script before using the monitoring tables.
Note You must have the mon_role to query these tables. See “The mon_role
and additional access controls” on page 11.
LogicalReads
from master..monProcessActivity
order by CPUTime desc
You can use the same query to find the processes that are using the most
physical I/O by substituting PhysicalReads for CPUTime.
The information in each monitoring table can be sorted, selected, joined,
inserted into another table, and treated much the same as the information in a
regular Adaptive Server table.
The monitoring tables are read-only and do not allow updates because they are
in-memory tables that are generated as they are queried. Additionally, you
cannot create triggers on monitoring tables.
You can use access control commands such as grant and revoke select to restrict
access to the monitoring tables.
The monitoring tables definitions use the Component Integration Services
(CIS) proxy table feature, which allows Adaptive Server to define remote
procedures as local tables.
Run the installmontables script using the isql utility. For example:
isql -Usa -Ppassword -Sserver_name -i $SYBASE/ASE-15_0/scripts/installmontables
• For an individual Adaptive Server, the memory required for the each pipe
configuration is:
configuration_value x number_of_engines
• In a clustered environment, each cluster instance allocates the memory
required to create the monitoring table pipes. See “Using monitoring
tables in a clustered environment” on page 17.
monCachePool X
monCachedObject
monCachedProcedures X X
monCachedStatement X X X
monCIPC
monCIPCEndpoints
monLicense
monErrorLog
monIOQueue
monDeviceIO
monDeadLock
monCIPCLinks
monNetworkIO
monCIPCMesh
monDataCache
monIOController
monDBRecovery
monLockTimeout
monCMSFailover
monLogicalCluster
monOpenDatabases
monFailoverRecovery
monInmemoryStorage
monCLMObjectActivity
monOpenObjectActivity
monDeviceSpaceUsage
monLogicalClusterRoute
monLogicalClusterAction
monDBRecoveryLRTypes
monClusterCacheManager
monLogicalClusterInstance
X
X
X
X
X
X
X
X
X
X
X
X
enable monitoring
SQL batch capture
deadlock pipe active
X X
deadlock pipe max messages
errorlog pipe active
X X
errorlog pipe max messages
Configuring the monitoring tables to collect data
X X
per object statistics active
plan text pipe active
lock timeout pipe active
X X
lock timeout pipe max messages
plan text pipe max messages
process wait events
SQL text pipe active
SQL text pipe max messages
statement cache size
statement pipe active
statement pipe max messages
statement statistics active
wait event timing
max SQL text monitored
enable stmt cache monitoring
monThread
monSysLoad
monSysWaits
monWorkload
monThreadPool
monWorkQueue
monSysSQLText
monSysPlanText
monTableTransfer
monWaitClassInfo
monSysStatement
monWaitEventInfo
monWorkloadRaw
monTableColumns
monTempdbActivity
monWorkloadProfile
monStatementCache
monTableParameters
monWorkloadPreview
monSysWorkerThread
monTableCompression
X
X
X
X
X
X
X
enable monitoring
X X
SQL batch capture
deadlock pipe active
deadlock pipe max messages
errorlog pipe active
errorlog pipe max messages
Configuring the monitoring tables to collect data
X X
X
X
per object statistics active
X plan text pipe active
lock timeout pipe active
lock timeout pipe max messages
X
Error 12036
If you query the monitoring tables, but have not enabled all the configuration
parameters the tables require, Adaptive Server issues error 12036 but still runs
the query. Although many of the monitoring tables contain accurate data even
if you have not enabled all the configuration parameters, some data is incorrect
because Adaptive Server is not collecting the data required to populate one or
more columns in the table.
Consider enabling the required configuration parameters. See Table 1-1 for
details.
Because of the potential for wrapping, the values of some columns in the
monitoring tables may not reflect the total accumulated value since the server
started. To effectively use this column data, calculate the difference in counter
values over specific time periods and use the result of this sample instead of the
cumulative value. For example, use the difference between the current value
and the value 10 minutes earlier instead of the current value.
The values of different counters tend to increase at different rates. For example,
on a busy system, the LogicalReads column in the monDataCache table
increases rapidly. Use monTables to identify counters that are likely to wrap; a
value of 1 or 3 in the monTableColumns.Indicators specifies columns that are
prone to wrapping. A server’s behavior depends on load and application
activity , and the Indicator column provides a general guideline; review your
server’s data to identify counters that tend to wrap.
To display a list of columns that are counters, execute:
select TableName, ColumnName
from master..monTableColumns
where (Indicators & 1) = 1
• monDeadLock
• monSysStatement
• monSysSQLText
• monSysPlanText
Note Some historical tables require that you set other configuration parameters
in addition to those listed above. See Table 1-3 on page 19.
The values of the max messages parameters determine the maximum number
of messages per engine. Multiply this value by the number of configured
engines to determine the total number of messages that can be stored.
Each message stored adds one row to the monitoring table. Once all entries in
the buffer have been used, new messages overwrite old messages in the buffers,
so only the most recent messages are returned.
See Chapter 5, “Setting Configuration Parameters” of the System
Administration Guide, Volume 1 and “Configuring the monitoring tables to
collect data” on page 5 for more information about sp_configure.
Adaptive Server returns only the data that was added since the previous read,
so you may get seemingly inconsistent result sets from queries that attempt to
filter results using a where clause because:
• A select from the monitoring table marks all previously unread messages
in the table as having been read.
• Adaptive Server language layer performs the filtering, so rows not
contained in the result set of the query are still considered as “seen” by the
connection.
In this example, the buffer associated with the monErrorLog table contains two
messages:
(2 rows affected)
If you reconnect, the two messages are returned, but you receive the following
messages when you filter the result set with a where clause:
select SPID, ErrorMessage
from master..monErrorLog
where SPID=20
SPID ErrorMessage
------ --------------------------------------
20 An error from SPID 20
(1 row affected)
And:
select SPID, ErrorMessage
from master..monErrorLog
where SPID=21
SPID ErrorMessage
------ --------------------------------------
(0 rows affected)
Because the first query moved the client connection’s context to include both
of the rows for spids 20 and 21, the second query does not return either of these
rows. The filter specified in the first query required the server to retrieve and
evaluate both rows to return the specified result. Adaptive Server marks the
row for spid 21 as “read” even though it did not participate in a result set
returned to the client connection.
Note Because of the stateful nature of the historical monitoring tables, do not
use them for ad hoc queries. Instead, use a select * into or insert into
to save data into a repository or temporary table and then perform analysis on
the saved data.
• The statement performs more work, consuming more CPU, and having a
CpuTime value greater than the previous maximum, so there is no match
in the where clause, and the query returns no results.
• The statement finishes executing before the second query executes,
yielding no results unless another statement used exactly the same amount
of CPU as the previously obtained maximum.
• The statement does not use any additional CPU, and its value of CpuTime
still matches the maximum. Only this scenario produces the expected
results.
Sybase recommends that you save data from the monitoring tables to a
temporary table or repository before you analyze it. Doing so freezes the data
and eliminates the potentially undesirable results due to transient data or the
stateful nature of the historical monitoring tables.
If you do not specify an InstanceID when you query a monitoring table or call
a monitoring table RPC, the instance uses the current system_view
configuration.
The session system view is inherited from its host logical cluster. Select the
@@system_view global variable to determine the current system view.
Table 1-3 describes monitoring tables that return identical information for all
instances.
Table 1-3: monitoring tables that include the same information for all
instances
Table name Description
monMon Metadata view is identical on all instances.
monTableColumns Metadata view is identical on all instances.
monTableParameters Metadata view is identical on all instances.
monTables Metadata view is identical on all instances.
monWaitClassInfo List of descriptions is identical on all instances.
monWaitEventInfo List of descriptions is identical on all instances.
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
To calculate performance metrics for specific sample periods, create a
baseline table that stores monitor values at the beginning of the sample
period. You can calculate the change in monitor values during the sample
period by subtracting the baseline values from the values at the end of the
sample period.
Use queries from the following examples to calculate the hit ratio for a
data cache, create a baseline, and calculate the amount of activity during
the sample period.
• To create a stored procedure that prints the executed SQL and the
backtrace for any process currently executing stored procedures, enter:
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
• To identify any indexes that were used for the table in the database with
dbid 5 and object ID 1424005073, enter:
select DBID, ObjectID, LastUsedDate, UsedCount
from master..monOpenObjectActivity
where dbid=5 and ObjectID=1424005073 and IndexID > 1
To determine if you can remove an index because it is not used by the
applications running on your server:
a Run all queries in your applications that access the table in question.
Ensure that Adaptive Server runs long enough so all applications have
performed their selects.
b To determine whether your application did not use any of the indexes
in your database, execute:
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
Topic Page
Event 19: xact coord: pause during idle loop 27
Event 29: waiting for regular buffer read to complete 27
Event 30: wait to write MASS while MASS is changing 28
Event 31: waiting for buf write to complete before writing 29
Event 32: waiting for an APF buffer read to complete 29
Event 35: waiting for buffer validation to complete 30
Event 36: waiting for MASS to finish writing before changing 30
Event 37: wait for MASS to finish changing before changing 31
Event 41: wait to acquire latch 31
Event 46: wait for buf write to finish getting buf from LRU 33
Event 51: waiting for last i/o on MASS to complete 33
Event 52: waiting for i/o on MASS initiated by another task 34
Event 53: waiting for MASS to finish changing to start i/o 34
Event 54: waiting for write of the last log page to complete 35
Event 55: wait for i/o to finish after writing last log page 35
Event 57: checkpoint process idle loop 36
Event 61: hk: pause for some time 36
Event 70: waiting for device semaphore 37
Event 83: wait for DES state is changing 37
Event 84: wait for checkpoint to complete 37
Event 85: wait for flusher to queue full DFLPIECE 38
Event 91: waiting for disk buffer manager i/o to complete 38
Event 99: wait for data from client 39
Event 104: wait until an engine has been offlined 39
Event 124: wait for mass read to finish when getting page 40
Event 142: wait for logical connection to free up 40
Event 143: pause to synchronise with site manager 41
Event 150: waiting for a lock 41
Event 157: wait for object to be returned to pool 42
Event 169: wait for message 43
Adaptive Server task management includes three states for a process: running,
runnable, sleeping, and blocked. When a process is not running (executing on
the CPU), it is:
• Waiting on the CPU (the “runnable” state)
• Sleeping because of disk or network I/O
• Blocked on a resource (a lock, semaphore, spinlock, and so on)
A wait event occurs when a server process suspends itself, sleeps, and waits for
another event to wake it. Adaptive Server includes unique wait event IDs for
each of these wait events. Query monSysWaits and monProcessWaits to find the
number of times—and the total amount of time—that a process waited for each
wait event.
Note The value of WaitTime in the monSysWaits table is in seconds. The value
of the WaitTime in the monProcessWaits table is in milliseconds.
This chapter describes a selection of the more common wait events and actions
you can perform to avoid them.
Action
No action necessary. Even with high values for WaitTime, event 19 does not
affect overall performance.
Action
Because this event’s value for monSysWaits.WaitTime is measured in seconds,
the value for WaitTime for this event should be much less than the value for
Waits (an average physical read should be 2–6 milliseconds; more than 10
milliseconds is considered slow). A high average physical read value may
indicate poor disk throughput performance. Query monIOQueue and
monDeviceIO to identify slow or overloaded disks.
A high value for Waits, regardless of the value for WaitTime, may indicate that
query plans are not as effective as they could be. If you encounter a high value
for Waits, a table scan or Cartesian product may have occurred, or the optimizer
may have selected a bad plan, due to bad, stale, or missing statistics. Consider
adding an index on specific columns to the table on which this occurred.
A high value for Waits can also indicate the data caches are too small, with
active pages first pushed out and then reread. Query monOpenObjectActivity,
monProcessActivity, monDataCache, monCachPool, and monProcessObject to
determine how to proceed.
Action
You may be able to reduce high wait times by:
• Increasing the size of the data cache
• Using cache partitions or named caches to separate memory-intensive
objects
Action
Generally, the value for WaitTime for event 31 should be less than the value for
Waits. High values for WaitTime may indicate disk contention or slow
performance. Query monIOQueue and monDeviceIO to identify overloaded or
slow disks.
A high value for WaitTime for event 31 may also indicate that the data cache is
too small, causing pages in the data cache to reach the wash area frequently and
forcing the checkpoint process to perform more writes than necessary.
Action
A high value for Waits may indicate that Adaptive Server is using
asynchronous prefetch too often. Tuning the local APF limit for cache pools
may reduce contention for APF pages.
Since Adaptive Server often uses APF for table scans, contention involving
APF reads may indicate that an application is performing too many table scans
because of factors such as missing indexes.
Action
The value for WaitTime for event 35 should be quite small. If the value is large,
many processes are accessing the same page at the same time, or there is CPU
contention. Query monEngine to determine if the engines are overloaded, and
run system-level utilities to determine if there is overall CPU contention.
Action
A high value for WaitTime indicates that some condition may be causing
diminished I/O or data cache manager performance. Normally, the value for
Waits should be higher than the value for WaitTime. Query monIOQueue and
monDeviceIO to determine if a disk device is slow or overloaded.
Action
Typically, the values for Waits for event 37 should be much higher than the
values for WaitTime. If the values are not higher for Waits, either many
processes are accessing the same MASS at once, or there is CPU contention.
Query monEngine to determine if the engines are overloaded. Run system-level
utilities to determine if there is overall CPU contention.
Action
Consider reducing contention for pages by changing index definitions in a way
that alters the physical distribution of data across the data and index pages
within your table, or modifying your application to reduce contention.
If the average value for WaitTime is high, event 41 may occur because of an
Adaptive Server resource shortage, resulting from:
• A hash table that is too small for a lock, resulting in very long hash chains
that Adaptive Server must search.
• An operating system issue during which calls that should be quick are a
bottle neck (for example, starting asynchronous I/O, which should return
immediately, blocks because of operating system resource limitations.
• Extremely high inserts and expanding updates. Page allocations take place
frequently, and contention for the allocation page latch results in a high
number of Waits. Use dbcc tune(des_greedyalloc) to reduce this contention.
For information about latch contention, see Performance and Tuning
Series: Monitoring Adaptive Server with sp_sysmon.
Event 46: wait for buf write to finish getting buf from
LRU
A spid attempts to acquire a buffer from the least recently used (LRU) chain.
However, the buffer has an outstanding write that must finish before Adaptive
Server can use the buffer for a different page.
Action
Event 46 may indicate that:
• A cache is so busy that the buffer at the end of the LRU chain is still
processing. Query monDataCache and monCachePool to determine which
cache is busy. Possible resolutions include: increasing the size of the
cache, using sp_poolconfig to increase the wash size, and increasing the
housekeeper activity by retuning enable housekeeper GC.
• Disk writes are taking a long time to complete. Query monIOQueue and
monDeviceIO to determine if there is a slow or overloaded disk device.
Action
A high value for WaitTime indicates that writes may be taking a long time to
complete. Typically, the value for Waits should be much higher than the value
for WaitTime. Query monIOQueue and monDeviceIO to determine if there is a
slow or overloaded disk device.
Action
A high value for WaitTime for this event indicates that writes may be taking too
long to complete. Typically, the value for Waits should be much higher than the
value for WaitTime. Query monIOQueue and monDeviceIO to determine if there
is a slow or overloaded disk device.
Action
Normally, the value for Waits for event 53 should be higher than the value for
WaitTime. If it is not higher, either many processes are simultaneously
accessing the same MASS, or there is CPU contention. Query monEngine to
determine if the engines are overloaded. Run system-level utilities to determine
if there is overall CPU contention.
Action
A high average value for WaitTime for event 54 indicates that writes are taking
a long time to complete. Typically, the value for Waits should be much higher
than the value for WaitTime. Query monIOQueue and monDeviceIO to
determine if there is a slow or overloaded disk device.
High values for Waits, regardless of the average time, may indicate contention
for the last log page. Increase the size of the user log cache to reduce
contention, or group operations for applications to avoid committing every
row.
Event 55: wait for i/o to finish after writing last log page
Indicates a process has initiated a write operation on the last page of the
transaction log, and must sleep until the I/O completes. A high value for the
Waits column for event 55 indicates that Adaptive Server is making a large
number of updates to the transaction log because of committed transactions or
other operations that requiring writing the transasction log to disk.
Action
A high value for WaitTime for event 55 indicates that writes may be taking a
long time to complete. Typically, the value for Waits should be much higher
than the value for WaitTime
Action
Event 57 may accumulate large amounts of time since the checkpoint process
starts when the server starts. However, you need not perform any actions based
on this event.
Action
Event 61 is expected, and may show large values on servers that have run for
along time. Typically, you need not perform any actions based on this event.
Action
If you are not using Adaptive Server mirroring, set disable disk mirroring to 1.
If you are using mirroring, high values for WaitTime may indicate a loss of
performance from device contention. Query monIOQueue and monDeviceIO to
determine if there is a slow or overloaded disk device. Evaluate the results to
determine if you can shift some of the load to other devices.
Action
A high value for Waits for event 83 may indicate a shortage of object
descriptors. You may need to increase the number of open objects.
Action
Although it is unlikely that the Waits value is high for event 84, a high value
may indicate that many drops are occurring simultaneously, or that the
checkpoint process is taking a long time. If the checkpoints are running for an
excessive amount of time, try decreasing the recovery interval (in minutes).
Action
This event is normal during a dump database. If the average value for WaitTime
is exceptionally high (higher than 2), check other events to determine what is
slowing down the flusher processes.
Action
Generally, the value for WaitTime for event 91 should be much lower than the
value for Waits. High values for WaitTime indicate possible disk contention or
slowness. Query monIOQueue and monDeviceIO to determine if there is a slow
or overloaded disk device.
Action
A high average value for WaitTime for event 99 indicates slow communication
with the remote server. This may be due to complex RPC calls that take a long
time to complete, performance issues in the remote server, or a slow or
overloaded network.
Action
The average value for WaitTime for event 104 should be very close to 30. If
engines are frequently taken offline, this value may be slightly lower. If the
average value for WaitTime is significantly higher or lower than 30, contact
Sybase Technical Support.
Action
The value for WaitTime for event 124 should be much lower than the value for
Waits. The average value for WaitTime is high if disk performance is poor.
Query monIOQueue and monDeviceIO to determine if there is a slow or
overloaded disk device.
Action
Event 142 should normally have a very low average value for WaitTime. A high
value for WaitTime may indicate there is a problem communicating with the
remote server.
Action
A high average value for WaitTime for event 143 may indicate performance
issues on the remote server or a slow or overloaded network. Query
monProcessWaits for WaitEventID 143 to determine which spids have high wait
times.
Action
The value for WaitTime for this event can be high if there is contention for a
particular table or page (such as a high number of heap inserts). Query
monLocks and monOpenObjectActivity to identify objects that are experiencing
heavy lock contention.
In some situations, you can reduce the amount of lock contention by changing
the table’s locking scheme from allpages locking to data-only locking.
Application or database design typically causes lock contention; evaluate your
application design to determine the best method to reduce lock contention,
while still considering other application requirements.
Action
If the average value for WaitTime for event 157 is low, performance may not
noticeably degrade. However, any Waits on this event indicate a condition you
can correct by increasing the configured number of structures for which
Adaptive Server is waiting. Use sp_countmetadata and sp_monitorconfig to
identify which structures are using the maximum configuration to determine
which resources you should increase.
Action
Typically, the average value for WaitTime for event 169 is very small. However,
if the value for WaitTime is large, query monProcessWaits for rows with
WaitEventID value of 169 to determine which jobs have long wait times for this
event.
Action
A high average value for WaitTime for this event may indicate remote CIS
server performance issues or a slow or overloaded network. Query
monProcessWaits for WaitEventID 171 to determine which spids have high wait
times for this event.
Action
You need not perform any actions based on event 178. However, you can use
some of its information for analysis. The value for WaitTime is roughly
equivalent to the amount of time the server has been running. The values for
Waits is a measure of how many connection attempts have been made since the
server started.
Action
High values for event 179 indicate high levels of network activity. If the
network activity is unexpectedly high, query other monitoring tables—such as
monNetworkIO and monProcessNetIO—to determine which jobs are slowing
network performance.
A high value for the Waits column for event 179 may indicate that dbcc
checkstorage identified a large number of possible consistency faults. Check
the reports from dbcc checkstorage for more information.
Action
Generally, the value for WaitTime for event 197 should be much lower than the
value for Waits. A high average value for WaitTime may indicate poor disk
throughput performance. Query monIOQueue and monDeviceIO to determine if
there is a slow or overloaded disk device.
Action
Generally, the value for WaitTime for event 200 should be much lower than the
value for Waits. A high average value for WaitTime may indicate poor disk
throughput performance. Query monIOQueue and monDeviceIO to determine if
there is a slow or overloaded disk device.
Action
Generally, the value for WaitTime for event 201 should be much lower than the
value for Waits. A high average value for WaitTime may indicate poor disk
throughput. Query monIOQueue and monDeviceIO to determine if there is a
slow or overloaded disk device.
Action
Generally, the value for WaitTime for event 202 should be much lower than the
value for Waits. A high average value for WaitTime may indicate poor disk
throughput. Query monIOQueue and monDeviceIO to determine if there is a
slow or overloaded disk device.
Action
Generally, the value for WaitTime for event 203 should be much lower than the
value for Waits. A high average value for WaitTime may indicate poor disk
throughput. Query monIOQueue and monDeviceIO to determine if there is a
slow or overloaded disk device.
Action
The frequency of event 205 depends on how many text and image columns are
contained in the tables you are checking. An exceptionally high average value
for WaitTime may indicate some resource contention for the worker thread
holding the lock. Check CPU and disk metrics to determine if there is
contention.
Action
Event 207 is typically caused by Adaptive Server reporting a large number of
faults. You need not take any actions for this event, other than to follow the
normal process of running dbcc checkverify to verify and analyze the faults.
Action
The average value for WaitTime for event 209 should be very low. High average
values for WaitTime may indicate that the sort manager producer processes
cannot generate data fast enough to keep the consumer processes busy. Check
the overall system performance to determine if Adaptive Server has sufficient
CPU and I\O bandwidth.
Action
The average value for WaitTime for event 210 should be very low. High average
values for WaitTime may indicate that Adaptive Server has some resource
contention. Run sp_monitor or sp_sysmon, or query monEngine to determine if
Adaptive Server has sufficient CPU resources.
Action
Busy servers typically have high values for Waits. However, high values for
WaitTime or the time slice setting may indicate that Adaptive Server has a large
number of spids waiting to execute, or that is has spids running which were
heavily CPU bound and are not readily yielding their CPU. Query
monProcessActivity to identify jobs that have high CPUTime.
Action
Event 215 is a common wait event. The value for Waits for event 215 is
typically large. Busy servers have high values for WaitTime because processes
are waiting for the Adaptive Server runnable queue for a long time. Reduce the
value for time slice to allow more processes to access CPU (this also reduces
the average time some processes spend in the CPU) or, if there are sufficient
CPUs available on the host machine, increase the number of online engines.
Action
Depending on the level of activity within a replicated database, event 222 may
typically have high values for WaitTime. Typically, you need not perform any
actions for this event.
Event 250 typically occurs when the application remains connected to the
Adaptive Server but is idle.
Action
Because event 250 occurs before Adaptive Server processes each command
from a client, the number of Waits and WaitTime may typically be high.
You can use event 250 to estimate how many requests the server has handled
from clients.
A high WaitTime value for this event can indicate a large number of idle client
connections, or that some client connections remain idle for a long period of
time. This wait event can occur between batches or commands sent by the
client application, so the Waits value may be high if applications submit a large
number of separate commands or batches.
Action
Event 251 may indicate that Adaptive Server is sending large reply sets to
clients, or it may indicate a slow or overloaded network. Check the average
packet size in the monNetworkIO and monProcessNetIO tables. In each of these
tables, the average size is:
(BytesSent) / (PacketsSent)
Increasing the client application’s network packet size may improve network
performance.
Action
A high value for Waits for this event may indicate that some databases need
larger log segments. A high value for the average WaitTime may indicate that
you have not defined a threshold procedure, or that a procedure is taking a long
time to free log space.
Increasing the frequency of transaction dumps on the database or allocating
more space to the log segment may reduce the value for WaitTime.
Action
When a process uses a waitfor command, Adaptive Server puts it to sleep until
the requested time expires. Event 260 measures this amount of sleep time.
Action
To evaluate event 266, determine the number of parallel queries that were run
from monSysWorkerThread.ParallelQueries. If the value for WaitTime is high
per query, Adaptive Server may have a resource shortage (generally, CPU
time). A high WaitTime value may also indicate unbalanced partitions on
objects, causing some worker threads to wait for others to complete.
Action
Typically, the average value for WaitTime for event 272 is quite low. A high
value for average WaitTime may indicate high wait times for other events,
forcing the ULC lock holder to wait. You can analyze other wait events to
determine what is causing these waits.
Action
The value for WaitTime should be low when processes execute properly. If this
is not the case, contact Sybase Technical Support.
Action
A high number of conflicting requests for the same lock across different nodes
indicates that the application is issuing conflicting lock requests on the same
object from multiple nodes. The lock emanates from the object coherency
manager, which manages the metadata describing database objects across all of
the instances in the cluster.
You may improve performance by directing most requests for the object in
question to a single node.
Action
A high value for this wait event means that different nodes are sending a high
number of conflicting requests for the same ocm_lock. The application is
probably issuing these conflicting lock requests from multiple nodes. You may
improve performance by directing most requests for the ocm_lock to a single
node.
Action
A high value for this wait event indicates there are numerous conflicting
requests for the same ocm_lock across different nodes. This may be caused by
the application issuing conflicting lock requests on the same object from
multiple nodes. You may improve performance by directing requests for the
object in question to a single node.
Action
No action required.
E
A enable cis configuration parameter 5
enable monitoring configuration parameter 5
access controls, in mon_role 11
error 12036, how to use 11
accessing monitoring tables remotely 4
ad hoc queries, tables not to use 15
Adaptive Server, configuring for statement cache 19
algorithms, to determine size of pipe error parameter F
6
function
allocating memory, for pipe error messages 6
show_cached_text 20
B G
buffer read, waiting for, event 29 27
global monitor counters 2
buffers, configuring for monitoring tables 13
C H
hash key, obtaining from SQL text 20
checkpoint process idle loop, wait event 57 36
historical monitoring tables, list of 12
client connections and monitoring tables 14
Cluster Edition
adding instanceID 18
installing monitoring tables in version 15.0.1 3 I
using monitoring tables 17
command installing
set 17 monitoring tables 3
configuration parameters monitoring tables for 15.0.1 Cluster Edition 3
enable cis sp_configure, for configuration options
monitoring tables for versions 15.0.2 and later 3
5 monitoring tables for versions earlier than 15.0.2 3
enable monitoring sp_configure, for installmontables script 3
instanceID column, for Cluster Edition 18
configuration options 5
list of 5
required for some monitoring tables 7
configuring monitoring tables with sp_configure 5
M O
MASS (memory address space segment) option
defined 28 prm_opt 20
waiting to change, wait event 30 28
max messages parameters 14
mon_role 2
and additional access controls 11 P
not required in Workload and LogicalCluster tables parameters
11 max messages 14
monCachedProcedures table 2 pause for some time, wait event 61 hk 36
monCachedStatement table 19 pause to synchronise with site manager, wait event 143
monDeadLock table 2 41
monitor counters pipe error messages
global 2 allocating memory for 6
monitoring list of 6
information sources of 2 pipe error parameters
performance with Transact-SQL 2 list of 6
monitoring tables 1–23 prm_opt option, valid values 20
affected by configuration options 7
CIS and, 3
client connections 14
configuration options 5 Q
configuring buffers 13 querying monitoring tables, examples 21
data not stored on disk 1
examples 21–23
for statement cache update, select, delete commands
19 R
installing 3 remotely accessing monitoring tables 4
installmontables script 3 in version 15.0.2 and later 4
introduction 1 replication agent sleeping during flush, wait event 222
mon_role 2 50
not created by default 1 role
querying 21 mon_role 11
remotely accessing and editing 4
remotely accessing and editing for 15.0.2 and later 4
stateful historical monitoring tables 12–16
transient data 16 S
using in clustered environment 17 set 19
using Transact-SQL to monitor performance 2 command 17
monProcessSQLText table 2
show_cached_text function, views SQL text of a cached
monProcessWaits table 2
statement 20
monStatementCache table 19
sources of monitoring information 2
monSysWaits table 2
sp_configure, stored procedure 5
stateful monitoring tables 12–16
statement cache