To resolve a locking problem, you need to
start by diagnosing the type of lock event causing the SQL query performance
slowdown, or query completion failure, and the SQL statement or statements
involved. The steps to help in diagnosing the type of locking problem
and the steps that can then be taken to help resolve the locking issue
are provided here.
Introduction
A locking problem
is the proper diagnosis if you are experiencing a failure of applications
to complete their tasks or a slow down in the performance of SQL queries
due to locks. Therefore, the ideal objective is not to have any lock
timeouts or deadlocks on a database system, both of which result in
applications failing to complete their tasks.
Lock waits are
normal expected events, but if the time spent waiting for a lock becomes
large, then lock waits can slow down both SQL query performance and
completion of an application. Excessive lock wait durations have a
risk of becoming lock timeouts which result in the application not
completing its tasks.
Lock escalations are a consideration as
a locking problem when they contribute to causing lock timeouts. Ideally,
the objective is not to have any lock escalations, but a small number
can be acceptable if adverse effects are not occurring.
It is
suggested that you monitor lock wait, lock timeout, and deadlock locking
events at all times; typically at the workload level for lock waits,
and at the database level for lock timeouts and deadlocks.
The
diagnosis of the type of locking problem that is occurring and its
resolution begins with the collection of information and looking for
diagnostic indicators. The following sections help to guide you through
this process.
Collect information
In general, to be able
to objectively assess that your system is demonstrating abnormal behavior
which can include processing delays and poor performance, you must
have information that describes the typical behavior (baseline) of
your system. A comparison can then be made between your observations
of suspected abnormal behavior and the baseline. Collecting baseline
data, by scheduling periodic operational monitoring tasks, is a key
component of the troubleshooting process. For more detailed information
about establishing the baseline operation of your system, see: "Operational monitoring of system performance".
To confirm what type of locking problem is the reason
for your SQL query performance slowdown or query completion failure,
it is necessary to collect information that would help to identify
what type of lock event is involved, which application is requesting
or holding this lock, what was the application doing during this event,
and the SQL statement or statements that are involved in being noticeably
slow.
The creation of a locking event monitor,
use of a table function, or use of the db2pd command
can collect this type of information. The information gathered by
the locking event monitor can be categorized into three main categories:
- Information about the lock in question
- Information about the application requesting this lock and its current activities. In the case of a deadlock, this is information about the statement referred to as the victim.
- Information about the application owning the lock and its current activities. In the case of a deadlock, this is information about the statement referred to as the participant.
For instructions about how to monitor lock wait, lock
timeout, and deadlock locking events, see: Monitoring locking events.
Look for diagnostic indicators
The
locking event monitor, a table function, or running the db2pd command
can collect information that can help isolate the nature of a locking
problem. Specifically, the following topics contain diagnostically
indicative information to help you to diagnose and confirm the particular
type of locking problem you are experiencing.
- If you are experiencing long wait times and no lock timeouts, then you likely have a lock wait problem. To confirm: t0055234.html
- If you are experiencing an increased number of deadlocks than the baseline number, then you likely have a deadlock problem. To confirm: t0055236.html
- If you are experiencing an increased number of lock timeouts and the locktimeout database configuration parameter is set to a nonzero time value, then you likely have a lock timeout problem. To confirm (also consider lock wait problem): t0055235.html
- If you are experiencing a higher than typical number of lock waits and the locking event monitor indicates that lock escalations are occurring (Yes), then you likely have a lock escalation problem. To confirm: t0055237.html
No comments:
Post a Comment