IFX_SESSION_LIMIT_LOCKS session environment option
When IFX_SESSION_LIMIT_LOCKS is set in the session, its setting can specify a lower limit than the SESSION_LIMIT_LOCKS configuration parameter value for the maximum number of locks for users who are not administrators. This option, however, cannot restrict the number of locks in the session of a user who holds administrative privileges, such as user informix or a DBSA user, and cannot specify a limit for nomadministrative users below 500 locks.
The SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS statement cannot reset the maximum number of locks in a session to a value higher than the current setting of the SESSION_LIMIT_LOCKS configuration parameter.
The SET ENVIRONMENT AUTOLOCATE statement of SQL supports the following syntax:
Element | Description | Restrictions | Syntax |
---|---|---|---|
integer | Nonnegative integer that defines how many locks in the internal lock table are available during the session for nonadministrative users | Must be in the range 500 integer SESSION_LIMIT_LOCKS value |
Quoted String |
Usage
For users who are not administrators
of the database server instance, the IFX_SESSION_LIMIT_LOCKS session
environment option can have an integer values greater than 499
but
no greater than the current value of the SESSION_LIMIT_LOCKS configuration
parameter.
'integer'
or"integer"
- This defines the maximum number of locks that a nonadministrative user can hold during the session. If the SESSION_LIMIT_LOCKS configuration parameter is not set, the upper limit is 2,147,483,647 locks.
If the IFX_SESSION_LIMIT_LOCKS session environment option and the SESSION_LIMIT_LOCKS configuration parameter are set to different values, the session environment option takes precedence over the configuration parameter for operations during the current sessions by users who are not administrator, but only until the current session ends. If neither of those values is set, the default limit for every user is 2,147,483,647 locks.
Lock limits set by users who are not administrators
If
you are a regular user, you (or the sysdbopen routine
that configures your session) can set the IFX_SESSION_LIMIT_LOCKS
session environment option only to an unsigned integer value between
the minimum (500
) and the current value set by the SESSION_LIMIT_LOCKS configuration
parameter.
SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS '1056';
SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS '400'; --Below lower limit
-26041: Invalid values specified for the environment variable.
Issuing
this exception is unlike the behavior of the SESSION_LIMIT_LOCKS configuration
parameter, which replaces any nonnegative setting in the range from 0
to
499, or any negative value, with 500
, the
minimum value for nonadministrative users.- If the session is using Repeatable Read isolation level for operations on large tables, because each row touched requires a lock.
- If the session of a non-DBSA user is running commands of the cdr utility of Enterprise Replication.
Lock limits set by administrative users
2147483647
, which
is already the default limit for administrative users. If you attempt
to set this option to any other specific value, the database server
will either issue the -26041
invalid value
error, or else error -26000
, indicating that
administrative users cannot set a limit on the locks in their own
sessions:SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS "2147456789";
-26000 Locks cannot be limited for a user who has administrative privileges.
In releases earlier than version 12.10.xC4, it was possible for administrators to restrict themselves, but this is no longer an option.
Lock limits for sessions in tenant databases
An administrator can use the SQL administration API to create a tenant database with the tenant create argument to the admin() or task() function. The function call can include a session_limit_locks: parameter value to set a nondefault limit on the number of locks that nonadministrative users can hold in a session.
250000
locks for each nonadministrative user session. EXECUTE FUNCTION task('tenant create','companyC',
'{dbspace:"companyC_dbs1,companyC_dbs2,companyC_dbs3",
sbspace:"companyC_sbs",
vpclass:"tvp_C,num=4",
dbspacetemp:"companyC_tdbs",
session_limit_locks:"250000",
logmode:"UNBUFFERED",
locale:"en_us.8859-1"}'
);
3000
to change that limit for the same companyC tenant
database: EXECUTE FUNCTION task('tenant update','companyC',
'{session_limit_locks:"3000"}');
Multiple properties can be reset by a single "tenant
update" function call, but this example resets only the session_limit_locks property
of companyC. The changed limit takes effect for new sessions.If
the companyC database was assigned a session limit of 3000
by
the previous SQL administration API "tenant update"
example, the following statement fails:
SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS '5000';
The example fails because this session environment variable cannot be set above the limit defined in the current setting of the session_limit_locks property of the tenant database.
SET ENVIRONMENT IFX_SESSION_LIMIT_LOCKS '1600';
If
the session_limit_locks property currently specifies
a limit of 3000
, that limit would be temporarily
reduced to 1600
. This lower limit on locks persists
in the tenant database for all new sessions of nonadministrative users,
until the session in which sysdbopen routine set
the new lower limit terminates. The limit on locks then reverts to
the current session_limit_locks setting. In tenant databases, as in all databases, the IFX_SESSION_LIMIT_LOCKS setting has no effect on users who hold administrative privileges, such as user informix or DBSA users.