sql server全文索引的性能问题

Sql Server 全文索引的性能一直都不是太好,今天听同事分享,发现了一个技巧,回去试了下,发现确实能明显的提升全文索引的性能,一般都能提升 2倍+

 

原 SQL 语句:

select * from Table1 where Contants(*,'test')
  

优化后的 SQL 语句:

view sourceprint?select * from Table1 where Contains((Content,Title),'test')

 

两条 SQL 的不同之处,就是在 Contanis 后面的列名是否指定了,经过测试,明确指定 全文索引的列,确实能较大的提升 Sql Server 全文索引的性能

若要最大程度地使用所有处理器或内核,请将 sp_configure ‘max full-text crawl ranges' 设置为系统的 CPU 数。有关该配置选项的信息,请参阅 max full-text crawl range 选项。

请确保基表具有聚集索引。对聚集索引的第一列使用整数数据类型。避免在聚集索引的第一列使用 GUID。对聚集索引执行多范围填充可以产生最高的填充速度。我们建议充当全文键的列采用整数数据类型。

使用 UPDATE STATISTICS 语句更新基表的统计信息。更重要的是,更新聚集索引或全文键的统计信息以进行完全填充。这有助于多范围填充在表上生成良好的分区。

如果要提高增量填充的性能,请对 timestamp 列生成辅助索引。

在大型多 CPU 计算机上执行完全填充之前,建议您通过设置 max server memory 值来暂时限制缓冲池的大小,从而留出足够的内存供 fdhost.exe 进程及操作系统使用。有关详细信息,请参阅本主题后面的“估计筛选器后台程序宿主进程 (fdhost.exe) 的内存需求量”。

解决完全填充性能问题
--------------------------------------------------------------------------------

若要诊断性能问题,请查看全文爬网日志。有关爬网日志的信息,请参阅全文填充(爬网)中错误的故障排除。

如果对完全填充的性能不满意,则建议按顺序执行以下故障排除步骤。

物理内存使用量
在全文填充期间,fdhost.exe 或 sqlservr.exe 的内存有可能不足。如果全文爬网日志显示 fdhost.exe 正在反复重新启动,或系统返回错误代码 8007008,则意味着这些进程中的某一个进程内存不足。如果 fdhost.exe 在生成转储(特别是在大型多 CPU 计算机上),则该进程的内存可能不足。

 注意 
若要获得有关全文爬网所用的内存缓冲区的信息,请参阅 sys.dm_fts_memory_buffers (Transact-SQL)。
 

可能的原因如下:

如果在完全填充期间可用的物理内存数量是零,则 SQL Server 缓冲池可能正占用系统的大部分物理内存。

sqlservr.exe 进程试图侵占缓冲池的所有可用内存(最大为配置的最大服务器内存)。如果分配的“最大服务器内存”过大,fdhost.exe 进程可能会面临内存不足的状况及共享内存分配失败。

 注意 
在多 CPU 计算机(如 64 路 IA64 计算机)上进行全文填充期间,fdhost.exe 或 sqlservr.exe 之间可能出现缓冲池内存争用。由此造成的共享内存不足会导致批次重试、内存抖动并让 fdhost.exe 进程进行转储。
 

可以通过适当设置 SQL Server 缓冲池的“最大服务器内存”值来解决此问题。有关详细信息,请参阅本主题后面的“估计筛选器后台程序宿主进程 (fdhost.exe) 的内存需求量”。减小用于全文索引的批次大小可能也会有用。

分页问题

页文件大小不足也会导致 fdhost.exe 或 sqlservr.exe 的内存不足,例如在具有增长受限的较小页文件的系统上。

如果爬网日志未指示存在任何与内存相关的故障,则很可能是因为过度分页导致性能下降。

估计筛选器后台程序宿主进程 (fdhost.exe) 的内存需求量
进行填充时 fdhost.exe 进程需要的内存量主要取决于它使用的全文爬网范围数、入站共享内存 (ISM) 的大小以及最大 ISM 实例数。

可以使用下面的公式粗略估算筛选器后台程序宿主占用的内存量(以字节为单位):

number_of_crawl_ranges * ism_size * max_outstanding_isms * 2

上面公式中的变量的默认值如下所示:

变量
 默认值
 
number_of_crawl_ranges
 CPU 的数目
 
ism_size
 x86 计算机为 1 MB

x64 计算机为 4 MB、8 MB 或 16MB,具体取决于物理内存总量
 
max_outstanding_isms
 x86 计算机为 25

x64 计算机为 5
 

下表列出了有关如何估算 fdhost.exe 的内存需求量的准则。此表中的公式使用以下值:

F,它是 fdhost.exe 所需内存的估计值 (MB)。

T,它是系统中可用物理内存的总量 (MB)。

M,它是最佳“最大服务器内存”设置。

 重要提示 
有关公式的基本信息,请参阅下面的 1、2 和 3。
 

平台
 估计 fdhost.exe 的内存需求量 (MB) - F1
 用于计算最大服务器内存的公式 - M2
 
禁用 AWE 的 x86
 F = Number of crawl ranges * 50
 M = minimum ( T , 2000)–F– 500
 
启用 AWE 的 x86
 F = Number of crawl ranges * 50
 M = T – F – 500
 
x64 或 IA643
 F = Number of crawl ranges * 10 * 8
 M = T – F – 500
 

1 如果正在进行多个完全填充,则分别计算每个完全填充的 fdhost.exe 内存需求量,如 F1、F2 等等。然后按照 T– sigma(Fi) 计算得到 M。

2 500 MB 是系统中其他进程所需内存的估计值。如果系统正在执行其他工作,请相应地增加此值。

3 .ism_size 对于 x64 平台假定为 8 MB。

示例:估计 fdhost.exe 的内存需求量

此示例针对具有 8GM RAM 和 4 个双核处理器的 AMD64 计算机。首先计算出 fdhost.exe 所需内存的估计值 F。爬网范围数是 8。

F = 8*10*8=640

然后计算出“最大服务器内存”的最佳值 M。该系统的可用物理内存总量 (MB) T 是 8192。

M = 8192-640-500=7052

示例:设置最大服务器内存

此示例使用 sp_configure 和 RECONFIGURETransact-SQL 语句将“最大服务器内存”设置为上一个示例中计算得到的 M 值,即 7052。

复制
 USE master;
GO
EXEC sp_configure 'max server memory', 7052;
GO
RECONFIGURE;
GO

设置最大服务器内存配置选项

服务器内存选项

如何查看或更改服务器属性(SQL Server 配置管理器)

如何设置固定内存量 (SQL Server Management Studio)

可以降低 CPU 占用率的因素
我们希望当平均 CPU 占用率低于大约 30% 时完全填充的性能不是最佳的。本节讨论影响 CPU 占用率的一些因素。

长时间等待页面

若要了解等待页面的时间是否太长,请执行下面的 Transact-SQL 语句:

复制
 Execute SELECT TOP 10 * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC;

下表描述了这里需要了解的等待类型。

等待类型
 说明
 可能的解决方法
 
PAGEIO_LATCH_SH(_EX 或 _UP)
 这可能表明存在 IO 瓶颈,在此情况下通常还会发现平均磁盘队列长度很高。
 将全文索引移动到其他磁盘上的其他文件组可能有助于减少 IO 瓶颈。
 
PAGELATCH_EX(或 _UP)
 这可能表明多个正在试图写入相同数据库教程文件的线程之间存在大量争用现象。
 将文件添加到全文索引所在的文件组可能有助于减轻此类争用。
 

有关详细信息,请参阅 sys.dm_os_wait_stats (Transact-SQL)。

扫描基表的效率很低

完全填充将扫描基表,以生成批次。在下列情况下,这样的表扫描可能很低效:

如果基表有很高百分比的行外列正在建立全文索引,则扫描基表以生成批次可能成为瓶颈。在这种情况下,使用 varchar(max) 或 nvarchar(max) 对较小的数据进行行内移动可能有用。

如果基表非常零碎,扫描可能很低效。有关计算行外数据和索引碎片的信息,请参阅 sys.dm_db_partition_stats (Transact-SQL) 和 sys.dm_db_index_physical_stats (Transact-SQL)。

若要减少碎片,可以重新组织或重新生成聚集索引。有关详细信息,请参阅重新组织和重新生成索引。

 

时间: 2024-09-13 15:17:23

sql server全文索引的性能问题的相关文章

sql server全文索引,分词

问题描述 sql server全文索引,分词 sql全文索引,怎么进行整个数据库的搜索,中文进行分词,可以自己进行分词吗,如何分词,求大神赐教,谢谢! 解决方案 用HubbleDotNet http://www.cnblogs.com/ChengDong/archive/2012/09/20/2695413.html 解决方案二: 在一个产品介绍网站中查询产品时,由于产品的介绍性文字可能会很长,如果使用对产品介绍字段使用like进行模糊查询,性能肯定会是问题.那么如何解决这个问题呢?第一个想法就

SQL Server 7.0性能和Benchmark得分

server|性能 疑惑SQL Server 7.0比SQL Server 6.5或比其它企业级数据库系统强在何处?请阅读SQL Server 7.0的工业标准Benchmark得分和创记录的性能指标. </p><p> 一.工业标准 评价硬件和软件的理想方法,是组织机构比较不同的系统,在一定的工作负载下检测其性能,评估发展潜力和估算费用.当然,一般不会有组织机构有足够的时间和资源进行所有的测试,所以他们采用经过精心设计.可信度高的工业标准基准(Benchmark)测试. Micro

SQL Server 2008的性能和可扩展性

1.导言 现今的公司需要易访问的和可用性好的商业数据,以便他们可以在全球市场中获得一席之地.与易访 问数据的这个需求相呼应的,关系数据库和分析数据库在规模方面继续发展,内嵌数据库和许多产品一起 出现,并且许多公司将服务器合并来减轻管理工作.当公司的数据环境在规模和复杂度方面持续发展的同 时他们必须维护最佳的性能. 这篇白皮书描述了SQL Server 2008的性能和扩展能力,并解释了你可以怎样使用这些功能来: · 使用可用于数据库引擎.分析服务.报表服务和集成服务的工具和功能来优化任何规模的数

教你如何提高SQL Server 2000的性能?

以往的服务器,由于内存价格过高,一般配的内存不是很多,超过4G的当然就不多了现在的服务器,配置超过4G就很多,在配作SQL 数据库服务器后,很多的人只选默认的设置,虽然可以正常使用,可是却把大量的内存浪费了(SQL服务使用的内存不会超过1.8G),系统的性能也不能因为的大内存而提升,这是很可惜的. 下面介绍一种方法教你如何提高SQL Server 2000 的性能. 配置的过程如下.(如果服务器的内存少于4G,不用配置) 1.打开系统中的大内存支持(windows) 要启用 Windows 20

关于Sql server 全文索引 containstable使用碰到的问题

问题描述 关于Sql server 全文索引 containstable使用碰到的问题 select * from containstable(t_ck,f_keywords,'教育') 咨询大家一个问题.这条命令我在查询分析器上执行查询结果得到上万的数据,也无任何问题. 但是在PHP上或ASP上执行时就会出现问题. 如:多步 OLE DB 操作产生错误.如果可能,请检查每个 OLE DB 状态值.没有工作被完成. 还有的是循环到第五个记录就提示BOF还是EOF等于真 就没记录了. ASP和PH

设置Microsoft SQL Server全文索引服务

在Microsoft SQL Server 7.0 中提供了全文索引服务(Full-Text Search Service),在 查询性能上,对varchar,char,text类型的字段的匹配查询比用Sql 语句使用Like操作符及匹 配符的速度快10倍以上:在查询匹配上,提供了模糊匹配的高级搜索性能并能够返回查询的命 中率. Full Text Search Service包含在Sql Server 7.0中,在Sql Server 7 Destop版中 不起作用.安装Sql server时

SQL Server 2005 的性能优化工具

由于现在项目的数据量非常的庞大,日均新增数据几乎达到5位数,数据库的性能就成了整个项目的关键,如何才能做到最优化?不但从数据库逻辑的设计还是物理设计都应该仔细的规划和考虑. 物理上的优化有最笨的方法就是提高数据库的性能,再高个档次就是合理组织数据库文件和Temp数据库存放的位置了,逻辑上优化无非就是有良好的数据库设计数据量大的时候三范式就有一点站不住了,适当的数据冗余也是提高数据库检索效率的有效手段,但这些都需要经验丰富的家伙才能游刃有余,好在SQL2005提供了数据库优化工具使得优化这个工作在

SQL Server 2005新性能简述

因为SQL Server 2000缺乏某些高端性能,所以就被认为是90磅重的小不点儿.其实,没有哪个强者能够完成每一项壮举,也没有哪家公司需要每一项高端特性.多年来,许多大大小小的企业一直都在使用SQL Server来运行其公司业务.而经过全面修改的微软SQL Server 2005又带来了许多强大的新功能和一批新工具,SQL Server正在变得强大起来. 不可否认,说到真正的企业特性,尤其是在高可用性和灾难恢复方面,SQL Server总是比不上Oracle数据库.Oracle凭借联机重建索

怎样获得SQL Server的优化性能?

server|性能|优化 为了最大程度优化SQL Server的性能, 首先您必须确定几个方面.当这几个方面得到优化时,可以最大程度的提高整个系统性能.然后您可以针对这几个方面进行分析.否则,您可能事倍功半.经验证明,SQL Server的性能提高主要取决于逻辑数据库设计,索引设计和查询设计. 反之,最大的性能问题也往往源于这几个方面的设计缺陷. 如果数据库性能是一个关注焦点,您应该首先着眼这几个方面,因为在此的很小的投资可以带来很大的利益.而其它系统级的性能问题, 例如内存.高速缓存. 硬件等