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中提供该属性,上面的代码来源于一个使用IBQuery的应用,它在一个后台线程中执行SQL语句。
你取消一个语句的执行时,IB的表现如同该语句执行时出错。被取消的语句所做的一切更改都被取消,但是事务处理还将继续。你可以决定是要确认还是回滚事务。如果在ISQL中你执行了一个语句而又想取消,只要按Ctrl+C即可。
元数据的安全性
在以前版本的IB中,你可以对系统表格授权或取消授权,但是这些权限在备份与恢复后不被保留。IB 6.5就不同了。你创建的任意数据库中所有系统表格给予公众的缺省权限是SELECT。它允许用户看到系统表格,但是他们不能直接修改系统表格。IB 6.5有三个脚本,让你轻松地修改系统表格的权限。readmeta.sql脚本将系统表格给予SELECT权限。writemeta.sql脚本将系统表格给予所有的权限。而blindmeta.sql脚本收回所有给予的权限。
限制系统表格的存取绝不是限制用户使用DDL语句修改数据库中其它表格的能力。IB引擎做了改进,即使用户没有权限直接操作系统表格,引擎也可以代替用户对系统表格进行相应的修改。
如果你用blindmeta.sql脚本或者在早期的IB中使用REVOKE语句收回了系统表格存取的所有权限,你将根本无法存取数据库。IB 6.5第一次打开IB 6 ODS 10的数据库时,ODS版本将自动升为10.1,而公共用户对系统表格的权限将设置为SELECT。IB 6.5也能打开ODS 9的数据库,但是不会对它们进行任何修改。
IB 6.0可以打开一个ODS 10.1的数据库,只要公共用户对系统表格的权限至少为SELECT以上。不过,如果数据库由IB 6.0服务器备份和恢复,所有对系统表格的存取限制都将丢失。
64位文件
IB现在支持Windows/Linux/Solaris平台上的64位文件I/O操作。数据库的大小将只受限于硬盘的大小。只有2.4核心的Linux提供64位文件I/O。如果是以前版本的Linux,IB 6.5将自动使用32位文件I/O,其表现如IB 6.0一样。
ROWS语句[1]
ROWS语句是IB SQL的扩展,它允许你控制SELECT/UPDATE/DELETE语句所影响的范围。ROWS语句的语法如下:
ROWS <lower_value> [TO <upper_value>] [BY <step_value>] [PERCENT] [WITH TIES]
ROWS语句在SQL语句中的位置如下:
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<order_by_clause>
<rows_clause>
要理解ROWS语句到底能做什么的最好方法是看看例子。本文中所有的例子都使用IB自带的Employee数据库。第一个例子中,ROWS语句与ORDER BY连用,选出折扣最高的五个记录:
SELECT * FROM SALES
ORDER BY DISCOUNT DESC
[1] [2] [3] 下一页 没有相关教程
|