Informix数据库基本操作和常用配置 联系客服

发布时间 : 星期一 文章Informix数据库基本操作和常用配置更新完毕开始阅读b79b1e32f111f18583d05a22

Stability和Repeatable Read之一。在Informix-4gl、ESQL/C、SQL中均可以使用。

为了减少死锁或者锁等待现象,informix11.5还提供一些新特性来提高应用系统并发执行效率,这里只介绍下我们用到的。通过设置USRLASTCOMMITTED参数来减少锁等待和死锁现象,通常该参数设置为ALL即可,USELASTCOMMITTED 选项可具有以下四个值中的任意一个:

1.如果值为“ COMMITTED READ ”,那么当数据库服务器尝试读取处于“已落实读”或“读已落实”隔离级别的行而遇到互斥锁时,它将读取最近落实的数据版本。

2.如果值为“ DIRTY READ ”,那么当数据库服务器尝试读取处于“脏读”或“读已落实”隔离级别的行而遇到互斥锁时,它将读取最近落实的数据版本。

3.如果值为“ ALL ”,那么当数据库服务器尝试读取处于“已落实读”、“脏读”、“读已落实”或“读未落实”隔离级别的行而遇到互斥锁时,它将读取最近落实的数据版本,建议设为该值。

4.如果值为“ NONE ”,那么此值将禁用可访问已锁定行中上次落实的数据版本的 USELASTCOMMITTED 功能。在此设置下,如果会话在尝试读取处于“已落实读”、“脏读”、“读已落实”或“读未落实”隔离级别的行时遇到互斥锁,那么在落实或回滚持有互斥锁的并发事务之前,事务不能读取该行。

或者用

SET ISOLATION COMMITTED READ;

SET ENVIRONMENT USELASTCOMMITTED 'ALL';

这样的SQL语句来设置当前的会话环境,这样设置只会对当前会话有效,如果

会话关闭或者重启IDS则不会有作用。在实际应用中可以在代码里开启事务的地方先执行这两条SQL语句用以保证这个事务中所使用的隔离级别。Informix默认的隔离级别是提交读,所以也可以只执行后面一条,或者直接在配置文件中修改USELASTCOMMITTED参数,这个修改可以即时生效,不需要重启IDS而且对整个IDS都有效。查看隔离级别可以用这个命令:Onstat –g sql。这个命令如果当前数据库没有会话连接,则只能看到系统表中的隔离级别和锁等待时间等信息,只有有会话连接到这个数据库时才会看到所使用的数据库的隔离级别。如果需要也可以加上锁等待的时间减少死锁的发生,这个也是只对当前会话有效:

set lock mode to not wait不等待,数据库缺省值

set lock mode to wait无限等待

set lock mode to wait <#sec>后接参数,单位秒,系统数据库中缺省值5秒

使用USELASTCOMMITTED 配置参数可以扩展到脏读(Dirty Read)、未落实读取(Read Uncommitted)和已落实读取(Read Committed)隔离级别。

还有一种提高并行性的设置,使用 Set Isolation to Committed Read Last Committed 语句,为 SET ISOLATION TO COMMITTED READ 语句引入新的 LAST COMMITTED 关键字选项,可减少尝试读取表时发生锁定冲突的风险。采用该语句,当用户读取正在被其他用户修改的数据时不在处于锁等待状态,而是可以读取修改前最近落实版本的数据值。 这样,由于不会产生锁等待,应用程序效率会显著提高,而且,由于是读取修改前最近落实版本的数据值,也不会产生读取幻象数据(phantom data)的问题,同时,也会大大减少产生死锁的现象。它只支持“行”级别锁定,它不支持以下这些表:正在被 DataBlade 模块(DataBlade模块是一种标准的软件模块,它可以被插入到数据库中,用以扩展其能力,使用户

可以使用任何想要的数据来做任何想做的事情。用户可以融合和匹配来自第三方和Informix的DataBlade模块,或者编写自己的DataBlade模块来创建革新化的商务应用。每个DataBlade模块都包含某一特定领域数据管理的专业知识,可以简单地插入到数据库中,既可以单独使用,又可以与其他DataBlade模块一起使用。有了这种灵活性,用户就可以扩充其DBMS,来解决现在以及将来的特殊数据管理问题。)访问的表、列中具有集合数据类型的表、使用虚

拟表界面创建的表、具有页面级别锁定的表、具有专用表级别锁定的表或无事务记录的数据库中的表。在跨服务器的分布式查询中,如果发出查询的会话的隔离级别具有有效的 LAST COMMITTED 隔离级别,但一个或多个参与操作的数据库不支持该 LAST COMMITTED 功能,那么整个事务符合发出该事务的会话的“已落实读”或“脏读”隔离级别,而不启用 LAST COMMITTED 选项。

LOCKS

LOCKS参数用于设置锁的数量,默认是20000个,如果有需要可以适当增大一些。

LTXHWM(Long-Transaction High-Watermark)

长事务深水线比例是指整个逻辑日志空间的一个百分比值。当一个事务占用整个逻辑日志空间的百分比超过这个值时,该事务就成为长事务。可能一个很小的事务也会成为长事务,也可能日志空间分配的很大仍会有长事务的发生。当长事务发生时数据库系统就会强制对该事务进行回滚(rollback ), 以防止该事务继续填充日志,最终导致日志需要循环重用时无法释放而造成系统挂起。例如,数据库服务器有 10 个逻辑日志文件,如果 LTXHWM 设置为 80 。一个事务(transaction )从日志文件 1 (log1 )开始填充,随着该事务的更新 (update) ,当其操作填充到第 8 个日志文件满时,该事务就到达了长事务深水线比例(LTXHWM ),为了防止系统挂起,数据库服务器将回滚该事务。

LTXEHWM(Exclusive

High-Watermark)

Access, Long-Transaction

独享的长事务深水线也是整个逻辑日志空间的一个百分比值。当正在回滚的长事务占用日志空间的百分比到达这个值时,系统会急剧降低对日志文件的填充速度。此时,数据库系统几乎给予正在回滚的长事务以独占使用剩余日志空间的权利,以最大限度地保障长事务回滚能够在日志空间添满前顺利完成,从而使日志释放重用得以实现。例如,数据库服务器有 10 个逻辑日志文件,如果 LTXHWM 设置为 80, LTXEHWM 设置为 90 。一个事务(transaction )从日志文件 1 (log1 )开始填充,随着该事务的更新 (update) ,当其操作填充到第 8 个日志文件满时,该事务就到达了长事务深水线比例(LTXHWM ),为了防止系统挂起,数据库服务器开始回滚该事务,此时日志内容由于该事务回滚和其他事务继续增长,当其操作填充到第 9 个日志文件满时,如果该事务还未回滚完成,则到达独享的长事务深水线比例(LTXEHWM ),这时候数据库系统会暂停其他事务的操作(除 commit 操作外),留下剩余的日志空间,让该事务回滚,以防止日志空间在回滚结束前被占满。它与长事务深水比例的关系可以用下图表示: