创建表时,缺省锁定方式是 page。可以通过设置 IFX_DEF_TABLE_LOCKMODE 环境变量或 DEF_TABLE_LOCKMODE 配置参数以在创建或变更表时更改锁定方式(从而提高或降低并发性)。
如果您知道大多数应用程序可能会从行锁方式中获益,那么可以执行以下操作:
- 在每条 CREATE TABLE 语句或 ALTER TABLE 语句中,使用 LOCK MODE ROW 子句。
- 将 IFX_DEF_TABLE_LOCKMODE
环境变量设置为 ROW,这样您以后在会话中创建的所有表均会使用 ROW,而无需在 CREATE TABLE 语句或 ALTER TABLE 语句中指定锁定方式。
- 将 DEF_TABLE_LOCKMODE 配置参数设置为 ROW,这样您以后在
数据库服务器中创建的所有表均会使用 ROW,而无需在 CREATE TABLE 语句或 ALTER TABLE 语句中指定锁定方式。
如果使用 IFX_DEF_TABLE_LOCKMODE 环境变量或 DEF_TABLE_LOCKMODE 配置参数更改锁定方式,那么现有表的锁定方式将不受影响。现有表仍继续使用其创建时定义的锁定方式。
此外,如果先前将表的锁定方式更改为 ROW,而随后执行了 ALTER TABLE 语句以改变
表的其他某个特征(例如,添加列或者更改扩展数据块大小),那么您将不需要指定锁定方式。锁定方式仍为 ROW,而不设置为缺省的 PAGE 方式。
您仍可以通过在 CREATE TABLE 语句或 ALTER TABLE 语句中指定 LOCK MODE 子句来重设个别表的锁定方式。
以下列表显示了表上锁定方式的优先顺序:
- 系统缺省的是页锁。如果不设置配置参数和环境变量,或者不在 SQL 语句中指定 LOCK MODE 子句,那么数据库服务器使用此系统缺省值。
- 如果设置了 DEF_TABLE_LOCKMODE 配置参数,那么在未设置环境变量或者未在 SQL 语句中指定 LOCK MODE 子句时,数据库服务器将使用此值。
- 如果设置了 IFX_DEF_TABLE_LOCKMODE 环境变量,那么该值将覆盖 DEF_TABLE_LOCKMODE 配置参数和系统缺省值。如果不在 SQL 语句中指定 LOCK MODE 子句,那么数据库服务器将使用该值。
- 如果在 CREATE TABLE
语句或 ALTER TABLE 语句中指定 LOCK MODE 子句,那么此值将覆盖 IFX_DEF_TABLE_LOCKMODE 和 DEF_TABLE_LOCKMODE 配置参数以及系统缺省值。