InterBase 6.5的新特性
作者:Bill Todd(Team B成员)
译者:TR@SOE
原文URI:http://www.dbginc.com/tech_pprs/IB65New.html
1. 改良的缓存管理
2. 指定处理器
3. 取消语句的执行
4. 元数据的安全性
5. 64位文件I/O
6. ROWS语句
7. 以XML格式导出数据
8. 其它改进
改良的缓存管理
以前版本的IB中,如果缓存大小超过10,000页,性能将会降低。该问题已经得到解决。缓存管理器也进行了修改以减少处理大缓存时的额外开销。例如,65,000页缓存所需要的总内存量几乎减少了七兆。分配大的缓存空间的速度也得到提高,缓存I/O的效率也得到提高。在重负载的情况下,线程需要等待共享页面加锁而带来的问题也消除了。增加缓存大小并不能保证性能的提升,但是绝对没有坏处。在用户数量大和其它一些场合时,增加缓存大小会有帮助。
指定处理器
在运行WINDOWS的多处理器系统中,IB超级服务器版本的性能可能会降低,因为WINDOWS总是不断地将IB进程从一个处理器切换到另一个处理器。WINDOWS版本的IB 6.5可以在IBCONFIG文件中包含如下的指令:CPU_AFFINITY 1从而将IB进程与第一个处理器连接。通过改变数值,你可以将IB与任何一个处理器相连接,方法是修改对应的处理器的位。例如,1代表第一个处理器,2代表第二个,4代表第三个。这一语法允许你将IB分配到多个处理器上(IB 7将支持SMP)。例如,将IB分配到第二和第三个处理器时,可以这么写:CPU_AFFINITY 6。
取消语句的执行
使用IB的API函数isc_dsql_free_statement可以取消任何语句的执行。如下所示:
procedure TfrmMain.StopQuery;
var
StatementHandle: TISC_STMT_HANDLE;
ISC_Result: ISC_STATUS;
begin
StatementHandle := dmMain.ibqTest.StmtHandle;
ISC_Result := isc_dsql_free_statement(StatusVector, @StatementHandle, DSQL_CANCEL);
if ISC_Result > 0 then IBDatabaseError;
end;
在运行语句的线程里不可以取消该语句的执行。因此,如果你希望使用这一特性,应该在一个后台线程中运行你的SQL语句。该API调用不能与dbExpress或BDE合用,因为它们无法存取语句的句柄,而该句柄是函数调用的第二个参数。InterBase Express中提供该属性,上面的代码来