Moh*_* Ha 10 performance sql-server full-text-search sql-server-2012 query-performance
我有一个 asp.net 网站,其中有许多针对我的数据库运行的插入、更新和删除查询。
几天前,我在其中一个表的两列上创建了一个全文索引。之后我意识到当网站在该表上运行更新查询时,SQL Server 进程的内存和磁盘使用量正在跳跃并且更新速度较慢。在创建全文索引之前,查询运行没有任何性能问题。
我也意识到以前非常简单的更新查询现在变得复杂了,因为执行计划现在有诸如全文索引更新之类的东西。这是启用全文后变得复杂的新执行计划的一部分:
在我更新站点内容的几个小时内,我运行了 5000 个更新查询,我认为每次都为每一行完成全文索引过程。
我应该在更新行开始时禁用全文扫描,然后重新启用它(如在这个相关问题中)?
我可以告诉 SQL Server 停止全文索引 5 分钟,然后开始索引新数据吗?
有没有更好的选择?我正在使用 SQL Server 2012。
如果您停止它(禁用它),索引将不可用于使用它的查询。
但是,您可以将更改跟踪设置为手动:
--disable automatic change tracking
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING MANUAL
GO
--run the update statement here
--re-enable automatical change tracking after updating it to reflect the recent changes
ALTER FULLTEXT INDEX schema.table START UPDATE POPULATION
GO
ALTER FULLTEXT INDEX ON schema.table SET CHANGE_TRACKING AUTO
GO
Run Code Online (Sandbox Code Playgroud)
您可以使用以下查询检查当前值:
SELECT TOP(10) change_tracking_state_desc, *
FROM sys.fulltext_indexes
WHERE object_name(object_id) = '...';
Run Code Online (Sandbox Code Playgroud)
有效选项有:SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
指定对全文索引所覆盖的表列所做的更改(更新、删除或插入)是否将由 SQL Server 传播到全文索引。数据更改WRITETEXT
不会UPDATETEXT
反映在全文索引中,也不会通过更改跟踪来获取。
请参阅有关ALTER FULLTEXT INDEX (Transact-SQL)的 Microsoft 文档。
归档时间: |
|
查看次数: |
1989 次 |
最近记录: |