技术开发 频道

SQL Server 2005全文检索技术


【IT168 技术文档】

    5.3 磁盘IO

    如果平均磁盘等待队列长度多于磁盘头数量的两倍,则磁盘成为瓶颈。主要的解决方法是创建独立于 SQL Server 数据库文件和日志的全文目录。将日志、数据库文件和全文目录分别放在不同的磁盘上。购买运行速度更快的磁盘和使用 RAID 也能帮助改善索引性能。

Catalog Counter
PhysicalDisk Avg. Disk Queue Length
Avg. Disk Read Queue Length
Avg. Disk Write Queue Length
Avg. Disk sec/Read
Avg. Disk sec/Transfer
Disk Writes/sec

表7:判断磁盘IO瓶颈的主要指标

    5.4 网络IO

    由于上文设计中,很多的采用了基于链接服务器的查询,因此网络IO也可能成为系统的瓶颈。

Catalog Counter
Network Interface Bytes Total/sec
Bytes Received/sec
Bytes Sent/sec
Server Bytes Total/sec
Protocol Protocol_Object\Segments Received/sec
Protocol_Object\Segments Sent/sec
Processor % Interrupt Time

表8:判断网络IO瓶颈的主要指标

    根据全文检索的应用经验,处理上主要可以采取如下办法:

    (1)采用磁盘换网络的方法,将异地数据多个节点间冗余的保存。 

    (2)把当前Session的多个请求打包,一次性的提交到同一远程数据库。 

    (3)配置SQL Job,把长时间挂起或者工作时间没有必要的过大查询的session清理。 

    (4)优化检索语句。 

    (5)尽量精确限制条件,减少反馈的数据量。 

    (6)根据用户需要,使用TOP_<N>_BY_RANK,而不是把所有符合条件的内容全部提取,减少反馈的数据量。 
    
    5.5 其他说明 

    此外,官方文档还提供了如下的建议: 

    (1)使用 ALTER INDEX REORGANIZE 对基表的索引进行碎片整理。 

    (2)使用 ALTER FULLTEXT CATALOG REORGANIZE 重新组织全文目录。请务必在性能测试之前执行此操作,因为它会导致该目录中全文索引的主合并。 

    (3)仅选择较小的列作为全文键列。即使支持 900 字节的列,我们也不建议您使用这么大的键列来创建全文索引。 

    (4)将多个 CONTAINS 谓词合并为一个 CONTAINS 谓词。在 SQL Server 中,您可以在 CONTAINS 查询中指定一个包含若干列的列表。 

    (5)如果只需要全文键或排名的信息,请分别使用 CONTAINSTABLE 或 FREETEXTTABLE,而不要使用 CONTAINS 或 FREETEXT。 

    (6)若要限制结果数并提高性能,请使用 FREETEXTTABLE 和 CONTAINSTABLE 语法的 TOP_N_BY_RANK 选项。如果您不是对可能查询到的所有信息都感兴趣,可使用此选项。 

    (7)检查全文查询计划以确保选择了适当的联接计划。若有必要,可使用一个联接提示或查询提示。如果全文查询中使用了参数,则该参数的第一时间值决定查询计划。可使用 OPTIMIZE FOR 查询提示来强制使用所需值编写查询。这有助于获得确定性查询和更好的性能。

0
相关文章