ACI性能优化

数据查询优化

Fetchsize设置

ACI支持设置每次从数据库服务端获取的行数,ACI的参数配置文件中参数为fetch_size,可通过设置语句句柄:ACIStmt的属性:ACI_ATTR_FETCH_SIZE进行设置,比如:

sb4 fetchsize = 1000;
err = ACIAttrSet ((void *) stmt, ACI_HTYPE_STMT, (void *) fetchsize,
    sizeof(fetchsize), ACI_ATTR_ FETCH_SIZE, (ACIError *) err);

Fetchsize默认是每次获取16条,对于一次获取成千上万的查询结果集而言,可能需要与数据库服务器端交互多次,性能会有一定损耗,适当增加fetchsize,能提高查询效率。Fetchsize的设置对Insert、Update等操作无效。

数组定义方式

常规的查询是单条数据的定义,应用从ACI缓存中一条一条获取数据,想提高效率,可以为查询的每个列申请一个数组,通过数值定义接口进行调用,详细参考<数组/批量定义>章节!

数据插入优化

ACI支持多种方式来提高数据的插入效率,有以下几种方式:

  • 参数优化
  • 拼接Insert values(),()…语法
  • 用匿名块
  • 采用批量绑定
  • 采用大容量导入
  • 采用直接路径加载

参数优化

ACI配置参数中的部分参数对数据插入效率有影响,比如batch_buffer、execute_batch_size。

拼接Insert values(),()…语法

神通数据库可以支持在一个Insert语句中,带有多行数据库。应用程序也可以拼接此类sql进行插入,比如:

Insert into test values(1,’a’),(2,’b’),(3,’c’);

Insert values(),()语法是有长度限制的,建议一次插入100条左右为合适。

用匿名块

可以将多条sql语句,放到一个匿名块中去支持,比如:

begin
Insert into test values(1,’a’);
Insert into test values(2,’b’);
Insert into test values(3,’b’);
… …
end;

采用数组绑定

绑定时,通过数组方式,可以提高效率,详细参阅《绑定与定义》—>《数值绑定》章节.

采用大容量导入

大容量导入可以3~5倍提升数据库入库效率,但需要形成批量。建议在单表每秒有100条以上数据入库时使用,详细使用参阅《大容量导入》章节。

采用直接路径加载

直接路径加载(与大容量导入类似)可以3~5倍提升数据库入库效率,但需要形成批量。建议在单表每秒有100条以上数据入库时使用,详细使用参阅《直接路径加载》章节。

直接路径加载也可以直接加载有格式的数据文件,比如CSV数据文件。