note 3108327 - 数据库碎片整理和重新建立索引可提高性能

阅读量:42 2024-10-17 note  3108327 - 数据库碎片整理和重新建立索引可提高性能 SQL SAPB1

知识分享不易,转载请标注来源:http://www.blenderkou.top/contents/13/6345.html
版权申明:欢迎转载,但请注明出处。
一些博文中的参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。


3108327 - 数据库碎片整理和重新建立索引可提高性能

 

症状

事务和报告的执行时间增加,导致 SAP Business One(Microsoft SQL Server 版)整体性能下降

环境

SAP Business One

原因

在运行期间,由于数据插入、更新和删除,SAP Business One 的数据库可能会变得分散。 如果索引页具有基于键值的逻辑顺序,而该值与数据文件中的物理顺序不匹配,则会发生分段。严重碎片化的索引会导致性能下降。

解决方案

1、执行以下查询以帮助确定数据库是否需要重新建立索引。此查询将列出大于 20 页且碎片级别超过 30% 的所有索引。您可以调整这些临界值以更好地满足您的特定需求。使用这些标准作为基准,因为较小的索引和较少的分段索引通常不太可能引起性能问题。
 

SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, ind.name AS IndexName, indexstats.index_type_desc AS IndexType, indexstats.avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind ON ind.object_id = indexstats.object_id AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 30  AND page_count > 20
ORDER BY indexstats.avg_fragmentation_in_percent DESC



2、要重建受影响数据库中的索引,请从 Microsoft SQL Server Management Studio 执行以下脚本。在较大的数据库中此过程可能需要几个小时才能完成,因此我们建议在办公时间外运行该过程,以最大限度地减少对连接用户的影响。

/*
Reindex procedure. Will execute dbcc dbreindex on each table in database
*/
 
DECLARE @tableName as sysname
DECLARE @strExec as varchar(1000)
 
-- Cursor declaration
DECLARE tableNameCursor CURSOR READ_ONLY FAST_FORWARD FOR
-- Take all user table
--SELECT [name] FROM sysobjects WHERE xtype = 'U'
 
SELECT OBJECT_NAME(ind.OBJECT_ID) AS  [name]  
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind ON ind.object_id = indexstats.object_id AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 30
AND page_count > 20
ORDER BY indexstats.avg_fragmentation_in_percent DESC 
 
 
OPEN tableNameCursor
FETCH NEXT FROM tableNameCursor INTO @tableName
 
WHILE @@FETCH_STATUS = 0
BEGIN
 
-- Create the statement
SET @strExec = 'dbcc dbreindex (''' + @tableName + ''','''',0 )'
-- Execute the procedure
exec (@strExec)
 
FETCH NEXT FROM tableNameCursor INTO @tableName
END
 
CLOSE tableNameCursor
DEALLOCATE tableNameCursor


另请参阅

有关此主题的更多详细信息,请参阅 Microsoft SQL Server 文档

关键字

挂起,冻结,慢

 

更多好文:

SAP Business One 10.0 免费试用

Addon Show 2.0 SAP Business One 报表增强插件

SAP B1 Fiori 模式的 Web Client 、Service Layer来了! 10.0 PL01

SAPB1-开发成果-4 DelBOMAddOn[批量删除BOM]

SAP B1 库存明细表:批次、序列、库位 [HANA & SQL 通用] 

SAP B1 SQL Server 版的 Fiori 主题SAP Business One 10.0 发布了!!!SAP B1 查询管理器条件参数

SAP B1邮件通知 —— 让申请者第一时间获取采购进度

SAP Business One RFQ (联机报价单)SAP HANA学院 视频汇总与分类SAP B1业务流程展现方案[仪表盘]SAP B1在线试用

SAP B1 各版本官方包下载

SAP B1 移动端配置教程

前往www.blenderkou.top 获取更多内容。


点击下方阅读原文进入我的博客查看更多章节。

长按二维码,选择 “识别图中二维码” 关注我的公众号。

关注.png

扫描二维码,关注我的公众号,第一时间获取文章!


知识分享不易,转载请标注来源:http://www.blenderkou.top/contents/13/6345.html
版权申明:欢迎转载,但请注明出处。
一些博文中的参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。

上一篇
SQL server根据数据、字段值反查表名、字段名

下一篇
SQL Server 查询某个表的列名称、说明、备注、类型等