Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行 » 提高查询性能

 

表大小和页面大小

您为数据库选择的页面大小可影响数据库的性能。通常,如果页面大小较小,可能有益于那些从任意位置检索较少行的操作。相比之下,较大的页往往有益于那些按顺序执行表扫描的查询 ― 尤其是当行在页上的存储顺序与通过索引对行进行检索的顺序相同时。在这种情况下,如果将一页读入内存以获取一行的值,则可能会产生副作用:会将下几行的内容装入内存。通常,磁盘的物理设计会使磁盘检索较少的大块比检索较多的小块更有效率。

对于每个表,SQL Anywhere 将创建反映各表页在整个 dbspace 文件中位置的位图。数据库服务器使用位图一次性读取表页的大块 (64 KB),而不是单个页面。此功能(又称作组读取)降低了对磁盘进行的 I/O 操作总数,同时提高了性能。用户不能控制数据库服务器有关创建或使用位图的标准。

如果选择较大的页面大小(例如 8 KB),则最好增加高速缓存的大小,因为同样大小的高速缓存所能容纳的大页较少。例如,1 MB 的内存可以保存 512 个大小均为 2 KB 的页,但只能保存 128 个大小均为 8 KB 的页。应根据数据库以及应用程序执行的查询的性质,确定页面大小与高速缓存大小的适当页比率。您可以用各种高速缓存大小进行性能测试。如果高速缓存不能保存足够的页,当数据库服务器开始与磁盘交换常用页时,性能就会受到影响。当在 Windows Mobile 设备上使用 SQL Anywhere 时,这一点很重要,因为较大的页面大小可能有更多的内部碎片。

SQL Anywhere 会尽可能地将页填满。只有当新对象太大而无法装入现有页上的空白空间时,空白空间才会累积。因此,调整页面大小可能不会对数据库的总体大小造成很大的影响。

页面大小也会影响索引。每一次索引查寻都需要对每个索引级别执行一次页读取并对表页执行一次页读取,而一个查询就可能需要数千次索引查寻。页面大小可能会大大地影响条目数,条目数又将影响表所需的索引深度。索引条目数较大,通常意味着需要的索引级别较少,这将大大地提高搜索性能。对于所拥有的表中含有大量行的大型数据库而言,使用大小为 8 KB 的页面可保证实现最佳性能。强烈建议您在选择页面大小时对性能(以及其它行为方面)进行测试。然后,选择可提供满意结果的最小的页面大小。如果在同一服务器上启动多个数据库,选择正确且合理的页面大小就很重要。

另请参见