2013-09-21 19 views
0

我使用SQL Server 2012,并在我的数据库中有一个表,其中有10行,通常在sql server profiler中没有查询。但是当我使用dm_db_index_usage_stats作为索引的调查用途时,此表的主键索引高度为user_updateuser_seekSQL服务器索引使用率很高

我不知道为什么这个指数有较高的更新和寻求。

此未使用表的平均更新每分钟大约有1000次更新。

编辑

此表没有与另一个表的任何外键,并没有任何相关性。

我认为这个问题是sql server中的一个bug。

EDIT 2

当我删除并重新创建该表并重新插入其上的数据,该表的索引使用并没有改变。

我想也许存在一些像这张表一样的表(没有用法并且有索引更新和索引查找)。

编辑3

我写的这个表更新后触发,并更新记录保存到另一个表JohnLBevan suggest但不插入新表中的任何记录,这意味着这触发唐不会跑。但索引user_seek和索引user_update仍然会更改。我坚信这个问题是SQL Server中的一个错误。但我不知道这些更新和寻求对性能有效。

编辑4

我用下面的代码来获得使用索引:

SELECT * 
From 
(SELECT DB_NAME(ddius.database_id)AS DatabaseName, OBJECT_NAME(ddius.object_id) AS object_name , 
     CASE 
     WHEN (SUM(user_updates + user_seeks + user_scans + user_lookups) = 0) 
     THEN NULL 
     ELSE (CAST(SUM(user_seeks + user_scans + user_lookups) AS DECIMAL) 
        /CAST(SUM(user_updates + user_seeks + user_scans 
           + user_lookups) AS DECIMAL)) 
     END AS RatioOfReads , 
     CASE 
     WHEN (SUM(user_updates + user_seeks + user_scans + user_lookups) = 0) 
     THEN NULL 
     ELSE (CAST(SUM(user_updates) AS DECIMAL) 
        /CAST(SUM(user_updates + user_seeks + user_scans 
           + user_lookups) AS DECIMAL)) 
     END AS RatioOfWrites , 
     SUM(user_updates + user_seeks + user_scans + user_lookups) 
                AS TotalReadOperations , 
     SUM(user_updates) AS TotalWriteOperations 
FROM sys.dm_db_index_usage_stats AS ddius 
     JOIN sys.indexes AS i ON ddius.object_id = i.object_id 
           AND ddius.index_id = i.index_id 
WHERE i.type_desc IN ('CLUSTERED', 'HEAP') --only works in Current db 
GROUP BY ddius.database_id,ddius.object_id) Z 
ORDER BY TotalWriteOperations desc --OBJECT_NAME(ddius.object_id) 
+1

这个问题似乎是题外话,因为它缺乏足够的相关信息 –

+0

不再使用的表没有更新。 –

+0

未使用的表必须不被更新。但是这个表有很高的更新没有用处。 –

回答

5
SELECT * 
From 
(SELECT OBJECT_NAME(ddius.object_id) AS object_name , 
     ... 
FROM sys.dm_db_index_usage_stats AS ddius 
     JOIN sys.indexes AS i ON ddius.object_id = i.object_id 
           AND ddius.index_id = i.index_id 
WHERE i.type_desc IN ('CLUSTERED', 'HEAP') --only works in Current db 
GROUP BY ddius.object_id) Z 
ORDER BY TotalWriteOperations desc --OBJECT_NAME(ddius.object_id) 

查询不正确。 sys.dm_db_index_usage_stats将返回来自整个服务器(所有数据库)的条目,但您将加入当前数据库object_id/index_id。结果错误地汇总了所有数据库中的条目,并将它们显示为当前数据库中的使用情况。添加ddius.database_id = DB_ID()WHERE

WHERE i.index_id <= 1 -- clustered or heap 
AND ddius.database_id = DB_ID() 
+0

+1感谢您的回答。如果系统允许(24小时后),我将分配奖金。 –