Download Latest Version tpc-c-ifmx.tar.gz (392.7 kB)
Email in envelope

Get an email when there's a new version of IIUG Software Repository

Name Modified Size InfoDownloads / Week
Parent folder
README.1st 2019-06-13 2.5 kB
spsl.sql 2019-06-13 780 Bytes
Totals: 2 Items   3.3 kB 0
SP_SHOW_LOCKS, by Thomas J. Girsch
----------------------------------

The enclosed procedure, sp_show_locks(), gives a detailed list of which user
sessions currently hold locks against a specified database table, and what
type of locks they hold.  It has proven to be (for me, at least) an
invaluable tool in solving concurrency issues.

To create the sp_show_locks() procedure on a database <db>, simply type:

        dbaccess <db> spsl.sql

The procedure is only intelligent enough to find locks held against the current
database, so if you have many databases you'll have to modify the proc or else
create it in each database.

Usage:

        EXECUTE PROCEDURE sp_show_locks(<table-pattern>);

where <table-pattern> is the name of a table (as a quoted string) or a wildcard
The procedure is only intelligent enough to find locks held against the current
database, so if you have many databases you'll have to modify the proc or else
create it in each database.

Usage:

        EXECUTE PROCEDURE sp_show_locks(<table-pattern>);

where <table-pattern> is the name of a table (as a quoted string) or a wildcard
pattern that will match one or more tables.

Examples:

        EXECUTE PROCEDURE sp_show_locks("orders");
                -- shows current locks held against the 'orders' table

        EXECUTE PROCEDURE sp_show_locks("sys*");
                -- shows current locks held against system catalogs

        EXECUTE PROCEDURE sp_show_locks("*");
                -- shows all locks held


Example Output:

	(expression)  User informix (606) is 'X   ' locking table orders

In the above output, 'informix' is the user locking the table.  The number in
parens is the session ID of the session that owns the lock.  'X' is the lock
mode (exclusive), and 'orders' is the table name.


CAVEATS:

- Because the SP uses the SMI interface to get its information, it can
  often be somewhat slow.  I've seen it take as long as 30-45 seconds to
  return, although this isn't typical
- The procedure doesn't tell you whether a row/page in the table is being
  exclusively locked, or if the whole table is being locked.
- I thought about modifying the procedure to expand the lock mode from the
  letter code to a descriptive name, but this would have required hard-
  coding a mapping, and I felt that for forward-compatibility's sake this
  would be unwise.

If you have questions, comments, or just want to talk, I can be reached via
my e-mail, <tgirsch@iname.com>

Enjoy!

- Tom Girsch
Source: README.1st, updated 2019-06-13