数据库常用参数

参数名称 参数说明 建议值
BUF_DATA_BUFFER_PAGES 数据库缓存 物理内存50%
SORT_MEM 排序缓存,做统计分析应用时需要调大 默认值
LOG_READ_BUFFER_PAGES 日志读缓存 默认值
LOG_WRITE_BUFFER_PAGES 日志写缓存 默认值
LOG_FLUSH_INTERVAL 日志回刷间隔 3000毫秒
LOADBUFFERLEVEL 启动库时是否加载表和索引的段至buffer FALSE
ENABLE_SPC 执行计划缓存 TRUE
ENABLE_SPC_COMPATIBLE 是否打开SPC兼容性检查 FALSE
COMPATABLE_DBMS
兼容其它数据库的行为:
0-只支持自己
1-尝试兼容ORACLE
2-尝试兼容SQLSERVER
3-尝试兼容DB2
4-尝试兼容所有的数据库
1-oracle:空串''和NULL相同,都为NULL;
非空字符串与NULL做字符串连接时,
返回非空字符串
ENABLE_ORACLE_OPER 是否打开兼容oracle的数字字符串运算规则
从oracle移植时:true
其他建议值为:false
TRANSFORM_NULL_EQUALS
如TRANSFORM_NULL_EQUALS=true,此表达式被转化为ISNULL
否则foo=NULL永远不为真
TRUE
FULL_WIDTH_CHAR_COMPATIBLE SQL语句中全角符号,兼容性TRUE:兼容;FALSE:不兼容 TRUE
ENABLE_FLUSHLOG_AT_COMMIT 是否在事务提交时FLUSH日志,默认提交 FALSE
DISABLE_DMM
功能是访问catalog的时候不加锁,有任何修改元数据的操作
都有可能会导致挂掉
FALSE
TM_CHECKPOINT_INTERVAL 检查点线程运行的时间间隔(毫秒) 1000000
ENABLE_RUNTIME_DIAG 运行时诊断总开关 仅在开关开启时可查看动态视图和转储统计信息 FALSE
MAX_CONNECTIONS 最大连接,最大65535,最小1 500
ENABLE_AUTO_STAT 是否开启自动统计功能 FALSE
TOP_COST_SQL_LIST_LEN 纪录最耗时的sql语句的个数 5
ENABLE_RESULT_CACHE 是否开启result cache功能 FALSE
RESULT_CACHE_ROWS_LIMIT 结果集缓存行数限制 10000
DEBUG_PRINT_SQL
调试选项,打印输入的SQL语句:
0-不打印SQL语句
1-打印会话号和SQL语句到控制台,每行最多打印79个字符
2-以LOG级别打印Session号和SQL语句到控制台,并且输出到日志文件中
3-打印SQL语句到控制台,每行最多打印79个字符
4-以LOG级别打印SQL语句到控制台,并输出到日志文件中
5-打印SQL语句到控制台
0

性能参数

  1. 参数BUF_DATA_BUFFER_PAGES
此参数有数据库系统缓存区,用于装载热点数据、存储脏数据。数据库启动时会立即占用,单位为K,1024000代表8G空间。因为需要申请内存空间,所有设置缓存越大,数据库开启时间越长。
性能测试时建议设置为:可用内存的%90左右,而且系统内存没有其他应用系统和数据库占用的情况下。
项目实施时建议设置为:可用内存的60%~~%70左右,而且系统内存没有其他应用系统和数据库占用的情况下。
  1. 参数SORT_MEM
排序内存,对于SQL语句中order by、group by、join等操作时会有影响。如果数据量较大,且需要做排序或分组操作,将sort_mem调大能提高性能。
  1. 参数LOG_READ_BUFFER_PAGES
日志读取缓存,一般数据库日志不会发生日志读,当数据库系统中有大量脏数据没有写入数据文件中时,或者存在大量未提交事务时,如果出现数据库故障,重启数据库后,数据库会读取日志信息对数据库已提交事务进行重做,未提交事务进行回滚操作。
当我们做了大量数据操作后数据库宕机,启动时间会很长,可以将此参数适当调大,提高日志读取性能,以提高故障后数据回滚性能。
  1. 参数LOG_WRITE_BUFFER_PAGES
物理日志写入性能,数据库每做一个更新操作,都会先写日志缓存,日志缓存中的数据有两种情况会被回刷到日志文件中:
(1) 日志缓存被写满,数据库会启动日志缓存回刷操作;
(2) 日志缓存未满,但回刷间隔超过3秒(LOG_FLUSH_INTERVAL参数控制),数据库会启动日志回刷操作;
当数据库更新并发量大时,为了避免日志频繁的回刷造成IO冲突,可适当增大LOG_WRITE_BUFFER_PAGES大小,提高回刷线程时间间隔LOG_FLUSH_INTERVAL参数值。
  1. 参数LOG_FLUSH_INTERVAL
日志回写线程运行的时间间隔(毫秒),默认3秒,为了避免日志频繁回刷,建议适当增大回刷间隔时间。
  1. 参数ENABLE_FLUSHLOG_AT_COMMIT
是否在事务提交时FLUSH日志,默认提交。
  1. 参数LOADBUFFERLEVEL
启动库时是否加载表和索引的段至buffer,
0 不加载任何段至buffer ,
1 只加载keep表和索引段至buffer ,
2 加载所有表和索引段至buffer
  1. 参数ENABLE_SPC
是否打开执行计划缓存功能,true表示打开,false表示关闭。默认开启,开启spc在特定情况下会导致结果错误的bug,如遇到数据结果不正确等问题,需要关闭此参数。
  1. 参数ENABLE_SPC_COMPATIBLE
是否打开SPC兼容性检查,true表示打开,false表示关闭。性能测试是建议默认关闭。
  1. 参数DISABLE_DMM
此参数属于PK参数,上线系统中严禁开启,此参数用户性能测试是会有较大性能提升。功能是访问catalog的时候不加锁、有任何修改元数据的操作(create/alter/drop)都有可能会导致数据库挂掉。
  1. 参数ENABLE_SCAN_LOCK_NO_WAIT
是否在表只读扫描时,加锁不等待,true加锁不等待,false加锁等待。属于PK参数,不建议开启,开启后会出现数据查询不准的情况。
PK测试时,开启的目的是不想因为更新加锁导致查询被堵塞。但开启后会导致已经被加锁的数据行无法查询到,可能会导致结果不正确,特别是update操作较多时,不建议开启。
  1. 参数ENABLE_UNBLOCK_INX_SCAN
  2. 参数ENABLE_UNBLOCK_SCAN
  3. 参数ENABLE_REDUCEDUPORS
含OR谓词条件范式优化,这是对where条件中有多个or操作性能低的问题进行了自动优化。

功能参数

  1. 参数COMPATABLE_DBMS
兼容其它数据库的参数:
0-只支持自己
1-尝试兼容ORACLE
2-尝试兼容SQLSERVER
3-尝试兼容DB2
4-尝试兼容所有的数据库
目前神通数据库的兼容主要以oracle为主,而且随着神通基本功能越来越靠近oracle,兼容参数控制的差异越来越少:
兼容ORACLE差异:
空串''和NULL相同,都为NULL;
非空字符串与NULL做字符串连接时,返回非空字符串;
  1. 参数ENABLE_ORACLE_OPER
是否打开兼容oracle的数字字符串运算规则,主要对+号进行控制,oracle中是做数值运算,神通默认做字符串连接运算,比如:
SQL> set ENABLE_ORACLE_OPER = false;
SET
SQL> select '2' + '1';
 COLUMN
----------
 21
(1 row)

SQL> set ENABLE_ORACLE_OPER = true;
SET
SQL> select '2' + '1';
 COLUMN
----------
        3
(1 row)
  1. 参数TRANSFORM_NULL_EQUALS
如参数值true,此表达式被转化为IS NULL,否则foo=NULL永远不为真,比如开启后,这两条sql等价:
Select * from test where a is null;

Select * from test where a = null;
  1. 参数FULL_WIDTH_CHAR_COMPATIBLE
SQL语句中全角符号,兼容性TRUE:兼容;FALSE:不兼容。比如以下这条sql就不行开启参数后才能正确执行:
set FULL_WIDTH_CHAR_COMPATIBLE = false;
select 1 from dual where (1=1); --括弧是全角,执行错误
set FULL_WIDTH_CHAR_COMPATIBLE = true;
select 1 from dual where (1=1); --括弧是全角,执行
注意:isql工具自带了全角支持能力,所以在isql工具中,即使FULL_WIDTH_CHAR_COMPATIBLE为false,只是上面的语句也是可以的。
  1. 参数TM_CHECKPOINT_INTERVAL
检查点线程运行的时间间隔(毫秒),目的是把只写了日志,但没写数据文件的脏数据写入到数据文件中。
当数据库在做大检查点时,数据库的业务操作会受到影响。检查点间隔越大,检查点所需时间越长。会导致测试TPCC测试时,性能曲线不会出现大幅下降的现象。
  1. 参数ENABLE_RUNTIME_DIAG
运行时诊断总开关,仅在开关开启时可查看动态视图和转储统计信息。此参数开启后能对数据库的性能和运行状态进行更好的查看。但会有一定性能损耗,在做性能PK测试时,必须关闭。
  1. 参数MAX_CONNECTIONS
逻辑上控制数据库的最大连接,最大65535,这个参数和数据库的license有很大关系:MAX_CONNECTIONS会设置成它与license最大连接许可数的最小值,并且如果打开ENABLE_AUTO_STAT或ENABLE_MVIEW或ENABLE_AUD_DUMP_FREE,都会增加一个后台会话线程,使得MAX_CONNECTIONS值加1。
  1. 参数ENABLE_AUTO_STAT
是否开启自动统计功能,参数开启后会自动对数据库中的对象收集统计信息。但这个参数不稳定,容易造成数据库故障,建议一般不开启。而是采用设置定期任务的方式手工收集统计信息:
(1) 收集整库统计信息:exec dbms_utility.ANALYZE_DATABASE('COMPUTE');
(2) 收集模式统计信息:exec dbms_utility.ANALYZE_SCHEMA ('SYSDBA','COMPUTE');
(3) 收集表统计信息:
exec dbms_utility.ANALYZE_INDEX('STATE'); --收集索引信息
exec dbms_utility.ANALYZE_INDEX('CLEAN'); --索引碎片整理
  1. 参数TOP_COST_SQL_LIST_LEN
记录最耗时的sql语句的个数,默认为0。当这个参数为非0时,代表记录几条执行时间最长的SQL,记录的sql在系统V_SYS_TOP_COST_SQLS视图中:
SQL> set TOP_COST_SQL_LIST_LEN = 10;

SQL>  select * from V_SYS_TOP_COST_SQLS;
                SQL                | TIME(s)
-----------------------------------+----------
 set TOP_COST_SQL_LIST_LEN = 10    | 0.000205
 select * from V_SYS_TOP_COST_SQLS |  0.00037
 select * from V_SYS_TOP_COST_SQLS | 0.000451
(3 rows)
  1. 参数ENABLE_RESULT_CACHE
是否开启result cache功能,结果集缓存的的含义就是将select出来的结果进行保存,后台接收到相同的select语句后,不再重新执行,而是从现有的结果集缓存中取数据。
此功能在只有查询的业务系统中可以使用,在有大量更新操作的系统中不要开启,和结果集相关参数:
ENABLE_RESULT_CACHE_PREFETCH
ENABLE_SUBPLAN_RESULT_HASH
RESULT_CACHE_LEVEL
RESULT_CACHE_MAX_RESULT
RESULT_CACHE_MAX_SIZE
RESULT_CACHE_ROWS_LIMIT
  1. 参数DEBUG_PRINT_SQL
此参数控制elog文件中打印的消息级别,不同级别打印方式不同:
0-不打印SQL语句
1-打印会话号和SQL语句到控制台,每行最多打印79个字符
2-以LOG级别打印Session号和SQL语句到控制台,并且输出到日志文件中
3-打印SQL语句到控制台,每行最多打印79个字符
4-以LOG级别打印SQL语句到控制台,并输出到日志文件中
5-打印SQL语句到控制台
备注:此参数修改配置文件后必须重启库才能生效;session级别也可以设置,但只对当前session有效。
  1. 参数ENABLE_MVIEW
是否启用物化视图,物化视图的意思将视图的查询结果进行保存,并可以实现基本同步变化,适用于大的统计分析视图,
但对基表数据的更新速度有较大降低影响,所以除了个别视图必须创建物化外,比建议大量创建物化视图。
物化视图相关参数:
ENABLE_MVIEW_REWRITE:是否开启物化视图重写功能,建议永不开启。
ENABLE_MVIEW_SEMANTIC_REWRITE:是否开启利用物化视图从语义上改写查询的功能,建议永不开启。
QUERY_REWRITE_MVIEW_INTEGRITY:是否保证查询结果与基表的一致性,必须开启。
备注:此参数修改配置文件后必须重启库才能生效。
  1. 参数ENABLE_FULLTEXT
是否开启全文检索功能,全文索引默认是关闭的,如果需要试用,必须开启为true。
备注:此参数修改配置文件后必须重启库才能生效。