Declaration
NINT SnapShot(NINT opcode, pTEXT rqstdesc, pVOID snapbufr, VRLEN buflen);Parameters:
-
opcodespecifies the action to be taken by the snapshot function. -
rqstdescpoints to an ASCII string containing the input information. -
snapbufrpoints to an output buffer of lengthbuflen.
Different opcodes require different combinations of input and output parameters ranging from using neither of them to both of them.
Description
FairCom DB tracks and reports a wealth of performance-oriented statistics. FairCom DB's Snapshot capability enables the capture of performance monitoring data using a combination of configuration file options and the SnapShot API function. The performance data can be captured automatically at specified intervals or on demand in the following ways:
- The
ctstatutility provides a command-line interface to the SNAPSHOT API function, supporting output of FairCom DB statistics at the core database engine, user, file, and function levels. - Configuration file options support automatic performance snapshots by specifying the interval between automatic snapshots and the contents of the snapshots. The performance data captured by automatic snapshots are written to the FairCom DB system event log (SYSLOG) files.
- Use DIAGNOSTICS options to capture the automatic system snapshot data to the human-readable SNAPSHOT.FCS file.
- The
SnapShot()API function can control automatic snapshots, overriding configuration options (if any), and can capture on-demand performance data:- to either the SYSLOG files or to the human-readable SNAPSHOT.FCS file, or
- as a return to the calling program.
For tips about monitoring system performance using this function, see Performance Monitoring Using the SnapShot API.
Snapshot Contents
Each snapshot is composed of a structure (ctGSMS for system info, ctGUMS for user info, and ctGFMS for file info) followed optionally by a variable region. Each of the three snapshot structures contains information about the size of the structure and the amount of variable information, if any, following the structure. Further, if the output buffer is too small to hold all the variable information, the contents member of the main structure will have the ctSNAPSHOTtruncated bit turned on if information had to be truncated.
Note These structure definitions may vary depending on the version of the FairCom DB and FairCom DB client versions you are using. Please consult the c-tree headers for the actual structure definition that is in use. Differences in definitions between a given
ctstatclient and FairCom DB may makectstatincompatible with that server, in which case thectstatutility displays an error message indicating structure incompatibility.
The only variable information consists of an array of function timing results for the overall system or for a user. The array is composed of ctWRKSTT structures. Function timings are described below, but these timings are only for direct calls from c-tree clients.
^ High-Resolution Timers - Most of the elapsed times accumulated in the snapshots are based on high-resolution timers that report in numbers of ticks and are stored in eight-byte integers. The description following each structure member contains a ‘^’ to indicate results based on high-resolution timers. To convert such times to seconds, divide by the ticks per second, a system dependent value stored in the scthrbastim member of each snapshot structure.
Snapshot Structures
See Snapshot Contents.
System Snapshot Support
The SnapShot API function supports logging FairCom DB system statistics. For a listing of the system statistics FairCom DB collects, refer to the ctGSMS structure in the Snapshot Contents section below. The supported operations include:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| On-demand system snapshot returned directly in the output buffer. No entry is made in SYSLOG. | ctPSSsystem |
NULL | Address of output buffer large enough to hold at least a ctGSMS structure |
| On-demand system snapshot written to the SNAPSHOT.FCS text file. | ctPSStext |
An optional text description, or NULL | NULL |
File Snapshot Support
The SnapShot API function supports logging FairCom DB file statistics. For a listing of the file statistics the FairCom DB collects, refer to the ctGFMS structure in the Snapshot Contents section. The supported operations include:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Activate the file with the specified file name. Use a pattern of ‘*’ to activate all files. | ctPSSaddFileName |
File name (e.g., “cust*.*”) | NULL |
| Activate the file with the specified file number. | ctPSSaddFileNo |
Small integer file number (e.g., "0") | NULL |
On-demand file snapshot returned directly in the output buffer for the file with file number specified by rqstdesc. No entry is made in SYSLOG. |
ctPSSfile |
Small integer file number (e.g., "3") | Address of output buffer large enough to hold a ctGFMS structure |
| Undo all file activations. | ctPSSclearFiles |
NULL | NULL |
| On-demand file snapshot returned directly. No entry is made in SYSLOG. | ctPSSfileSystemHandle |
System file number |
ctGFMS buffer |
| On-demand snapshot of all open files written to SNAPFILE.FCS, a comma-delimited text file. | ctPSScsvFile |
NULL | NULL |
| On-demand snapshot of all open files written to SNAPFILE.FCS, a simple text file. | ctPSStextFile |
NULL | NULL |
| Starts collection of disk I/O timing stats. It affects the contents of a file snapshot. Disk I/O timings can also be enabled from configuration file with the entry: DIAGNOSTICS SNAPSHOT_IOTIME | ctPSStimeFileIoOn |
NULL | NULL |
| Turn off disk I/O timings. Disk I/O timings require a significant number of calls to the high resolution timer, and are more consistent with diagnostic or testing modes of operation. | ctPSStimeFileIoOff |
NULL | NULL |
User Snapshot Support
The SnapShot API function supports logging FairCom DB user statistics. For a listing of the user statistics FairCom DB collects, refer to the ctGUMS structure in the Snapshot Contents section below. The supported operations include:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Activate the user with the specified User ID. Use a pattern of ‘*’ to activate all users. | ctPSSaddUserID |
User ID (e.g., “admin”) |
NULL |
| Activate the user with the specified thread handle. | ctPSSaddUserHandle |
Small integer thread handle (e.g., “12”) | NULL |
On-demand user snapshot returned directly in the output buffer. No entry is made in SYSLOG. The snapshot is for the user calling ctSNAPSHOT(). |
ctPSSuser |
NULL | Address of output buffer large enough to hold at least a ctGUMS structure |
| On-demand user snapshot returned directly in the output buffer. | ctPSSuserHandle |
Small integer thread handle (e.g., “12”) | Address of output buffer large enough to hold at least a ctGSMS structure |
| Undo all user activations. | ctPSSclearUsers |
NULL | NULL |
Automatic Snapshot Support
The SnapShot API function supports starting, stopping, and resuming automatic snapshots. The following table shows the parameters to pass to SnapShot to perform these operations.
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Start automatic snapshots, or change time interval if automatic snapshots are already enabled. | ctPSSstartAuto |
Interval in minutes (e.g., “60”) |
NULL |
| Stop automatic snapshots. | ctPSSstopAuto |
NULL | NULL |
| Resume automatic snapshots with the same interval last used. | ctPSSresumeAuto |
NULL | NULL |
Combined Snapshot Support
The SnapShot API function supports logging combined snapshots containing FairCom Server system statistics and user and file statistics for the specified activated users and files. This ability is supported by the following operation:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| On-demand snapshot of system and activated users and files written to SYSLOG. All entries to SYSLOG share the instance ID, a 4-byte integer, returned in the output buffer. | ctPSSnow |
An optional text description up to 128 bytes, or NULL | Address of a 4-byte integer to hold instance ID |
Function Timing Snapshot Support
The SnapShot API function supports profiling of FairCom DB API function calls (function timing) and timing of user-defined operations. The supported operations include:
- Starting and stopping the collection of FairCom DB API function timing statistics.
- Resetting the function timing statistics.
- Accumulating timings in user-defined timing baskets. Users may define up to 8 different timing baskets. A begin mark call establishes a high resolution starting time for the specified basket. An end mark call causes the specified basket counter to be incremented, and the elapsed time is added to the timing basket. The baskets are numbered from 0 to 7.
Note Function timings require a significant number of calls to the high-resolution timer, and are more consistent with diagnostic or testing modes of operation.
The following table shows the parameters to pass to SnapShot() to perform these operations.
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Start collecting function-timing statistics. This can be called whether or not automatic snapshots are currently active. It affects the contents of snapshots written to SYSLOG, not when or if they occur. | ctPSStimeWorkOn |
NULL | NULL |
| Turn off function timings. | ctPSStimeWorkOff |
NULL | NULL |
| Mark beginning time for one of 8 user specified timing baskets. | ctPSSbegMark |
Small integer between 0 and 7 (e.g., "3") | NULL |
| Mark ending time for user specified timing basket. | ctPSSendMark |
Small integer between 0 and 7 (e.g., "3") | NULL |
| Clear all function-timing statistics. | ctPSStimeWorkClear |
NULL | NULL |
| On-demand snapshot of c-tree function timings written to SNAPFUNC.FCS, a simple text file. | ctPSStextFunc |
NULL | NULL |
| On-demand snapshot of c-tree function timings written to SNAPFUNC.FCS, a comma-delimited text file. | ctPSScsvFunc |
NULL | NULL |
SQL Snapshot Support
The SnapShot API function has a mode for retrieving FairCom DB SQL specific statistics.
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| SQL Statement cache counters | ctPSSsqlSystem |
NULL | ctSQLS |
File List Snapshot Support
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| On demand filelist snapshot returned directly. No entry is made in SYSLOG. | ctPSSfilelist |
NULL | ctGFLS |
CHECKLOCK List Snapshot Support
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
On demand CHECKLOCK_FILE snapshot returned directly. No entry is made in SYSLOG. |
ctPSSchecklockfile |
NULL | ctGCMS |
Memory Snapshot Support
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| On demand memory allocation snapshot returned directly. No entry is made in SYSLOG. | ctPSSmemAlloc |
NULL | ctGMMS |
| Causes the server to write information on structure sizes and compile-time constants that affect server memory use to the file MEMINFO.FCS. | ctPSSmeminfo |
NULL | NULL |
Replication Snapshot Support
The SnapShot API function supports logging information about the FairCom Server replication state. For a listing of the transaction statistics the FairCom Server collects, refer to the ctPSSreplread structure in the Snapshot Contents section below. The supported operations include:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Retrieve information about FairCom Server replication state. On-demand replication reader snapshot is returned directly. No entry is made in SYSLOG. | ctPSSreplread |
Transaction Snapshot Support
The SnapShot API function supports logging FairCom Server transaction statistics. For a listing of the transaction statistics the FairCom Server collects, refer to the ctPSStransaction structure in the Snapshot Contents section. The supported operations include:
| Snapshot action | opcode | rqstdesc | snapbufr |
|---|---|---|---|
| Retrieve FairCom Server's transaction statistics. | ctPSStransaction |
Snapshot support for FairCom Server compiled without transaction control
In V11 and later, support has been added for using the SnapShot feature when FairCom DB Server is compiled without transaction control (UNIFRMAT server, for example). (ctSNAPSHOT API and utilities such as ctstat and FairCom DB Monitor use this feature.)
Prior to this modification, FairCom DB Monitor had limited functionality on a server that did not support transaction processing: the Files Stats, System Snapshot, User Snapshot, Snapshot Favorites, and Function Timing tabs could not be used (typical error = 454, not supported).
Note Although the snapshot API is now supported by a server, some functions (such as replication and transaction information) are not supported.
Return Values
SnapShot returns NO_ERROR (0) on success, or an error code on failure.
| 0 | CTDBRET_OK |
Successful operation. |
See c-tree Error Codes for a complete listing of valid c-tree error values.
Example
...
ctGSMS* my_sysSnap;
NINT rc = 0;
my_sysSnap = (ctGSMS*) malloc(sizeof(ctGSMS));
memset(my_sysSnap, 0, sizeof(ctGSMS));
rc = InitISAMXtd(10, 10, 8192/128, 10, 0, "ADMIN", "ADMIN", "FAIRCOMS");
if (rc) {
printf("InitISAMXtd Error: %d\n", rc);
return (rc);
}
/* Take a System SnapShot */
rc = SnapShot(ctPSSsystem, NULL, my_sysSnap, sizeof(ctGSMS));
if (rc) {
printf("SnapShot Error: %d\n", rc);
return (rc);
}
rc = CloseISAM();
if (rc)
printf("CloseISAM Error: %d\n", rc);
/* Print Memory statistics */
printf("High Mem: %d\n", my_sysSnap->sctmemhgh);
printf("Current Mem: %d\n", my_sysSnap->sctmemsum);
/* Print Disk I/O statistics */
printf("Read ops: %d\n", my_sysSnap->sct_rdops);
printf("Read bytes: %d\n", my_sysSnap->sct_rdbyt);
printf("Write ops: %d\n", my_sysSnap->sct_wrops);
printf("Write bytes: %d\n", my_sysSnap->sct_wrbyt);
/* Print Platform Specific Server information */
printf("Server flavor: %d\n", my_sysSnap->sflvr);
printf("Alignment: %d\n", my_sysSnap->salgn);
printf("Pointer size: %d\n", my_sysSnap->spntr);
free(my_sysSnap);
...See also