Cru*_*ler 3 index sql-server index-tuning sql-server-2014
我遇到了数据库性能问题,因此我们重建了所有索引,因为我们在维护它们方面做得并不好。重建运行了大约 20 分钟。然后我找到了一个查询来查看我的索引的外观
SELECT
t.NAME 'Table name',
i.NAME 'Index name',
ips.index_type_desc,
ips.alloc_unit_type_desc,
ips.index_depth,
ips.index_level,
ips.avg_fragmentation_in_percent,
ips.fragment_count,
ips.avg_fragment_size_in_pages,
ips.page_count,
ips.avg_page_space_used_in_percent,
ips.record_count,
ips.ghost_record_count,
ips.Version_ghost_record_count,
ips.min_record_size_in_bytes,
ips.max_record_size_in_bytes,
ips.avg_record_size_in_bytes,
ips.forwarded_record_count
FROM
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
INNER JOIN
sys.tables t ON ips.OBJECT_ID = t.Object_ID
INNER JOIN
sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id
WHERE
AVG_FRAGMENTATION_IN_PERCENT > 0.0
ORDER BY
AVG_FRAGMENTATION_IN_PERCENT, fragment_count
Run Code Online (Sandbox Code Playgroud)
所以我的大多数索引的平均碎片化百分比 <1 但我有大约 10 个是 85%,另外 10 个是 100%
我不是 dba,对我在这里所做的事情知之甚少,但这肯定很糟糕吗?
还值得注意的是,100% 都是主键
我是否陷入了困境,还是我对统计数据的理解不正确?
注意:值得一提的是我的数据库是 24GB,我的驱动器有 115GB 中的 46GB 免费
编辑:根据下面的请求重新索引脚本
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 80
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.['+name+']' AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
print @TableName
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO
Run Code Online (Sandbox Code Playgroud)
我遇到了数据库性能问题,因此我们重建了所有索引,因为我们在维护它们方面做得并不好。
这是对性能问题的下意识反应。您的页数少于 10!重建索引对您的帮助最小。
我将首先阅读和理解如何分析 SQL Server 性能?
归档时间: |
|
查看次数: |
8484 次 |
最近记录: |