MemoryLock

TimesTen 在有些平台上[Solaris、Linux、HP-UX 11、Tru64]有MemoryLock 这个参数可以配置,其作用根据参数设置的值不同而稍有差异,其主要的作用就是将TimesTen所占用的内存 “Lock” 在物理内存里,而不会由于物理内存的不够,被操作系统给调换出去,所以该值对性能有一定的影响,尤其当物理内存比较紧张时。其具体的值有如下四种:

0—不锁内存(缺省值)

1—当首次连接DataStore,加载数据时,尝试锁住需要的内存,但如果不能成功锁住,就不锁内存而继续下去,即按缺省模式进行。如果成功锁住,也将在数据加载成功后释放该锁。

2—基本同 1 ,但当不能成功锁住内存时,会失败,而不是放弃锁继续下去。

3—基本同 1 ,但如果成功锁住后,不是数据加载完成就释放该锁,而是一直到数据卸载后才释放该锁。

4—最严格的一种,加载数据时,如果不能成功锁住,就失败退出。如果锁住,就一直持续到数据卸载后。

下面以Linux平台为例,说明如何设置该参数。

当以非root用户安装TimesTen后,如果在配置文件中设置好MemoryLock,如下(如果以root用户,可能不需要去修改相应的控制文件):

[stock]
Driver=/home/stock/TimesTen/tt703/lib/libtten.so
DataStore=/home/stock/datastore/stock
DatabaseCharacterSet=US7ASCII
PermSize=100
TempSize=10
LogBuffSize=65536
LogFileSize=64
MemoryLock=4

登录时,可能会报如下错误:

[stock@west-mountain ~]$ ttisql stock

Copyright (c) 1996-2007, Oracle.  All rights reserved.
Type ? or “help” for help, type “exit” to quit ttIsql.
All commands must end with a semicolon character.

connect “DSN=stock”;
  712: Unable to lock data store memory segment, error 12
  703: Subdaemon connect to data store failed with error TT712
The command failed.
Done.

此时,需要去修改系统的一个控制文件/etc/security/limits.conf,具体的值根据系统的当前配置去设置,比如下例中将MemLock的大小设为500M。

 ……

*        hard       memlock      502664   
*        soft       memlock      502664   

退出重新登录,再次连接TimesTen:

[stock@west-mountain ~]$ ttisql stock

Copyright (c) 1996-2007, Oracle.  All rights reserved.
Type ? or “help” for help, type “exit” to quit ttIsql.
All commands must end with a semicolon character.

connect “DSN=stock”;
Connection successful: DSN=stock;UID=stock;DataStore=/home/stock/datastore/stock;
DatabaseCharacterSet=US7ASCII;ConnectionCharacterSet=US7ASCII;
LogFileSize=64;DRIVER=/home/stock/TimesTen/tt703/lib/libtten.so;
MemoryLock=4;LogBuffSize=65536;PermSize=100;TempSize=10;
TypeMode=0;
(Default setting AutoCommit=1)
Command>

留言