dsr.bat
or dsr.sh
for Daily Summary Reporttypeperf -si 2 "\LogicalDisk(*)\*"
Not yet implemented
typeperf -si 2 "\Processor(*)\*"
typeperf -si 2 "\System\*"
and also adding column 'nproc' and columns '*loadAverage*' load average is calculated based on Windows 'Processor Queue Length' using same algorithm (exponentially-damped moving averages) as Linuxtypeperf -si 2 "\Paging File(_Total)\*" "\Memory\*"
typeperf -si 2 "\Network Interface(*)\*"
powershell "gwmi win32_logicaldisk | Format-Table -HideTableHeaders DeviceId, SizeKb, UsedKb, AvailableKb, UsedPct, DeviceId"
not yet implemented
, Linux: ps -e -ww --format pid,ppid,euser,tty,vsz,rss,etimes,cputime,pmem,pcpu,args --sort=-pcpu | head -n ##
, for Windows powershell "Get-Process | sort -desc cpu | select -first ##"
SshConnection.logging.enable
logfiles.shortcuts=*.console
CentralPersistReader.getGraphData.removeSeriesWhenAllRowsAreNull=true|false)
^(DUMP DATABASE|DUMP TRANSACTION).*
CmActiveStatements.sample.holdingLocks.gt.SecondsWaiting=##
)CmCachedProcs.sample.statementCacheObjects=true
and CmCachedProcs.sample.dynamicSqlObjects=true
CmCachedProcsSum.sample.statementCacheObjects=true
and CmCachedProcsSum.sample.dynamicSqlObjects=true
XmlPlanCache.lowOnMememory.removeAgeInMinutes=60
)CmSummary.suspectPageCount.enabled=false
, CmSummary.alarm.system.if.suspectPageCount.gt=###
)CmSummary.sample.tempdb.spid.usage=false
)SqlServerTune.onPcsDatabaseRollover.captureQueryStore = true|false
(if you want to change this)SqlServerTune.onPcsDatabaseRollover.captureQueryStore.daysToCopy = #
(if you want to change how many days)SqlServerTune.onPcsDatabaseRollover.captureQueryStore.skipServer = regex
(if you want to skip some servers)SqlServerTune.onRefresh.setLockTimeout = true|false
(if you want to change this)SqlServerTune.onRefresh.setLockTimeout.ms = ms
(if change the timeout value)SqlServerTune.objectIdCahe.bulkLoadOnStart=false
)CounterControllerPostgres.ipToHostCache.ttl.ms=600000
)CmSummary.getBlockingLockCount=false
)${activeAlarmCount}
in writer templates${dbxCentralUrl}
in writer templates${Version}
information for example ${Version.getAppName()}
${System}
information for example ${System.getProperty("some.prop.name")}
AlarmEventConfigResourceIsUsedUp
if ErrorNumber 1601 -- There are not enough 'user connections' available to start a new processAlarmEventFullTranLog
if ErrorNumber 7413 -- # task(s) are sleeping waiting for space to become available in the log segment for database XXXXX.AlarmEventErrorLogEntry
if Severity > 16 (coniguration CmErrorLog.alarm.system.if.Severity.gt
)CmErrorLog.alarm.system.errorNumber.skip.list=123,321,231
where the numers are a comma separeted list of error numbers to skip/discard.
CmOpenDatabases.sample.monSqltext=true
CmOpenDatabases.sample.showplan
AlarmEventConfigResourceIsLow
if "Pct_act" is lower than 90% for config 'number of open objects', 'number of open partitions', 'number of open indexes', 'number of open databases', 'number of locks', 'number of user connections'AlarmEventConfigResourceIsUsedUp
if "Num_free" is lower than 2 for config 'number of open objects', 'number of open partitions', 'number of open indexes', 'number of open databases', 'number of locks', 'number of user connections'AlarmEventConfigResourceIsLow
if "CacheHitPct" is lower than 25%, config option: CmStatementCache.alarm.system.if.CacheHitPct.lt=25PersistentCounterHandler.ddl.connCheckPeriod=300000
PersistentCounterHandler.sqlCapture.connCheckPeriod=300000
ToFile | Write Active alarms to one file, and the history to another log file. |
ToMail | Send a SMTP mail |
ToNagiosNsca | Send Alarms to Nagios via the NSCA protocoll |
ToNagiosRest | Send Alarms to Nagios via the REST protocoll |
ToRest | Send Alarms to a HTTP server using POST where payload will be a JSON object |
ToSmsViaSnpp | Send Alarms to a SMS/TEXT via SNPP Simple Network Paging Protocol |
ToStdout | Simply print the Alarms to Standbard OUT |
ToSunMcFile | Send Alarms to Sun Management Center, write as a text file with tags. |
ToSyslog | Send Alarms to Syslog server (narmally a Unix/Linux system logger) |
BlockingLockAlarm | Found Blocking locks in '${servername}'. Count=${cnt}. |
FullTranLog | Full transaction log in some database(s) in '${servername}'. Count=${cnt}. |
FullTranLog | Full transaction log in '${servername}', dbname='${dbname}'. |
HighCpuUtilization | High CPU Utilization in '${servername}'. CPU at ${totalCpuUsagePct}. |
HighCpuUtilization | High ${cpuType} Utilization in '${servername}'. CPU at ${totalCpuUsagePct} percent (total=${totalCpuUsagePct}%, user=${userCpuUsagePct}%, system=${systemCpuUsagePct}%, idle=${idleCpuUsagePct}%). |
LastBackupFailed | Last Backup FAILED in Server '${servername}' and dbname '${dbname}'. |
LongRunningDetachedTransaction | Found Long running transaction, with state 'Detached' in '${servername}', dbname='${dbname}'. Seconds=${seconds}, TranName='${tranName}'. |
LongRunningTransaction | Found Long running transaction in '${servername}'. Seconds=${sec}. |
LongRunningTransaction | Found Long running transaction in '${servername}', dbname='${dbname}'. Seconds=${sec}, TranName='${oldestTranName}'. |
LowDbFreeSpace | Low DB DATA Free Space in Server '${servername}' and dbname '${dbname}', FreeSpaceInMB=###, UsedSpaceInPcs=###. |
LowLogFreeSpace | Low LOG DATA Free Space in Server '${servername}' and dbname '${dbname}', FreeSpaceInMB=###, UsedSpaceInPcs=###. |
LowOsDiskFreeSpace | Low Operating System Disk Free Space in Server '${servername}' at MountPoint '${mountPoint}', FreeSpaceInMB=###, UsedSpaceInPcs=###. |
OldBackup | Old or No backup found in '${servername}', dbname='${dbname}', for backup type '${dumpType}', Backup Age in Hours '###'. |
OsLoadAverage | Exhausting CPU Scheduling resources at OperatingSystem level on hostname '${hostname}'. adjLoadAverage: 1min=${avg_1min}, 5min=${avg_5min}, 15min=${avg_15min}. |
ProcedureCacheLowOnMemory | Stored Procedure Cache Memory is getting low in server '${servername}'. FreeSpaceInMB=###, UsedSpaceInPcs=###. |
ProcedureCacheOutOfMemory | Out Of Stored Procedure Cache Memory in server '${servername}'. |
RunQueueLength | Exhausting CPU Scheduling resources in '${servername}'. RunQueueLength: avg_1min=${avg_1min}, avg_5min=${avg_5min}, avg_15min=${avg_15min}. |
SrvDown | Server is DOWN. Name='${servername}' |
SrvDown | Server is DOWN. Name='${servername}', url='${url}' |
StatementCacheAboveConfig | Statement Cache is above the configured value in server '${servername}'. configuredSpaceInMb=###, usedSpaceInMb=###, usedSpaceInPct=###, usedPercentOfProcedurMemory=###. |
\set varName='tab1'
go
select * from ${varName}
go
\ssh user@hostname "echo 'dummy'; pwd; id; date"
set statistics io on
' create an extra jtable with the output and a summary (for readability)CacheReplacementSlidePct
reflects.PagesRead
within the slide window.Tool Name | Status | Description |
---|---|---|
IqTune | Beta | Sybase/SAP IQ |
RsTune | Alpha | Sybase/SAP Replication Server |
RaxTune | Beta | Sybase/SAP Replication Agent X (Oracle, DB2, MSSQL) |
HanaTune | Alpha | SAP HANA |
SqlServerTune | Alpha | Microsoft SQL-Server |
OracleTune | Pre-Alpha | Oracle |
Collapse IOCPUTime into IdleCPUTime
' was introduced, so you can decide if you want to disregard the column IOCPUTime in the calculations. Or actually
move/collapse the IOCPUTime counter into the IdleCPUTime counter.WaitTime|Wiats|WaitTimePerWait
)WaitTime|Wiats|WaitTimePerWait
)WaitTime|Wiats|WaitTimePerWait
)WaitTime|Wiats|WaitTimePerWait
)order by
has been applied...order by
for the Counter Models are:
order by LogicalReads desc
order by CachedKB desc
go 10 wait 100
will execute the SQL batch 10 times, and wait 100 ms after each SQL batch has been sent.plain
- This temporary sets 'As Plain Text' but just for this SQL batch. ResultSets for this SQL Batch will be displayed in a RSyntaxtTextArea object.top #
- This temporary sets 'Limit ResultSet rows' but just for this SQL batch.psql
- This temporary sets 'Print the executed SQL Statement in the output' but just for this SQL batch.prsi
- This temporary sets 'Print info about the ResultSet data types etc in the output' but just for this SQL batch.time
- This temporary sets 'Print how long time the SQL Batch took, from the clients perspective' but just for this SQL batch.rowc
- This temporary sets 'Print the rowcount from JDBC driver, not the number of rows actually returned' but just for this SQL batch.append
- This temporary sets 'Do NOT clear results from previous executions. Append at the end' but just for this SQL batch.nodata
- This temporary sets 'Do NOT read the result set rows, just read the column headers. just do rs.next(), no rs.getString(col#)' but just for this SQL batch.jps
jstack on-the-pid-for-AseTune
jps
and jstack
is located under the JDK installation $JAVA_HOME/bin (possible c:\Program Files\Java\jdk*\bin)(script row #)
in ASE Error massages does now reflect the correct row in the script even if a "selection" is executed.Msg 99999, Level 16, State 1:
Server 'GORAN_1570_DS', Line 1 (script row 12), Status 0, TranState 1:
Dummy Error message, just to test
Rollbacks
- Total number of transactions that have been rolled back on the server.Selects
- Total number of select operations that have been executed on the server.Updates
- Total number of update operations that have been executed on the server.Inserts
- Total number of insert operations that have been executed on the server.Deletes
- Total number of delete operations that have been executed on the server.Merges
- Total number of merge operations that have been executed on the server.TableAccesses
- Number of pages where data was retrieved without an index on the server.IndexAccesses
- Number of pages where data was retrieved using an index on the server.TempDbObjects
- Total number of temporary tables created on the server.WorkTables
- Total number of work tables created on the server.ULCFlushes
- Total number of times the User Log Cache was flushed.ULCFlushFull
- Number of times the User Log Cache was flushed because it was full.ULCKBWritten
- Number of kilobytes written to the user log cache.PagesRead
- Number of pages read on server wide.PagesWritten
- Number of pages written on server wide.PhysicalReads
- Number of buffers read from the disk.PhysicalWrites
- Number of buffers written to the disk.LogicalReads
- Number of buffers read from cache.fullTranslogCount
- Checking if any database transaction logs are full, using lct_admin('logfull', dbid)
was to expensive, or time consuming.monOpenDatabases.TransactionLogFull
column, this is only done if the user has mon_role
granted and configuration enable monitoring
is enabled.
If the above is not true, we fall back and use the old lct_admin('logfull', dbid)
check.oldestOpenTranInSec
- If you are connected with low authorized user you would get 'SELECT permission denied on object syslogshold'
when trying to get oldest open transaction. If you are not authorized to select on syslogshold, a static value of -99 will be used instead.NumLevel0Waiters
- Number of times Level0 Scan start had to wait due to Utilities that requested us to waitAvgLevel0WaitTime
- Average time waited, if waited to get Level0 access (ms)SpinlockSlotID
- ID for this spinlock in the spinlock memory poolOwnerPID, LastOwnerPID
will show a tooltip that basically
displays "select * from master..sysprocesses where kpid = ${LastOwnerPID|OwnerPID}" which makes it easier to discover
what user/application that was holding the spinlock.CompileAgeInSec
- Formula: datediff(ss, CompileDate, getdate())AvgCPUTime
- Formula: CPUTime / ExecutionCountAvgExecutionTime
- Formula: AvgExecutionTime / ExecutionCountAvgPhysicalReads
- Formula: AvgPhysicalReads / ExecutionCountAvgLogicalReads
- Formula: AvgLogicalReads / ExecutionCountAvgPhysicalWrites
- Formula: AvgPhysicalWrites / ExecutionCountAvgPagesWritten
- Formula: AvgPagesWritten / ExecutionCountThreadPoolNameType
instead of the ThreadID
this makes it a bit more readable I hope.exec sp_who<NL>go | grep 'sa'
will do grep for 'sa' in the output from the resultset(s)select * from t1 where c1='x'<NL>go | bcp dbname.owner.desttab -Usa -Pxxx -STO_SRV
will try to BCP values into the table in the destination server.\exec|rpc sp_who ? :( string = '2' )
will try to do a RPC call to ASE using a JDBC CallableStatement to execute the procedure. In this example we call sp_who with a string parameter of value "2". This is also the only way to check return code and output parameters from a stored procedure.go | ?
offline.script.waitForNextSample=function waitForNextSample(waitStartDate) \ { \ var nowDate = new Date(); \ var secOnTheMinute = nowDate.getSeconds(); \ if (secOnTheMinute == 1) \ return 0; \ else \ return 1000; \ } \ waitForNextSample(new Date(waitStartedAtTime));The above script returns 0 when clock has passed 1 second after each whole minute
waitStartedAtTime
is set by AseTune to indicate what the time was after a complete refresh of counters.sqlw.bat
or sqlw.sh
)IGNORE_DONE_IN_PROC=true
in the Connection Dialog to minimize additional row count entries from stored procs.begin tran
, then commit/rollback tran
. to reset status 'TRAN ABORT', execute begin tran commit tran
)
The default threshold values can be changed in any of the properties files.
Low-on-memory: asetune.memory.monitor.threshold.low_on_memory.mb=newValueInMB
Out-of-memory: asetune.memory.monitor.threshold.out_of_memory.mb=newValueInMB
When 'Do Java Garbage Collect after counters has been refreshed' is enabled a small GUI pops up to tell
you what's it doing since it might be a time consuming task to do the Java Garbage Collection.
Please let me know if you still have memory issues.
Or simply raise the JVM Parameter -Xmx####m to as high as possible values (see below for default values). This is done in the asetune.bat or asetune.sh script.
or by setting the environment variable ASETUNE_JVM_MEMORY_PARAMS
to -Xmx####m -Xms##m
In ASE 15.7 The 'CPU Thread BusyTicksPct' Graphs is a better CPU measurement when using Threaded Kernel.
The monEngine.IOCPUTime shown some kind of average from the 'DiskController' Thread.
Then the server looks like it's overloaded with IO even if you are just issuing a table scan from a single SPID.
Note: Watch out for 100% values from 'BusyTicks' for 'syb_blocking_pool' and 'syb_system_pool' (RTC pools 'Run To Completion') they are always 100% in first versions, this is fixed in ASE 15.7 ESD#3
I might release a new AseTune, when I know how to fix the issue in a better way. Suggestions are always welcome, since I don't have access to any good or highly used ASE Server for testing.
IOSize1Page
- Number of 1 page physical reads performed for the objectIOSize2Pages
- Number of 2 pages physical reads performed for the objectIOSize4Pages
- Number of 4 pages physical reads performed for the objectIOSize8Pages
- Number of 8 pages physical reads performed for the objectPRSSelectCount
- Number of times PRS (Precomputed Result Set) was selected for query rewriting plan during compilationLastPRSSelectDate
- Last date the PRS (Precomputed Result Set) was selected for query rewriting plan during compilationPRSRewriteCount
- Number of times PRS (Precomputed Result Set) was considered valid for query rewriting during compilationLastPRSRewriteDate
- Last date the PRS (Precomputed Result Set) was considered valid for query rewriting during compilationReadTime
- Total time spent reading from the device (ms)WriteTime
- Total time spent writing to the device (ms)ReadServiceTimeMs
- Calculation, formula: ReadTime / ReadsWriteServiceTimeMs
- Calculation, formula: WriteTime / WritesIOSize1Page
- Number of 1 page physical reads performed by the processIOSize2Pages
- Number of 2 pages physical reads performed for the processIOSize4Pages
- Number of 4 pages physical reads performed for the processIOSize8Pages
- Number of 8 pages physical reads performed for the processPRSUpdateCount
- Number of updates to PRSes (Precomputed Result Set) caused by IUDs (Insert/Update/Delete) on the base tablePRSSelectCount
- Number of times PRSes (Precomputed Result Set) were selected for query rewriting plan during compilationPRSRewriteCount
- Number of times PRSes (Precomputed Result Set) were considered valid for query rewriting during compilationOldestTranStartTime
- Start time of the oldest open transaction in this database.OldestTranInSeconds
- Number of seconds since the oldest open transaction in this database was started.OldestTranName
- Name of the oldest open transaction in this databaseOldestTranSpid
- SPID, which is resopnsible for the oldest open transaction in this databaseOldestTranProg
- Application Name, which is resopnsible for the oldest open transaction in this databaseOldestTranPage
- Page number in the transaction log, which holds the oldest open transaction in this databaseAvgScanRows
- Average scanned rows read per executionMaxScanRows
- Maximum scanned rows read per executionAvgQualifyingReadRows
- Average qualifying data rows for read DML per executionMaxQualifyingReadRows
- Maximum qualifying data rows for read DML per executionAvgQualifyingWriteRows
- Average qualifying data rows for write DML per executionMaxQualifyingWriteRows
- Maximum qualifying data rows for write DML per executionLockWaits
- Total number of lock waitsLockWaitTime
- Total lock-wait time (ms)SortCount
- Total number of sort operationsSortSpilledCount
- Total number of sort operations spilling to diskTotalSortTime
- Total sort time (ms)MaxSortTime
- Maximum sort time (ms)ParallelDegreeReduced
- The number of times the degree of parallelism in the plan was reduced but it still executed as a parallel query (parallel plans only)ParallelPlanRanSerial
- The number of times a parallel query plan was adjusted so that it executed without parallelism (parallel plans only)WorkerThreadDeficit
- The total thread deficit for all executions of a parallel plan (parallel plans only)RequestCntDiff
- Same as RequestCnt, so show both the Abs values and Diff for RequestCnt in the diff/rate view.sampleMetricsCountGtZero
- include or exclude where MetricsCount > 0
In some ASE Versions we would want this, but in some not...Group Name | Hold Performance Counters |
---|---|
Server | 'Processes', 'SPID Waits', 'SPID Activity', 'Databases', 'Temp Db', 'Waits', 'Engines', 'Threads', 'System Load', 'Spinlock Sum', 'Sysmon Raw', 'Errorlog', 'Deadlock', 'Lock Timeout', 'sp_monitorconfig', 'Work Queues'. |
Object/Access | 'Objects', 'Procedure Call Stack', 'Active Objects', 'Active Statements', 'Blocking', 'Table Compression', 'Missing Statistics', 'QP Metrics'. |
Cache | 'Caches', 'Pools', 'Cached Procedures', 'Procedure Cache Load', 'Cached Objects', 'Proc Cache Module Usage', 'Proc Cache Memory Usage', 'Statement Cache', 'Statement Cache Details'. |
Disk | 'Devices', 'IO Sum', 'IO Queue', 'IO Controllers'. |
RepAgent | 'Rep Senders', 'Log Activity', 'Log Scanners', 'Log Scanners Time', 'RA SQL Activity', 'RA SQL Misses', 'RepAgent Sysmon'. |
Host Monitor | 'OS Disk Stat', 'OS CPU(vmstat)', 'OS CPU(mpstat)', 'OS Load Average'. |
User Defined | Performance Counters created by you or any other user. |
ProcessesAccessing
- Number of processes currently accessing the objectTotalSizeKBDiff
- TotalSizeKB
as diff calculated from previous sampleCachedKBDiff
- CachedKB
as diff calculated from previous sampleTableCachedPct
- How much of this table is kept in the cache. Formula: CachedKB/TotalSizeKB * 100
CacheID
- Just the ID of the cacheTotalCacheSizeKB
- The size of the data cache where this table is residingCacheUsagePct
- How much space does this table use of the whole cache. Formula: CachedKB/TotalCacheSizeKB * 100
HkgcPendingItemsDcomp, HkgcOverflowsDcomp
HkgcRequestsDcomp, HkgcPendingDcomp, HkgcOverflowsDcomp
ObjectName
column instead of ObjectName=object_name(...)
ObjectName
displayed the IndexName instead of table name, so object_name(...)
, and also added a column (in ase 15.0.2 or higher)data_pages(A.DBID, A.ObjectID, A.IndexID)
DATABASE_TO_UPPER=false
- Do not convert Table and Column names to upper.MAX_COMPACT_TIME=2000
- The maximum time in milliseconds used to compact a database when closing.SET COMPRESS_LOB DEFLATE
- Compress LOB Large OBjects, text/image fields.SET DEFAULT_LOCK_TIMEOUT 15000
- Change the LOCK timeout to 15 seconds.SET QUERY_TIMEOUT 15000
- Change query timeout timeout to 15 seconds.SHUTDOWN COMPACT
' in method, stopServices()[InstanceID,] ObjectName, DBName, IndexID
' to: '[InstanceID,] ObjectID, DBID, IndexID
'.System.getProperty("user.home");
cd $JAVA_HOME cd bin C:\Program Files\Java\jdk1.6.0_24\bin>jps 8428 AseTune 7100 QueryWindow 9620 Jps 3844 Agent 6140 C:\Program Files\Java\jdk1.6.0_24\bin>jstack 8428 ...Send me the output of this command...
asehostname()
, which needs 'sa_role'.Capture Missing Statistics
options were enabled even if we had connected to a ASE earlier than 15.0.3 ESD#1Query Processing Metrics
options were enabled even if we had connected to a ASE earlier than 15.0.2C:\Documents and Settings\username
Tab Name | Column Names |
---|---|
Objects | SharedLockWaitTime, ExclusiveLockWaitTime, UpdateLockWaitTime |
Data Caches | Status, Type, CacheSize, ReplacementStrategy, APFReads, Overhead |
Pools | LogicalReads, PhysicalWrites, APFReads, APFPercentage, WashSize |
Cached Procedures | ExecutionCount, CPUTime, ExecutionTime, PhysicalReads, LogicalReads, PhysicalWrites, PagesWritten |
Procedure Call Stack | ExecutionCount, CPUTime, ExecutionTime, PhysicalReads, LogicalReads, PhysicalWrites, PagesWritten |
Statement Cache Details | OptimizationGoal, OptimizerLevel |
Active Statements | HostName, ClientName, ClientHostName, ClientApplName |
Deadlock | a bunch of new columns |
Lock Timeout | This tab is new for 15.7 |
CMopenDatabases.skipDbsInGraphs=db1ToSkip, db2ToSkip...
CMopenDatabases.skipDbsWithSizeLtInGraphs=#mb
$HOME/.asetune/asetune.user.properties
'.master, model, pubs2, sybmgmtdb, sybpcidb, sybsecurity, sybsystemdb, sybsystemprocs
300
CMopenDatabases.keepDbsInGraphs=db1, db2...
MaxPhysicalLockWaitTime, MaxTransferReqWaitTime, MaxServiceTime,
AvgQueueWaitTime, MaxQueueWaitTime, MaxTimeWaitedOnLocalUsers, MaxTransferSendWaitTime,
MaxIOServiceTime, MaxDowngradeServiceTime
CMobjActivity.TabRowCount=false
. -f | --finish
switch, which shutdown or stop the no-gui service after # hours-d | --dbname
switch, which specifies the offline URL string.-d|--dbname
Now accepts variables ${DATE}, ${SERVERNAME}, ${ASEHOSTNAME}, ${ASEMON_HOME}, ${ASEMON_SAVE_DIR}
${DATE[:format=fmt[;roll=true|false]]}
format=formatSpecification
" Is how the DATE string should be built. the specification is according to java.text.SimpleDateFormat
, and the default value is yyyy-MM-dd
roll=true|false
" This means: start/create a new database if we roll over into a new DATE string. with format=yyyy-MM-dd
a new DB will be created every midnight, with format=yyyy-MM-dd_HH
a new DB will be created every hour. The default value for roll
is false
. format
can be changed with in the Configuration file with property PersistWriterJdbc.h2DateParseFormat=formatString
roll
can be changed with in the Configuration file with property PersistWriterJdbc.h2NewDbOnDateChange=true|false
${SERVERNAME}
@@servername
of which ASE server we are monitoring.${ASEHOSTNAME}
asehostname()
of which ASE server we are monitoring.${ASEMON_HOME}
${ASEMON_SAVE_DIR}
asemon -Usa -Pnull -SGORAN_1_DS -uxyz -ppasswd -shost1 -n all -i 30 -D H2 -d xxx.${ASEHOSTNAME}.${DATE:format=yyyy-MM-dd.HH;roll=true}
-Usa -Pnull -SGORAN_1_DS
-uxyz -ppasswd -shost1
-n all
-i 30
-D H2
-d xxx.${ASEHOSTNAME}.${DATE:format=yyyy-MM-dd.HH;roll=true}
${DATE}, ${SERVERNAME}, ${ASEHOSTNAME}, ${ASEMON_HOME}, ${ASEMON_SAVE_DIR}
also works in the Connection Dialog in the "Counter Storage" tab.
-r | --reconfigure
switchName | Configuration |
---|---|
Summary | NONE |
Objects | enable monitoring=1, object lockwait timing=1, per object statistics active=1 |
Processes | enable monitoring=1, object lockwait timing=1, wait event timing=1 |
Databases | enable monitoring=1 |
Temp Db | enable monitoring=1, object lockwait timing=1, per object statistics active=1 |
Waits | enable monitoring=1, wait event timing=1 |
Engines | enable monitoring=1 |
System Load | NONE |
Data Caches | enable monitoring=1 |
Pools | enable monitoring=1 |
Devices | enable monitoring=1 |
IO Sum | enable monitoring=1 |
IO Queue | enable monitoring=1 |
Spinlock Sum | NONE |
Sysmon Raw | NONE |
RepAgent | NONE |
Cached Procedures | per object statistics active=1 |
Procedure Cache | enable monitoring=1 |
Procedure Call Stack | NONE |
Cached Objects | NONE |
Errorlog | enable monitoring=1, errorlog pipe active=1, errorlog pipe max=200 |
Deadlock | enable monitoring=1, deadlock pipe active=1, deadlock pipe max=500 |
Proc Cache Module Usage | NONE |
Proc Cache Memory Usage | NONE |
Statement Cache | enable monitoring=1, enable stmt cache monitoring=1, statement cache size |
Statement Cache Details | enable monitoring=1, enable stmt cache monitoring=1, statement cache size |
Active Objects | enable monitoring=1, per object statistics active=1 |
Active Statements | enable monitoring=1, statement statistics active=1, wait event timing=1 |
Blocking | enable monitoring=1, wait event timing=1 |
Missing Statistics | capture missing statistics |
sp_monitorconfig | NONE |
OS CPU(vmstat) | NONE |
OS Disk Stat | NONE |
OS CPU(mpstat) | NONE |
OS Disk Stat
which uses iostat or vmstat to get OS disk statisticsOS CPU(vmstat)
which uses vmstat to get OS overall OS statisticsOS CPU(mpstat)
which uses mpstat to get OS statistics per CPU iostat
vmstat
mpstat
MonitorIoSolaris.sleep=5
MonitorVmstatAix.sleep=5
MonitorMpstatLinux.sleep=5
[Monitor][Subsystem][Osname].sleep=[samplePeriodToTheCommand]
log4j.logger.asemon.hostmon.HostMonitor=DEBUG
#------------------------------------------------- # Example of a simple file list # isStreaming=false, means that it's executed at every AseMon sample interval #------------------------------------------------- hostmon.udc.TestGoransLs.displayName = List of files in $HOME hostmon.udc.TestGoransLs.description = This would be the tooltip help on the Tab for: List of files in $HOME hostmon.udc.TestGoransLs.osCommand = ls -Fl | egrep -v '^d' hostmon.udc.TestGoransLs.osCommand.isStreaming = false hostmon.udc.TestGoransLs.addStrColumn.umode = {length=10, sqlColumnNumber=1, parseColumnNumber=1, isNullable=false, description=xxx} hostmon.udc.TestGoransLs.addIntColumn.files = { sqlColumnNumber=2, parseColumnNumber=2, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addStrColumn.owner = {length=10, sqlColumnNumber=3, parseColumnNumber=3, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addStrColumn.group = {length=10, sqlColumnNumber=4, parseColumnNumber=4, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addIntColumn.sizeInBytes = { sqlColumnNumber=5, parseColumnNumber=5, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addStrColumn.date = {length=10, sqlColumnNumber=6, parseColumnNumber=6, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addStrColumn.time = {length=5, sqlColumnNumber=7, parseColumnNumber=7, isNullable=true, description=xxx} hostmon.udc.TestGoransLs.addStrColumn.filename = {length=99, sqlColumnNumber=8, parseColumnNumber=8, isNullable=true, description=xxx} #------------------------------------------------- # Example of mpstat # isStreaming=true, means that it's executed once, and a background thread parses the output stream from the command # and on each AseMon sample interval, a average calculation is done on the sampled records. # numOfSamples is an counter indicator, which reflects how many sampled records the average is based on. #------------------------------------------------- hostmon.udc.TestGoransMpstat.displayName = UD Mpstat hostmon.udc.TestGoransMpstat.description = This would be the tooltip help on the Tab for: UD Mpstat hostmon.udc.TestGoransMpstat.osCommand = mpstat -P ALL 1 hostmon.udc.TestGoransMpstat.osCommand.isStreaming = true hostmon.udc.TestGoransMpstat.addStrColumn.CPU = {length=30, sqlColumnNumber=1, parseColumnNumber=3, isNullable=false, description=Processor number. The keyword all indicates that statistics are calculated as averages among all processors.} hostmon.udc.TestGoransMpstat.addIntColumn.numOfSamples = { sqlColumnNumber=2, parseColumnNumber=0, isNullable=true, description=Number of 'sub' sample entries of iostat this value is based on} hostmon.udc.TestGoransMpstat.addStatColumn.usrPct = {precision=10, scale=1, sqlColumnNumber=3, parseColumnNumber=4, isNullable=true, description=Show the percentage of CPU utilization that occurred while executing at the user level (application).} hostmon.udc.TestGoransMpstat.addStatColumn.nicePct = {precision=10, scale=1, sqlColumnNumber=4, parseColumnNumber=5, isNullable=true, description=Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.} hostmon.udc.TestGoransMpstat.addStatColumn.sysPct = {precision=10, scale=1, sqlColumnNumber=5, parseColumnNumber=6, isNullable=true, description=Show the percentage of CPU utilization that occurred while executing at the system level (kernel). Note that this does not include time spent servicing hardware and software interrupts.} hostmon.udc.TestGoransMpstat.addStatColumn.iowaitPct = {precision=10, scale=1, sqlColumnNumber=6, parseColumnNumber=7, isNullable=true, description=Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.} hostmon.udc.TestGoransMpstat.addStatColumn.irqPct = {precision=10, scale=1, sqlColumnNumber=7, parseColumnNumber=8, isNullable=true, description=Show the percentage of time spent by the CPU or CPUs to service hardware interrupts.} hostmon.udc.TestGoransMpstat.addStatColumn.softPct = {precision=10, scale=1, sqlColumnNumber=8, parseColumnNumber=9, isNullable=true, description=Show the percentage of time spent by the CPU or CPUs to service software interrupts.} hostmon.udc.TestGoransMpstat.addStatColumn.stealPct = {precision=10, scale=1, sqlColumnNumber=9, parseColumnNumber=10, isNullable=true, description=Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.} hostmon.udc.TestGoransMpstat.addStatColumn.guestPct = {precision=10, scale=1, sqlColumnNumber=10, parseColumnNumber=11, isNullable=true, description=Show the percentage of time spent by the CPU or CPUs to run a virtual processor.} hostmon.udc.TestGoransMpstat.addStatColumn.idlePct = {precision=10, scale=1, sqlColumnNumber=11, parseColumnNumber=12, isNullable=true, description=Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.} hostmon.udc.TestGoransMpstat.setPkColumns = CPU hostmon.udc.TestGoransMpstat.setPercentColumns = usrPct, nicePct, sysPct, iowaitPct, irqPct, softPct, stealPct, guestPct, idlePct hostmon.udc.TestGoransMpstat.setSubSampleColumn = numOfSamples hostmon.udc.TestGoransMpstat.setParseRegexp = DEFAULT hostmon.udc.TestGoransMpstat.skipRows.CPU = CPU #--------------------------------- OK, lets attach a graph to it as well hostmon.udc.TestGoransMpstat.graph=true hostmon.udc.TestGoransMpstat.graph.type=byRow hostmon.udc.TestGoransMpstat.graph.name=mpstatGraph hostmon.udc.TestGoransMpstat.graph.label=MpStat Graph hostmon.udc.TestGoransMpstat.graph.menuLabel=MpStat Graph hostmon.udc.TestGoransMpstat.graph.data.cols=idlePct hostmon.udc.TestGoransMpstat.graph.data.methods=absVal hostmon.udc.TestGoransMpstat.graph.data.labels=-pk-
01
and 02
is used to specify in what order in the menu they should be presented.
# Do some SQL user.predefined.sql.01.name = xxx - select something, bla bla bla user.predefined.sql.01.execute = select NOW=getdate() # Execute your stored proc, if the proc isn't installed, install it using the file. # needsVersion is if it containes SQL that is onlky valid from a specific version of ASE (specified as 15032, for 15.0.3 ESD#2, should always be 5 numbers) user.predefined.sql.02.name = sp__xxx - my own proc... user.predefined.sql.02.execute = exec sp__xxx user.predefined.sql.02.install.needsVersion = 0 user.predefined.sql.02.install.dbname = sybsystemprocs user.predefined.sql.02.install.procName = sp__xxx user.predefined.sql.02.install.procDateThreshold = 2011-04-14 user.predefined.sql.02.install.scriptName = C:/tmp/sp__xxx.sql user.predefined.sql.02.install.needsRole = sa_role
CMobjActivity.color.index = ORANGE
CMprocActivity.color.system = YELLOW
CMprocActivity.color.running = GREEN
CMprocActivity.color.blocked = ORANGE
CMprocActivity.color.blocking = RED
CMcachedObjects.color.index = ORANGE
CMActiveObjects.color.index = ORANGE
CMblocking.color.blocking = RED
sp_configure 'capture missing statistics', 1
mon*
tables is updated in master..sysstatistics
sp_missing_stats
, which (for now) will have to be manually
installed before this tab will work...
table.setSelectionBackground={true|false} table.setSelectionBackground.r=intVal table.setSelectionBackground.g=intVal table.setSelectionBackground.b=intVal