tpf - Stratus Anonymous FTP server

advertisement
Last updated: 96-06-28
Trademark notices:
Stratus, Continuum, Continuous Processing, StrataNET, FTX, and the
Stratus logo are registered trademarks of Stratus Computer, Inc.
XA, XA/R, StrataLINK, RSN, SINAP, Isis, Isis Distributed, RADIO, and
the SQL/2000 logo are trademarks of Stratus Computer, Inc.
PUBLICATIONS tpf.doc FILE
Copyright (C) 1996 by Stratus Computer, Inc.
Introduction
============
This document describes features that have been added to the Transaction
Processing Facility (TPF) since the following manuals were last revised.
o
o
o
o
(R036)
o
o
o
VOS
VOS
VOS
VOS
PL/I Transaction Processing Facility Reference Manual (R015)
BASIC Transaction Processing Facility Reference Manual (R032)
COBOL Transaction Processing Facility Reference Manual (R034)
FORTRAN Transaction Processing Facility Reference Manual
VOS Pascal Transaction Processing Facility Reference Manual (R038)
VOS C Transaction Processing Facility Reference Manual (R069)
VOS Transaction Processing Facility Guide (R215)
This document describes the following topics.
o
It describes the subroutine s$get_server_queue_info that was
introduced in VOS Release 10.2. The subroutine returns
information about the number of messages in an open one-way or
two-way server queue attached to a specified port.
o
It describes enhancements to the tp_restore command that were
introduced in the following VOS releases: 11.7 and 12.
The tp_restore command restores transaction files.
o
It describes a new error message added to the
s$set_transaction_file subroutine and the set_transaction_file
command. The new message supports the implementation of logprotected files in Release 12.
o
It describes the subroutine s$msg_open_virtual that was
introduced in VOS Release 12.0. The subroutine creates a new
kind of queue called a virtual queue.
o
It describes TPOverseer performance improvements and a new
error message, both of which were introduced in VOS
Release 12.3.0 and Release 13.1.0.
o
o
Release
It describes additional TPF performance improvements for
Releases 12.3.0, 13.1.0, and 13.3.0.
It describes a new error message which was introduced in
13.1.0 and two new error messages which were introduced in VOS
Releases 12.3.0 and 13.3.0
o
It describes changes to the tp_overseer command and five
new TPF-related requests of the analyze_system command for
Releases 12.3.0 and 13.3.0.
Contents
The s$get_server_queue_info Subroutine
Enhancements to the tp_overseer Command
Enhancements to the tp_restore Command
The tp_restore Command
Messages in the tp_restore Output File
Determining Which Log Files to Use in the Restore Process
New Error Code for s$set_transaction_file and set_transaction_file
Virtual Queues
TPOverseer Performance Improvements (13.1.0)
TPOverseer Performance Improvements (13.3.0)
New TPOverseer Error Message (13.1.0)
New TPOverseer Error Messages (13.3.0)
New TPF-Related Requests of the analyze_system Command
The s$get_server_queue_info Subroutine
======================================
Purpose
------The s$get_server_queue_info subroutine returns information
about the number of messages in an open one-way or two-way server
queue attached to a specified port.
PL/I Usage
---------declare port_id
declare 1 queue_info
fixed bin (15);
longmap,
2 version
2 file_organization
2 num_messages
2 num_non_busy_messages
2 highest_num_messages
2 total_num_messages
2 max_messages
declare error_code
fixed
fixed
fixed
fixed
fixed
fixed
fixed
fixed
bin(15),
bin(15),
bin(31),
bin(31),
bin(31),
dec(18),
bin(31);
bin(15);
declare s$get_server_queue_info entry (fixed bin(15),
1 like queue_info,
fixed bin(15));
call s$get_server_queue_info (port_id, queue_info, error_code);
C Usage
------struct decimal_18_tag
{
long int
unsigned long int
};
high;
low;
short int
port_id;
struct $longmap
{
short int
short int
long int
long int
long int
struct decimal_18_tag
long int
}
version;
file_organization;
num_messages;
num_non_busy_messages;
highest_num_messages;
total_num_messages;
max_messages;
queue_info;
short int
error_code;
void s$get_server_queue_info();
s$get_server_queue_info( &port_id,
&queue_info,
&error_code);
Arguments
--------port_id (input)
The identifier of a port attached to a one-way or two-way
server queue.
queue_info (input-output)
Information about the number of messages in the queue.
version (input)
The version number of the queue_info structure. Assign it
the value 1. This is the only input argument in queue_info.
file_organization (output)
The organization of the file. Possible values are shown below.
Value
Organization
5
31
two-way server queue
one-way server queue
num_messages (output)
The number of messages currently in the queue.
For one-way server queues, this is the number of messages
which have not been received by the receiver.
For two-way server queues, this is the number of messages
for which replies have not been received by the requester.
In both cases, num_messages is reset to zero when all
openers of the queue have closed their attached ports.
num_non_busy_messages (output)
The number of messages that have been sent and not yet
received.
For one-way server queues, once a message has been received,
it is no longer in the queue. When a message is received,
num_non_busy_messages is decremented.
For two-way server queues, a message can be in the queue and
can be nonbusy. When a message is received,
num_non_busy_messages is decremented. If
s$msg_cancel_receive is called, num_non_busy_messages is
incremented.
highest_num_messages (output)
The highest number of messages that have been in the queue
at one time. This is the highest value that num_messages
has reached. If the value of num_messages is reduced, the
value of highest_num_messages does not change.
total_num_messages (output)
The total number of messages that have been sent during the
opening of the queue.
max_messages (output)
The maximum number of messages that can be sent to this
queue. This is the same as max_queue_depth. See additional
information in the descriptions of the set_max_queue_depth
command and the s$set_max_queue_depth subroutine in the VOS
Transaction Processing Facility manuals.
error_code (output)
A returned error code. The following table describes the
error codes that may be returned by this subroutine.
Error Code
Description
e$portname_not_found
The specified port has not been
attached.
(1028)
e$invalid_io_operation
(1040)
You are attempting to get server queue
information via a port that is not
attached
to an open one-way or two-way server
queue.
e$wrong_version
(1083)
The caller specified the wrong version
number in queue_info.version. The only
correct number is 1.
Enhancements to the tp_overseer Command
=======================================
The tp_overseer command has two new arguments, -metering and
-max_metering. The -metering argument, which specifies the current
setting, is a cycle field with the following values: none, basic, queue,
or extended. The -max_metering argument, which specifies the maximum
allowable value you can give without restarting the TPOverseer, is a
cycle
field with the following values: queue or extended. The values have the
following meanings.
o The none value indicates that metering is not enabled.
o The basic value enables basic metering, which enables you to
increment
counter-type meters; maintenance of these meters is generally
inexpensive.
o The queue value enables queue metering, which enables you to
gather
queue statistics for actual and pseudo queues. (Pseudo queues
provide
a view of a transaction that often corresponds more closely to a
user's perspective than does an actual queue.) The overhead of
performing queue metering is somewhat more expensive because it
involves reading the system clock; therefore, you may want to
disable
queue metering in performance-critical situations.
o The extended value enables extended metering, which records the
maximum values of queue meters and other per-transaction values
over a
given time interval. You can then display this information by
using
the transaction_meters request of the analyze_system command.
Extended
metering requires no additional clock reading but does require
additional space in the Transaction State Info (TSI) structure.
(The
TSI structure, which exists from the time at which a transaction
is
started until all file records modified within the transaction
physically exist on disk, contains various information about the
transaction and its current state.) Once you specify the maximum
value, you cannot specify a higher value unless you restart the
TPOverseer. The extended value is the default value for the metering
and -max_metering arguments.
Enhancements to the tp_restore Command
======================================
The enhancements described in this section apply to VOS releases 11.7,
11.8, and 12, and later.
An online transaction processing application must be able to recover
its data files when unforeseen events, such as accidents, fire, or
serious
failure, destroy the files. For transaction files, the tp_restore
command
provides this capability.
If you use tp_restore infrequently as a tool to recover damaged or lost
files, you can continue to use it the way you always have. You might
notice the following changes.
to
o
Two new arguments appear in the tp_restore command. Both
arguments are optional and are described in this document.
o
New output messages appear in the tp_restore output file.
document describes these messages.
o
You do not need as many log files as were previously required
This
successfully restore transaction files.
This document
describes
a new strategy for determining the starting log file.
If you use tp_restore frequently to perform serial restores (for example,
to maintain secondary online copies of an application's data files), you
will notice that tp_restore is more flexible. This document describes
the
tp_restore enhancements.
The tp_restore Command
---------------------Purpose
This command uses a transaction log to reconstruct a later state of
a
file from an earlier state.
Display Form
----------------------------- tp_restore ------------------------------path_names:
-restore_dir: >system>tcf_directory
-to_state:
current_date_time
-destination:
-control:
-gather_txns: 50
-continuation: no
Command Line Form
tp_restore {path_names}...
[-restore_dir path_name]
[-to_state date/time]
[-destination path_name]
[-control control_file]
[-gather_txns number]
[-continuation]
Arguments
path_names
[-restore_dir path_name]
[-to_state date/time]
[-destination path_name]
[-control control_file]
These arguments have not changed. See the VOS Transaction
Processing Facility Reference Manuals for information about
these
arguments.
[-continuation]
An argument to start the tp_restore session at the point where
a
previous tp_restore session stopped.
This argument supports
serial
executions of the tp_restore command.
Omit this argument if you are not doing serial executions of
tp_restore.
[-gather_txns number]
An argument to specify how many transactions the tp_restore
command
should process before clearing the user heap.
The value must
be
an integer between 10 and 50, inclusive.
50.
The default value is
In general, use the default value. If a tp_restore process
terminates abnormally because of a shortage of user heap space,
reconstruct the destination directory and then reissue the
tp_restore command, specifying a lower number for this
argument.
Explanation
This section explains the two new arguments. See the
Explanation
section in the VOS Transaction Processing Facility Reference
Manuals for explanations of other arguments. See the VOS
Transaction Processing Facility Guide (R215) for a detailed
explanation on how to use the tp_restore command.
The -gather_txns argument provides the flexibility necessary to
handle large transactions. In most cases, you can allow the
-gather_txns argument to use its default value. For processing
efficiency, the tp_restore command gathers information about
multiple transactions and stores this information in the user
heap area of memory. When it accumulates the number of
transactions specified in the -gather_txns argument, the
tp_restore command applies those transactions to the
appropriate
files and clears the user heap before starting to gather more
transactions.
Depending on the number of transaction files involved in the
transactions, as well as the number of modules, the number of
log
files involved, and the available resources in the user heap,
tp_restore might run out of user heap space before it completes
its information-gathering step. In that case, reconstruct the
destination directory and then reissue the tp_restore command
using a lower value in the -gather_txns argument.
The -continuation argument provides support for serial
executions
of the tp_restore command. Whenever the tp_restore command
executes, it saves information about its stopping point in a
file
named tp_restore_continuation_info in the restore directory.
The
command also adds a message to its .out file naming the
starting
log for the next tp_restore session. To perform serial
tp_restore sessions, use the log file identified in the
previous
session's .out file as the starting log for the next session
and
specify the -continuation argument in the next tp_restore
command.
The -continuation argument causes the tp_restore command to use
the
tp_restore_continuation_info file to determine the starting
point
for each of the data files in the destination directory.
For serial tp_restore sessions, you must use log files with
names
whose numbers sequentially follow the logs used in the previous
tp_restore session, with some overlap. Since the overlap
requirement varies, always start with the log file named in the
previous session's .out file. For example, assume that the log
files used in a tp_restore session were named as follows:
tlf.128-1.0000000003.93-01-27
tlf.128-1.0000000004.93-01-27
tlf.128-1.0000000005.93-01-27
Now assume that the tp_restore .out file included the following
message:
To restore files from module 1 in the next tp_restore
-continuation session, you should start with log
tlf.128-1.0000000003.93-01-27
In that case, the next tp_restore session must include the
first
three files in the following list, and could have any number of
subsequently numbered log files as well. The next tp_restore
session might use the following log files.
tlf.128-1.0000000003.93-01-27
tlf.128-1.0000000004.93-01-27
tlf.128-1.0000000005.93-01-27
tlf.128-1.0000000006.93-01-27
tlf.128-1.0000000007.93-01-27
You should use the same restore directory for all executions of
the tp_restore command in the series. Otherwise, you risk
accessing incorrect continuation information.
If you specify the -continuation argument with a restore
directory that does not contain a tp_restore_continuation_info
file, tp_restore executes as if the -continuation argument were
not specified. If you are in the middle of a series of
tp_restore operations, you DO NOT want this to happen. To
avoid
this problem, create a VOS command macro that executes the
tp_restore command with the -continuation argument. The macro
could check for the existence of the
tp_restore_continuation_info
file and if the file is not found, exit before executing
tp_restore.
You can use the -continuation argument even if some of the
transaction data files in the destination directory were not
included in the previous tp_restore session. However, you must
research the correct starting log file for the newly introduced
transaction file and include the required log files in the
restore directory. Follow the procedures described in
"Determining Which Log Files to Use in the Restore Process" to
research the starting log file for a transaction data file.
When
the destination directory contains a transaction data file that
was not included in the previous tp_restore session, the next
tp_restore session knows that it must read ALL log files in the
restore directory. However, when the transaction data files in
the
restore directory are identical to the files used in the
previous
session, tp_restore starts with the continuation log it
identified in the previous session's .out file.
If you do not specify the -continuation argument or if you are
performing the first tp_restore command in a planned series,
tp_restore looks for certain information in the log files that
ensures a proper starting point for rolling forward
transactions
for each of the files in the destination directory. You
must research which log files to move to the restore directory.
Follow the procedures described in "Determining Which Log Files
to Use in the Restore Process."
Messages in the tp_restore Output File
-------------------------------------This section describes some messages that the tp_restore command might
produce in its output file. Since the tp_restore messages are lengthy
and
mostly self-explanatory, exact message text is not included here. Some
situations that produce messages are as follows:
o
If you specify the -continuation argument but the tp_restore
command cannot find the tp_restore_continuation_info file in
the
restore directory, tp_restore produces a warning message and
executes as if the -continuation argument were set to no. This
situation could cause you to lose the ability to update an
infrequently updated file using serial tp_restore methodology.
To prevent this situation, follow the recommendations in the
Explanation section for creating a macro that executes the
tp_restore command.
o
If the tp_restore command cannot find a log file it needs in
the
restore directory, it produces an error message stating that a
log file is missing. The message tells you the name of the
missing log file. After moving the missing log file into the
restore directory, reissue the tp_restore command. (The
process
terminates before any files in the destination directory are
updated.)
o
If multiple tp_restore commands execute using the same
restore directory, the second tp_restore command terminates and
produces an error message stating "file in use." The message
refers to work files that the tp_restore command uses. Wait
until the first command finishes before issuing the next one.
(The command terminates before any files in the destination
directory are updated.)
o
The tp_restore command generates an information message naming
the starting log file for the next tp_restore session. If you
are doing serial restore sessions, use this information when
preparing the restore directory for the next execution.
o
If the logs in the restore directory do not contain any updates
for one of the files in the destination directory, the
tp_restore
command generates an information message stating that a file
was
not updated because no transactions affected it.
o
If the restore directory does not have the correct starting log
for some files in the destination directory, the tp_restore
command rolls forward transactions into the other files in the
destination directory. It also generates an information
message
telling you that a transaction file was not updated because the
correct starting point was not seen in any logs. The message
identifies the transaction file that was not updated. When
this message is returned, your transaction files are not
synchronized. You have the following options.
Option 1
Research the correct starting log file for the
unrestored transaction files, using the procedures
described in "Determining Which Log Files to Use in
the Restore Process." Move the additional log
files to the restore directory, and rerun tp_restore,
leaving the destination directory unchanged. Use the
-continuation argument if you are performing serial
restores.
If you are dealing with many transaction files or
transaction files that are very large, rerunning
tp_restore for all of the transaction files might be
too time consuming. In that case, perform the steps
in
Option 2, which reduces the runtime required by
tp_restore.
Option 2
The following steps describe how to run a tp_restore
session for an out-of-sync transaction file while
preserving the ability to continue with serial
restores later for the entire set of transaction
files.
a.
Research the correct starting log file for
the
unrestored transaction file, using the
procedures described in "Determining Which
Log
Files to Use in the Restore Process." Copy
the
starting log file and all subsequent log
files
into a temporary restore directory.
b.
Use the save and restore commands to move
the
unrestored transaction file into a temporary
destination directory. You must use the
save
and restore commands for this operation to
obtain the required system information about
the transaction file.
c.
Run tp_restore using the temporary restore
and
destination directories. The -continuation
argument is optional for this run.
d.
Use the save and restore commands to move
the
newly restored transaction file back to the
original destination directory.
e.
Examine the .out file in the temporary
restore
directory for the message that identifies
the
starting log for the next serial tp_restore.
Compare this starting log to the starting
log
identified in the .out file in the permanent
restore directory. The starting log for the
next serial tp_restore session must be the
earlier (older) of these two logs. If
necessary, copy log files from the temporary
restore directory into the permanent restore
directory.
f.
Option 3
You are now ready to continue normally with
serial tp_restore sessions.
If you are not performing serial restores, you can
run
a separate tp_restore session for the unrestored file
in the current destination directory, using the
following steps.
a.
Research the correct starting log file for
the
unrestored transaction file, using the
procedures described in the next section.
Move the missing log files into the restore
directory.
b.
Move the transaction data files that were
successfully rolled forward out of the
destination directory.
c.
Issue the tp_restore command.
Determining Which Log Files to Use in the Restore Process
--------------------------------------------------------The tp_restore command has been enhanced to require fewer log files than
it
formerly required in certain situations. Therefore, the recommended
strategy for determining the starting log file for a tp_restore command
has
changed. Note that you can successfully restore files using more logs
than
necessary; however, when you use extra log files, the tp_restore command
might take longer to execute.
Previously, you determined which log file should be the starting log file
based on the saved transaction file's last modified date. Now, you can
base
your decisions on the saved transaction file's save date. In situations
where files
enhancement
transaction
you
can restore
are saved more frequently than they are updated, this
can eliminate a large number of log files. For example, if a
file is updated monthly but is saved during weekly backups,
that file using log files made just prior to the save.
To determine the starting log file for a nonserial tp_restore command,
perform the following steps.
1.
Find the date/time the transaction data file was saved.
If you
are
restoring multiple files, be sure to find the date/time for the
transaction data file that was saved first (earliest).
2.
Find the log file whose date/time last modified is closest to
the
date found in step 1.
3.
Go back two log files prior to the log file found in step 2.
This
should be your starting log file.
To make step 2 easier, you might want to establish a record-keeping
procedure that keeps track of which log file is active at the time
transaction files are saved. A suggested form with a sample entry is
shown
in Figure 1. In the second column, record the log file name that is the
current target of the transaction_log link in the
>system>transaction_logs
directory when you start the save procedure. To find the log file name,
go
to the transaction_logs directory and execute the list -links command.
Transaction File Saved
---------------------1.
2.
3.
file1
Active transaction_log
at Start of Save
---------------------tlf.1-19.0000069219.93-04-05
Minus 2 Logs
to Restore
-----------....69217...
Figure 1. Active Log Files During Transaction File Saves
New Error Code for s$set_transaction_file and set_transaction_file
==================================================================
The following new error message was added to the s$set_transaction_file
subroutine and the set_transaction_file command in VOS Release 12. The
message supports the implementation of log-protected files, described in
the Release 12 Software Release Bulletin (R119-08). Log protection and
transaction protection are mutually exclusive file attributes.
e$invalid_log_protected_op
(7149)
file.
Invalid operation on a log protected
object. The file is a log-protected
It cannot also be a transaction-
protected
file.
Virtual Queues
==============
VOS now supports a new type of direct queue called a virtual queue.
This type of queue can improve performance by up to 50% and is
compatible with the existing direct queues. You specify this queue
type by using the s$msg_open_virtual subroutine (described later in
this section) to open it. Virtual queues support a maximum message
size of 32,767 bytes. The following restrictions apply to virtual
queues.
o The maximum queue depth is 1.
o Messages are handled on a first-in, first-out (FIFO) basis;
message
priority is ignored.
o All processes using the virtual queue must be on the same module
as
the queue.
o Virtual queues do not support tasking.
The s$msg_open_virtual Subroutine
-----------------------------The s$msg_open_virtual subroutine is used to open a virtual queue.
PL/I Usage
---------declare port_id
declare io_type
declare 01
declare
fixed bin(15);
fixed bin(15);
virtual_info
,
02 version
fixed bin(15),
02 maximum_msg_size
fixed bin(15),
02 msg_header_version fixed bin(15),
02 reserved
(13)fixed bin(15);
error_code
fixed bin(15);
declare s$msg_open_virtual entry
call s$msg_open_virtual
error_code);
( fixed bin(15), fixed bin(15),
1 like virtual_info, fixed bin(15));
( port_id, io_type, virtual_info,
C Usage
------short int
short int
port_id;
io_type;
struct virtual_info_tag{
short int
version;
short int
maximum_msg_size;
short int
msg_header_version;
short int
reserved[13];
}
virtual_info;
short int
error_code;
void s$msg_open_virtual(short int*, short int*,
struct virtual_info_tag*, short int*);
s$msg_open_virtual( &port_id, &io_type, &virtual_info, &error_code);
COBOL Usage
----------01 port_id
01 io_type
comp-4.
comp-4.
01
virtual_info
.
02 version
comp-4.
02 maximum_msg_size comp-4.
02 msg_header_version comp-4.
02 reserved
comp-4 occurs 13.
01
error_code
comp-4.
call 's$msg_open_virtual' using port_id, io_type, virtual_info,
error_code.
Pascal Usage
-----------type virtual_info_type = record
version: short;
maximum_msg_size: short;
msg_header_version: short;
reserved: array[1..13] of short;
end;
var
port_id:
io_type:
virtual_info:
error_code:
short;
short;
virtual_info_type;
short;
procedure s$msg_open_virtual( port_id: short; io_type: short;
var virtual_info: virtual_info_type;
var error_code: short);
external;
s$msg_open_virtual( port_id, io_type, virtual_info, error_code);
Arguments
--------port_id (input)
Identifies a port attached to a virtual queue.
io_type (input)
The type of I/O for which you are opening the queue. The possible
values are as follows:
I/O Type
--------requester
server
Value
-----5
6
virtual_info (input)
Information about the queue to be opened. The values of the
arguments in the virtual_info structure are as follows:
version
The version number of the virtual_info structure.
Requesters and servers use the same version number.
This value must be 1 or 2.
maximum_msg_size
The maximum number of bytes in a request or reply
message. The value must be between 0 and 32,767,
inclusive. All openers of the queue must specify the
same value. Since each call to s$msg_open_virtual
allocates a buffer of the specified size in wired
memory, you should specify the smallest value possible
for maximum_msg_size.
msg_header_version
The version of the message header structure expected by
a server process. The value is 0 (no header) for servers;
requesters ignore this argument.
reserved
Reserved for future use.
error_code (output)
A returned error code.
Explanation
To create a virtual queue, use the command create_file or the
subroutine s$create_file to create a sequential file. That
file will become a virtual queue when you use
s$msg_open_virtual to open it. Servers must have write access
to the file; requesters must have non-null access.
A virtual queue must be on the same module as the server(s).
server must open a virtual queue before any requester can do
so.
A
A virtual queue can contain only one message at a time for each
port attached to the queue. A virtual queue cannot be
transaction-protected. That is, it cannot be used to
communicate between requesters and servers after a transaction
has been started by a call to s$start_transaction but before
the transaction has been committed or aborted.
Precautions When Closing Virtual Queues
When a requester calls s$msg_send to place a message in the
virtual queue, the message is initially written into the
requester's memory buffer. When a server's buffer becomes
available, the operating system copies the message into that
buffer. If the server closes the queue before the copy has
taken place, the last message sent may be lost. Consequently,
the requester should use s$msg_send to send a final dummy
"closing" message before closing the queue. A requester can
have only one message in its buffer at a time, so s$msg_send
will not return with a zero error code until the last "real"
message has been copied into a server's buffer. At that time,
the requester can safely close the queue.
Related Information
For related information, refer to the documentation of the
s$msg_open_direct subroutine in the VOS Transaction Processing
Facility manuals.
TPOverseer Performance Improvements (12.3 and 13.1.0)
=====================================================
Beginning in VOS Release 13.1.0, TPOverseer performance has been improved
to reduce or eliminate processing delays during transaction log switches.
Heavy users of the TPF should observe the following:
o little or no delay in operations during log switches
o much faster log switches
o fewer peaks in disk activity that could contribute to poor
response time
TPF Performance Improvements (12.3.0 and 13.3.0)
================================================
This section describes the TPF performance improvements for VOS Releases
12.3.0 and 13.3.0.
Some TPF users use the allow_deadlocks lock-arbitration parameter to
improve performance on heavily loaded systems experiencing poor
throughput.
In cases where such performance problems are related to excessive
pre-emptive transaction aborts, the use of allow_deadlocks eliminates
most
such aborts and allows complete control at the application level.
Although many TPF users have used this approach successfully, it can
cause
very undesirable side effects because the application is completely
responsible for preventing deadlock situations (since allow_deadlocks
inhibits pre-emptive aborts). A list of possible side effects follows.
o If a deadlock occurs, the application often does not detect the
situation until after significant delays occur.
o A deadlock situation can continually recur, causing extreme delays
for
all transactions requiring a lock held by a deadlocked
transaction.
o An application developer has no effective tools to help isolate
the
cause of the deadlock.
TPF for VOS Releases 12.3.0 and 13.3.0 addresses the preceding problems
as
follows:
o The minimum wait period always transpires
before a transaction is aborted, thus eliminating the performance
degradation that occurs when you do not set allow_deadlocks (the
default behavior).
In previous VOS releases, lock arbitration could cause excessive
transaction aborts. Consider the case in which two equally
deserving
transactions contend for the same lock. The transaction desiring
the
lock waits for the transaction holding the lock to complete. The
transaction waits for a minimum of five seconds and until the
implicit
or explicit wait time specified by the I/O call that resulted in
the
need to acquire the lock. (You can modify the five-second minimum
by
setting the new iotv$max_tp_wait_time variable via the
command. Stratus Customer Service personnel should see the Stratus
internal document SED-1884 for more information about this
variable.)
If the wait period passes and the lock is not released, and the
transaction holding the lock started after (that is, is younger)
the
transaction desiring it, the older transaction pre-emptively
aborts
the younger transaction. This behavior prevents deadlocks. Note
that
this behavior does not occur if you set allow_deadlocks.
The actual waiting is done by user-level I/O processing. Whenever
a
lock that some transaction is waiting for is released, all
processes
waiting for a lock in that file awaken and retry the I/O
operation,
which, in turn, tries again to acquire the lock. Often, the lock
will
then be available and the transaction can proceed. However, in
situations in which a younger transaction is still holding the
lock,
the older transaction aborts the younger transaction.
This algorithm works well when relatively few processes or
transactions are contending for records in the same file. However,
when many locks are in contention, the TPOverseer constantly
awakens
processes when other locks in the file are being released. As a
result, a lock will be retried (and the transaction holding it
will
abort), often without a sufficient wait period.
o Stratus has extended the lock-conflict logging capability
available
via the analyze_system command. In previous VOS releases, the
following values of the variable file_io$log_lock_conflicts (which
is of type short) allowed you to log certain occurrences of lock
conflicts.
- The default value 0 specifies that no logging should occur.
- The value 1 logs situations in which a log conflict could
lead to
an abort (for example, a conflict involving a transaction
desiring
a lock currently held by another transaction with a lower
priority).
- The value 2 logs all lock conflicts.
The types of conflict logging provided when you specify the value
1 or
2 provides detailed information about a system's behavior. Since
many
lock conflicts can occur even in normally running systems, the
amount
of logging required is very large and can itself affect
performance
adversely. Typically, you should turn on logging for a very
limited
time period and then analyze the log output.
Beginning in VOS Releases 12.3.0 and 13.3.0, you can use the
following
additional values of file_io$log_lock_conflicts during normal
system
operation. These values log transaction aborts resulting from
certain types of unusual lock conflicts. The variable
file_io$lock_conflict_time (which is of type long) represents an
elapsed time that is used in this determination. This variable's
default is five seconds, but it generally should have the same
time
setting as the variable iotv$max_tp_wait_time, which is the time a
transaction will wait for a lock before aborting a younger
transaction with equal priority that is holding the lock.
- The value 3 logs apparent deadlocks. Specifically, it logs
aborts
that occurred in situations in which the aborted transaction
continually held the required lock an undue amount of time
(that
is, a period of time that is greater than the value specified
for
file_io$lock_conflict_time).
- The value 4 logs suspicious aborts. Specifically, it logs
aborts
that occurred in situations in which possibly more than one
transaction held the lock an undue amount of time or in which
the
transaction was aborted because it started much later than
the
transaction desiring the lock. In the latter situation, the
set_tp_parameters command allows you to set the time value
that is
used to determine whether to abort. (See the VOS Transaction
Processing Facility manuals for more information about
set_tp_parameters.)
- The value 5 logs all lock-conflict aborts. This value is
similar
in behavior to the value 1 but is abort-oriented rather than
conflict-oriented. As with the value 1, you should not use
this
value during normal operation.
The logging performed when you specify the value 4 includes the
logging performed when you specify the value 3. The values of TP
parameters affect the circumstances under which transactions are
aborted, and, in turn, affect the logging resulting from
specifying
the value 3, 4, or 5. For example, if you specify the -ignore_time
argument, no aborts due to start-time differences will occur. If
you
also specify the -allow_deadlocks argument, no aborts will occur
for
equal-priority transactions.
Note that log messages are no longer written to the monitor
terminal,
only to the file (master_disk)>system>syserr_log.date.
o Stratus has extended the transaction-metering capability in the
analyze_system command so that users can monitor the number of
pre-emptive transaction aborts and reasons for the aborts as well
as
related information. Also, the command now meters the amount of
time a
user process holds read locks and the time the TPOverseer takes to
release write locks. See "New TPF-Related Requests of the
analyze_system Command" later in this .doc file for more
information.
New TPOverseer Error Message (13.1.0)
=====================================
Beginning in VOS Release 13.1.0, the TPOverseer returns a message in the
file (master_disk)>system>syserr_log.<date> when it stops accepting new
transactions in order to finish processing backlogged transactions.
Previously, the TPOverseer did not return a message under these
circumstances, which sometimes confused users.
The text of the new message follows.
Forcing flush -- idle needed
You can avoid seeing this message and obtain better throughput
performance
in the future if you increase the size of the transaction work area
(TWA),
the transaction log file (TLF), or both. The default size for both is
500
blocks. If your TPF application processes a large number of
transactions,
you should consider setting the size of the TWA and TLF to a minimum of
5000 blocks each. If you continue to see the new message, increase the
size of the TWA and TLF until you no longer see the message.
New TPOverseer Error Messages (12.3.0 and 13.3.0)
=================================================
The TPOverseer enters one of two error messages in the file
(master_disk)>system>syserr_log.date when it stops accepting new
transactions in order to finish processing backlogged transactions.
Previously, the TPOverseer did not display an error message under these
circumstances.
If your transaction log file (TLF) is too small, the TPOverseer enters
the
following error message.
TLF too small, Forcing flush -- idle needed
If your transaction work area (TWA) is too small, the TPOverseer enters
the
following error message.
TWA too small, Speed flush selected
To avoid these error messages and obtain better throughput performance in
the future, increase the size of the TWA, the TLF, or both. The default
size for each is 500 blocks. If your TPF application processes a large
number of transactions, you should consider setting the size of the TWA
and
TLF to a minimum of 5000 blocks each. If you continue to see one of
these
error messages, increase the size of the TWA and TLF until you no longer
see the message.
New TPF-Related Requests of the analyze_system Command
======================================================
This section documents five new TPF-related analyze_system requests.
o
o
o
o
o
dump_tpo
dump_transaction
list_transactions
tpq_meters
transaction_meters
Note that these requests existed in previous VOS releases but are being
documented for the first time in this .doc file.
The dump_tpo Request
-------------------Purpose
This request displays information about the TPOverseer's internal data
structures.
Display Form
----------------------------- dump_tpo -----------------------------structure:
all
-match:
-hash_tables: no
-brief:
yes
Command-Line Form
dump_tpo structure
[-match match_string]
[-hash_tables]
[-no_brief]
Arguments
structure
<CYCLE>
Specifies the internal data structure to be dumped. The default
value
all dumps all three structures: tp_state_info, gn, and g. The
tp_state_info structure is a part of VOS and thus can be referenced
regardless of the current process. The gn and g structures are
global
structures internal to the TPOverseer. To display information in
these structures, the current process must be the TPOverseer
process.
(To change the current process to the TPOverseer process, specify
the
who request, followed by the process request. See "Examples" later
in
this section for an example.)
-match match_string
Displays only the lines containing a match with the specified
string.
-hash_tables
<CYCLE>
Displays the various hash tables contained in the structures. These
hash tables include the following:
o the shorthand and module hash tables in the g structure
o the page, afte, and mod_page hash tables in the gn structure
o the tio and gtid hash tables in the tp_state_info structure
This argument produces lengthy output, so you should avoid
specifying
it unless you have a specific reason to examine these tables. By
default, the request does not display the hash tables contained in
the
structures.
-no_brief
<CYCLE>
Specifies detailed information about the structures. By default, the
request displays concise information about the structures.
Explanation
This request displays values related to the TPOverseer.
Examples
The following examples illustrate the use of the dump_tpo request. (In
the
examples, note that monospace bold represents user input.) In the first
example, the -no_brief argument is specified to show detailed information
about the structures. Note that the last line of the output indicates
that
the TPOverseer is not the current process.
as: dump_tpo -no_brief
tp_overseer_running:
TRUE
tp_overseer_alive:
TRUE
Structure tp_state_info @ 40C01030
tp_version_no:
1356
tp_file_version_no:
5
tp_o/r_wait_event:
40C07990
tp_o/r_signal_event:
40C07A00
file_change_lockp:
40C025E0
tp_overseer_pid:
01088026
tp_overseer_no_space:
FALSE tp_overseer_dying:
FALSE
tp_overseer_working:
FALSE tp_overseer_notified:
FALSE
tlf_nearly_full:
FALSE tlf_too_long_since_idle: FALSE
tlf_too_long_since_switch: TRUE
tpo_work_list:
40C01070: 00000001 40C01070 00000001
40C01070
num_odd_log_tsi:
0
num_odd_log_gbl_tsi:
0
num_even_log_tsi:
1
num_even_log_gbl_tsi:
0
current_view:
1
num_committing_gbl_tsi (0): 0
num_committing_gbl_tsi (1): 0
num_local_committing_tsi (0): 1
num_local_committing_tsi (1): 0
num_local_committing_gbl_tsi (0): 0
num_local_committing_gbl_tsi (1): 0
TSI list header:
40C01088: 40D79FE0 40D79FE0 4144C4C0
4144C4C0
TSI free list num_entries: 5
KWL list header:
40C010B0: 40FE8EC0 40FE8EC0 40FE8EC0
40FE8EC0
KWL free list num_entries: 1
FLI list header:
40C010D8: 40FFC4A0 40FFC4A0 40FF6EB0
40FF6EB0
FLI free list num_entries: 3
RRL list header:
40C01100: 40FCC600 40FCC600 40FED6E0
40FED6E0
RRL free list num_entries: 44
RWL list header:
40C01128: 4144AE70 4144AE70 40FF2FF0
40FF2FF0
RWL free list num_entries: 4
KRL list header:
40C01150: 40DDE7C0 40DDE7C0 40FD4AF0
40FD4AF0
KRL free list num_entries: 4
GTID list header:
40C01178: 00000001 40C01178 00000001
40C01178
GTID free list num_entries: 0
num_precommitted_txns:
0
precommitted_gtid_list:
40C025A4: 00000001 40C025A4 00000001
40C025A4
Structure tp_default_parameters @ 005FEB76
priority:
0
flags:
none
dump_tpo: Further information available only with TPOverseer as
current
process.
In the second example, the who request is specified to find the
TPOverseer's process number. Once the process number is found, the
process
request is specified to set the TPOverseer process as the analyzed
process.
Finally, the dump_tpo request is specified to display information about
the
TPOverseer's internal structures (note that the request also displays the
g
and gn structures).
as: who
PROC
PTEP
1 00342AA0
3 40BA5170
USER NAME
CPU12.Idle (Idle_12)
Cache_Manager_Post.System (Cache_Manager_Post), on
CPU14
4 40BA8490
5 40BAB400
6 40BB3790
7 40BB5010
...
36 40CB03A0
38 40E41640
39 40E47380
...
Cache_Manager_Timer.System (Cache_Manager_Timer)
Cache_Manager_Locker.System (Cache_Manager_Locker)
CPU0.Idle (Idle_0)
CPU2.Idle (Idle_2)
Paging_Daemon.System (Paging_Daemon0)
Overseer.System (TPOverseer), on CPU8
Overseer.System (LinkServer1)
as: process 38
Using process on CPU10.
Current process is 38, ptep 40E41640, Overseer.System (TPOverseer)
Process is running on CPU 10 right now; no stack addr known.
as:
dump_tpo
tp_overseer_running:
TRUE
tp_overseer_alive:
TRUE
Structure tp_state_info @ 40C01030
tp_version_no:
1356
tp_file_version_no:
5
tp_o/r_wait_event:
40C07990
tp_o/r_signal_event:
40C07A00
file_change_lockp:
40C025E0
tp_overseer_pid:
01088026
tp_overseer_no_space:
FALSE tp_overseer_dying:
FALSE
tp_overseer_working:
FALSE tp_overseer_notified:
FALSE
tlf_nearly_full:
FALSE tlf_too_long_since_idle: FALSE
tlf_too_long_since_switch: TRUE
tpo_work_list:
40C01070: 00000001 40C01070 00000001
40C01070
num_odd_log_tsi:
0
num_odd_log_gbl_tsi:
0
num_even_log_tsi:
3
num_even_log_gbl_tsi:
0
current_view:
0
num_committing_gbl_tsi (0): 0
num_committing_gbl_tsi (1): 0
num_local_committing_tsi (0): 0
num_local_committing_tsi (1): 3
num_local_committing_gbl_tsi (0): 0
num_local_committing_gbl_tsi (1): 0
num_precommitted_txns:
0
precommitted_gtid_list:
40C025A4: 00000001 40C025A4 00000001
40C025A4
Structure tp_default_parameters @ 005FEB76
priority:
0
flags:
none
Structure g @ 00E2D888
my_process_id:
01088026
flags:
idle_written,semi_idle_written
next_run_time:
0000000C2FA332FD
last_free_time:
0000000C2F99A137
next_network_time:
FFFFFFFFFFFFFFFF
next_flush_time:
0000000000000000
next_flush_try_time:
0000000C2F9E00DC
next_idle_time:
0000000C31F60AB1
next_idle_flush_time:
0000000000000000
next_flush_section_time:
0000000000000000
wait_lists:
driver_list:
00E2D8E0: 00000001 00E2D8E0 00000001
00E2D8E0
flush_list:
00E2D8F0: 00000001 00E2D8F0 00000001
00E2D8F0
physical_wait_list:
00E2D910: 00000001 00E2D910 00000001
00E2D910
module_wait_list:
00E2D920: 00000001 00E2D920 00000001
00E2D920
tlf_output_info:
tlf_number:
299878
high_offset:
8339973
high_offset_tried:
high_offset_flushed:
high_offset_idled:
log_record.max_len:
log_record.recp:
free_shorthand:
00E73E48
shorthand_hashp:
8339885
8339885
3451
24576
00E955F0
00E2D95C: 00E73E9C 00E73E9C 00E73E48
00E42620
Structure gn @ 00E2A558
twa_portep:
40DC6E10
twa_aftep:
40DC6EE0
twa_fip:
40DC7000
n_indexes:
28
num_pages:
2000
num_free_pages:
2000
cur_section_infop:
00000001
cur_file_infop:
00000001
next_to_twa_time:
0000000000000000
to_twa_list:
00E2A578: 00000001 00E2A578
00E2A578
next_log_in_twa_time:
0000000000000000
log_in_twa_list:
00E2A590: 00000001 00E2A590
00E2A590
in_twa_list:
00E2A5A0: 00000001 00E2A5A0
00E2A5A0
next_to_file_time:
0000000000000000
to_file_list:
00E2A5B8: 00000001 00E2A5B8
00E2A5B8
next_log_in_file_time:
0000000000000000
log_in_file_list:
00E2A5E0: 00000001 00E2A5E0
00E2A5E0
next_bmex:
5
twa_path:
%s#m1>system>transaction_logs>transaction_work_area
00000001
00000001
00000001
00000001
00000001
The dump_transaction Request
---------------------------Purpose
This request displays information about a specific Transaction State Info
(TSI) structure.
Display Form
-------------------------- dump_transaction ----------------------------address:
-brief: no
Command-Line Form
dump_transaction address
[-brief]
Arguments
address
Required
A standard analyze_system address string representing the TSI's
location. The list_transactions request identifies the address of
the
various TSIs that this argument displays.
-brief
<CYCLE>
Displays the hash, work, and net links and the file_lock_info
structures queued on the lock_list links. By default, the request
does not display these links and structures.
Explanation
The dump_transaction request displays a single TSI structure and,
optionally, a list of associated file_lock_info structures.
Examples
In the following example, the dump_transaction request displays a TSI
structure. The transaction has modified two files and is not yet
committed. (In the example, note that monospace bold represents user
input.)
dump_transaction 80D971C0
Transaction_state_info:
Transaction ID:
0000000000000000
Started on module:
est
Started by process:
02018042)
Lock process ID:
02018042)
State:
Priority:
Arbitration flags:
Transaction flags:
start_log_is_set
Commit view:
Num blocks:
gtid_infop:
blocked_flip:
lock_code:
time_val:
wait_info:
extended:
retries:
aborts:
rlocks:
80D971C0
1EB7B1BD02015119
Commit ID:
%s2#m2 (2-1)
at:
96-04-30 13:11:09
66 on module %s2#m2 (2-1) (process ID:
66 on module %s2#m2 (2-1) (process ID:
TID_RUNNING_LOCKED
0
none
file modified, on hash list,
1
12
00000001
00000001
0
10
0
TRUE
0
0
6
wlocks:
meter_state:
meter_state:
Hash_links:
17
4 arrived/started
5 arrived/started
007D6148: 00000001 8019BC58 00000001
Work_links:
007D6158: 00000001 00000001 000A00001
Net_links:
007D6168: 00000001 00000001 000000001
lock_list:
007D61B8: 80D90CE0 80D90CE0 80D967220
8019BC58
00000001
00000001
80D96720
by_afte:
00861838: 80D91740 80D91750 0000000
by_tsi:
00861828: 80D96720 80D96720 00000001
afte_ptr:
afte name:
afte last record:
tp old last record:
tp last record:
tid waiting:
tid blocking:
tp lock type:
tp lock flags:
record_r_list:
80D91460
sys_aud_arc_file
178371818
178371818
178372030
80D90D0C00000001
80D90D0C00000000
reserve write lock
file modified, eof modified
0086186C: 00000001 80D90D24 00000000
record_w_list:
00861880: 80D911A0 80D911A0 80D97680
links:
00864688: 80D97680 80D97680 00000001
80D91510
80D96CD0
80D90D24
80D97680
80D90D38
byte w locked:
existed:
exists:
cur_size:
log_len:
log_offset:
links:
eof+
byte w locked:
existed:
exists:
cur_size:
log_len:
log_offset:
n_indexes:
by_afte:
eof+
0
false
true
102
106
96464752
00864688: 00000001 80D90D38 80D911A0
80D911A0
106
false
true
102
106
96464888
0
00861838: 80D961C0 80D961D0 00000001
801E1630
by_tsi:
00861828: 00000001 80D96CD0 80D90CE0
afte_ptr:
afte name:
afte last record:
tp old last record:
tp last record:
801E1580
sys_aud_file
2020914
2020914
2020914
80D90CE0
tid waiting:
tid blocking:
tp lock type:
tp lock flags:
record_r_list:
links:
1EB685E202015107
1EB685AB020150C3
reserve write lock
file modified
0086186C: 80D947C0 80D947C0 80D90E20 80D90
007D63C8: 80D95720 80D95720 00000001
80D96764
rec r locked:
links:
435564
007D63C8: 80D90E20 80D90E20 80D947C0
rec r locked:
links:
1242088
007D63C8: 00000001 80D96764 80D95720
rec r locked:
record_w_list:
1944454
00861880: 80D8F5C0 80D8F5C0 80D92000
80D947C0
80D95720
80D92000
links:
00864688: 80D90620 80D90620 00000001
80D96778
rec w locked:
existed:
exists:
cur_size:
log_len:
log_offset:
links:
435564
true
false
254
2
96464736
00864688: 80D92040 80D92040 80D8F5C0
80D8F5C0
rec w locked:
...
n_indexes:
locks on index:
r_list (1):
1083187
6
sys_aud_idx_3
00861898: 00000001 80D96790 00000001
w_list (1):
008618AC: 8022E040 8022E040 80D91D60
80D96790
80D91D60
links:
00864788: 80D92620 80D92620 80D8FDE0
key w locked: "
num dups:
max / num add:
max / num del:
offset:
value:
links:
01IJKJIHHHH3519714484632"
1
0 / 0
4 / 1
1
1242088
00864788: 80D91D60 80D91D60 8022E040
80D8FDE0
8022E040
key w locked: "
num dups:
max / num add:
max / num del:
offset:
value:
...
locks on index:
r_list (2):
80D967B8
01IJKKJIEEE3521404261987"
1
0 / 0
4 / 1
1
1944454
sys_aud_idx_4
008618C0: 00000001 80D967B8 00000001
w_list (2):
008618D4: 80D8F2A0 80D8F2A0 8022F8C0
8022F8C0
links:
00864788: 8022DF40 8022DF40 80D96380
80D96380
...
Max / Num modules:
0 / 0
The list_transactions Request
----------------------------Purpose
This request displays information about a specific list of TSIs or about
all TSIs active in the system.
Display Form
------------------------- list_transactions ---------------------------list_addr:
-list:
-started_before:
-state:
all
-brief:
no
Command-Line Form
list_transactions
[list_addr OR -list]
[-started_before date_time_string]
[-state]
[-brief]
Arguments
list_addr
A standard analyze_system address string representing the location
of
links that head a list of TSIs. This argument and the -list
argument
are mutually exclusive.
-list queue_name
Specifies an internal queue.
argument
are mutually exclusive.
This argument and the list_addr
-started_before date_time_string
Displays only TSIs for transactions started before date_time_string,
which is a standard date/time string.
-state
<CYCLE>
Displays those TSIs in the indicated state. The values are all,
aborted, committed, or running. The default value is all.
-brief
<CYCLE>
Displays the hash, work, and net links and the file_lock_info
structures queued on the lock_list links. By default, the request
does not display these links and structures.
Explanation
This request displays a list of TSI structures and, optionally, a list of
each of their associated file_lock_info structures.
Examples
An example of the list_transactions request follows. In this example,
only
two transactions are active. (In the example, note that monospace bold
represents user input.)
list_transactions -brief
tio_hash_head (39)::
80D971C0
Transaction_state_info:
Transaction ID:
0000000000000000
Started on module:
est
Started by process:
02018042)
Lock process ID:
02018042)
State:
Priority:
Arbitration flags:
Transaction flags:
Commit view:
Num blocks:
gtid_infop:
blocked_flip:
lock_code:
time_val:
wait_info:
extended:
meter_state:
meter_state:
Max / Num modules:
3FEA85D8: 80D971C0 80D971C0 80D971C0
Transaction_state_info:
Transaction ID:
1EB2870A00004FBD
Started on module:
est
Started by process:
02018042)
80D971C0
1EB7B20102015127
Commit ID:
%s2#m2 (2-1)
at:
80D971C0
1EB7B20102015127
Commit ID:
%s2#m2 (2-1)
at:
96-04-30 13:12:17
66 on module %s2#m2 (2-1) (process ID:
66 on module %s2#m2 (2-1) (process ID:
TID_RUNNING_LOCKED
0
none
on hash list
1
0
00000001
00000001
0
10
0
FALSE
4 arrived
5 arrived
0 / 0
96-04-30 13:12:17
66 on module %s2#m2 (2-1) (process ID:
State:
Priority:
Arbitration flags:
Transaction flags:
start_log_is_set
Commit view:
Num blocks:
gtid_infop:
blocked_flip:
lock_code:
time_val:
wait_info:
extended:
meter_state:
Max / Num modules:
TID_NET_PHASE_2
0
none
on work list, commit_started,
1
105
00000001
00000001
0
10
0
FALSE
0 arrived/started
0 / 0
The tpq_meters Request
---------------------Purpose
This request displays information about queues and pseudo queues used in
transaction processing.
Display Form
---------------------------- tpq_meters --------------------------------no_header:
no
-reset:
no
-full:
no
-queues:
-data:
-report:
yes
-interval:
-output_path:
Command-Line Form
tpq_meters
[-no_header]
[-reset]
[-full]
[-queues]
[-data]
[-no_report]
[-interval [time_interval]]
[-output_path file_name]
Arguments
-no_header
<CYCLE>
Suppresses the display of header information. By default, the
request
displays header information.
-reset
<CYCLE>
Temporarily resets the queue meters until you exit analyze_system.
By
default, the request does not reset the queue meters.
-full
<CYCLE>
Displays all queues, including those that are currently not active.
By default, the request does not display all queues. This argument
is
meaningful only if you also specify the -interval argument.
-queues
<CYCLE>
Displays actual and/or pseudo queues, based on which of the
following
values you specify.
- If you specify the driver value, the request displays actual
queues.
- If you specify the running value, the request displays pseudo
queues.
- If you specify the all value, the request displays actual and
pseudo queues. This is the default value.
-data
<CYCLE>
Determines the format in which the request displays data when you
also
specify the -interval argument. By default, the argument displays
the
average wait, busy, and total times associated with a queue, plus
the
message arrival count. A list of the formats follows.
- The averages value displays the average wait and busy times
only.
- The all value displays average and total times.
- The counts value displays the counts for arrivals, starts, and
completions, as well as averages.
- The time/counts value displays the total times and the total
counts.
- The time value displays the total wait and busy times, as well
as
the total combined times since you started the tpq_meters
request.
-no_report
<CYCLE>
Specifies that the request should not display data. By default, the
request always displays data. You should specify this argument with
the -reset argument, which typically does not display data; in this
case, the request displays the data before the reset occurs.
-interval [time_interval]
Specifies a value from 1 through 60 indicating the interval at which
the request displays queue values. The time_interval value
represents
seconds and is rounded up to one of the following: 1, 2, 5, 10, 30,
or 60. If you do not specify the optional time_interval value, the
default value is 10. When you specify this argument, the -data
argument determines the display's format.
-output_path file_name
Directs the output from the terminal's screen to file_name. By
default, the request directs output to the terminal's screen.
Explanation
This request displays information about queues and pseudo queues.
Examples
The following example illustrates the use of the tpq_meters request
without
the -interval argument specified.
time
meter
wait_time
busy_time
arrive
start
complete
1:04:41 driver
1
0
2513
2513
1:04:41 idle_wait
0
0
0
0
1:04:41 tlf_flush
324
0
845
845
1:04:41 phy_wait
63
0
845
845
1:04:41 section
0
595
845
845
1:04:41 to_twa
23
120
844
843
1:04:41 log_in_twa
69
464
843
843
1:04:41 in_twa
37
309
843
843
1:04:41 to_file
10305
816
843
833
1:04:41 file_info
10328
52
831
816
349
465
816
816
0
0
0
0
2513
0
845
845
844
843
843
843
831
816
1:04:41 log_infile
816
1:04:41 module_wait
0
1:04:41 running
523
1656
858
858
1:04:41 rmt_running
0
0
0
0
1:04:41 hold_rlocks
3766
1510
870
867
1:04:41 hold_wlocks
3767
3658
870
867
856
0
865
863
The columns in the preceding example have the following meanings.
o The time column shows the number of hours, minutes, and seconds (in
the format hh:mm:ss) over which the statistics have been collected.
o The meter column shows the name of the queue.
o The wait_time column shows the average queue waiting time.
o The busy_time column shows the average queue busy time.
o The arrive, start, and complete columns show the counts of
arrival/start/completion events for each queue.
If you specify the -reset argument, the request will reset the output
shown
in the preceding example; future counts and averages will be calculated
from the time of the reset.
The transaction_meters Request
-----------------------------Purpose
This request displays various TP meters and allows you to reset the TP
metering level.
Display Form
------------------------- transaction_meters ----------------------------set_metering:
-no_header:
no
-reset:
no
-report:
yes
-interval:
-full:
no
-brief:
yes
-max_values:
yes
-lock_info:
no
-detail_aborts: no
-output_path:
Command-Line Form
transaction_meters
[-set_metering]
[-no_header]
[-reset]
[-no_report]
[-interval [time_interval]]
[-full]
[-no_brief]
[-no_max_values]
[-lock_info]
[-detail_aborts]
[-output_path file_name]
Arguments
-set_metering
Changes the current TP metering level.
following values.
<CYCLE>
This argument has the
- The none value indicates that metering is not enabled.
- The basic value enables basic metering.
- The queue value enables queue metering.
- The extended value enables extended metering. You can specify
extended only if the -max_metering argument of the tp_overseer
command was set to extended.
For more information about these values, see ''Changes to the
tp_overseer Command" earlier in this chapter.
-no_header
<CYCLE>
Suppresses the display of header information. By default, the
request
displays header information.
-reset
<CYCLE>
Temporarily resets the queue meters until you exit analyze_system.
By
default, the request does not reset the queue meters.
-no_report
<CYCLE>
Specifies that the request should not display data. By default, the
request always displays data. You should specify this argument with
the -reset argument, which typically does not display data; in this
case, the request displays the data before the reset occurs.
-interval [time_interval]
Specifies a value from 1 through 60 indicating the interval at which
the request displays queue values. The time_interval value
represents
seconds and is rounded up to one of the following: 1, 2, 5, 10, 30,
or
60. If you do not specify the optional time_interval value, the
default value is 10. When you specify this argument, the -data
argument determines the display's format.
-full
<CYCLE>
Displays all meters, including those with a value of 0. By default,
the request does not display all meters. This argument is meaningful
only if you also specify the -interval argument.
-no_brief
<CYCLE>
Displays more detailed information about lock-contention statistics:
notifies, time-outs, retries, and lock aborts. By default, the
request
displays concise information about lock-contention statistics.
-no_max_values
<CYCLE>
Specifies that the request should not display the maximum values of
each of the queue and pseudo-queue statistics. By default, the
request
displays the maximum values of each of the queue and pseudo-queue
statistics. If you also specify the -lock_info argument, the request
displays the maximum number of retries, aborts, read-locks held, and
write-locks held for any single transaction. Note that this argument
displays information only if you are performing extended metering.
-lock_info
<CYCLE>
Displays information about lock-contention statistics involving the
number of waits and retries to acquire locks. By default, the
request
does not display this information.
-detail_aborts
<CYCLE>
Breaks down the display of aborts into further categories. When you
specify the default value of no, the request categorizes aborts as
user requested, lock conflict, remote, or other, which is sufficient
detail in most cases. If you specify a value of yes, the request
displays up to 16 different types of aborts. In general, you should
not specify this argument with the -interval argument, as your
terminal's screen cannot display all of the information.
-output_path file_name
Directs the output from the terminal's screen to file_name. By
default, the request directs output to the terminal's screen.
Explanation
This request displays the values of various TP meters.
Examples
The following example illustrates the use of the transaction_meters
request
with the -interval and -lock_info arguments specified.
Transaction Processing Statistics
metering time: 0031:17:26
10sec
30sec
1min
5min
10min
Started
11
33
70
331
723
Committed
12
34
70
330
719
Completed
12
34
71
330
720
Lock aborts
Readonly txns
Lock Waits
0
0
0
0
0
5
0
0
8
2
8
94
3
13
204
Lock Rewaits
0
2
3
54
113
Retries
1
5
8
95
205
Notifies
1
5
8
94
203
Timeouts
Time Aborts
Wait Aborts
Deadlock Aborts
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
2
2
1
1
Max running
4810
4878
5513
7569
7569
Max hold_rlocks 10s
10s
11s
20s
20s
Max hold_wlocks 13s
14s
14s
23s
23s
Max driver
Max phy_wait
9
2876
20
2876
20
2876
20
2876
20
3193
Max section
2875
2875
2875
2875
3192
Max tlf_flush
719
1215
1370
3016
3016
Max log_infile
3176
3176
3176
3176
3425
Max log_in_twa
3075
3075
3075
3075
4125
Max to_file
14s
14s
14s
14s
15s
Max file_info
12s
12s
12s
13s
13s
Max in_twa
779
1012
1107
2084
2084
Max to_twa
1106
1199
1379
2683
2683
Max retries
1
2
2
8
8
1hr
Total
906
901
903
4
14
233
129
233
231
2
3
1
1
8449
20s
27s
20
3193
3192
3016
3425
4125
15s
13s
2084
2683
8
Max aborts
Max rlocks
Max wlocks
147
0
41
140
0
42
147
0
42
147
1
42
147
1
42
147
1
42
Download