怪现象:InterBase(50分)

  • 主题发起人 主题发起人 黑天
  • 开始时间 开始时间

黑天

Unregistered / Unconfirmed
GUEST, unregistred user!
今天转了一个数据库,是从 ACCESS97->IB6,表数据容量大概只有 4000 左右,
却发现:在转换过程中,ibserver 消耗内存级级上升,这么一个简单的表,居
然从 ~100M(计算前) ->> 200M 之多,而一个物理文件才 3M 左右!而且看出来
ibserver 运算相当吃力,在任务管理器中可以看到它长时间占据 CPU,100% 的
满负荷,真是怪了========> 有谁也遇到过这种情况吗?

说明:程序操作很简单,全部都是 SQL-INSERT 插入,没有其它任何操作。程序
本身不存在内存方便的分配错误或不当。请指教....................
 
我倒是感觉按照默认的设置,Interbase比access慢一些
 
估计你没有及时提义事务造成的。
每500条做一次commit试试。
 
to yh:
我自己封的 exec_sql,直接事务提交,代码:

ISC_STATUS IBSQL::exec_sql(char* sql_express)
{
/* Prepare the statement. */
trans = ISC_NULL;
stmt = ISC_NULL;

/* Execute the statement */
ISC_STATUS res_code = isc_dsql_allocate_statement(status, &db, &stmt);
if (res_code == 0) res_code = isc_start_transaction(status, &trans, 1, &db, 0, NULL);
if (res_code == 0) res_code = isc_dsql_prepare(status, &trans, &stmt, 0, sql_express, 1, NULL);
if (res_code == 0) res_code = isc_dsql_execute(status, &trans, &stmt, 1, NULL);
if (res_code == 0) res_code = isc_commit_transaction(status, &trans);
if (res_code == 0) res_code = isc_dsql_free_statement(status, &stmt, DSQL_drop);

return res_code;
}

因此可能不是事务提交的问题。
 
一切OK!
谢谢大家。是事务问题。看样子事务提交有一个最佳值,频繁的提交只会增加
机器负担。搞定!
 
后退
顶部