SQL Server Profiler пишет против RowCounts - PullRequest
1 голос
/ 31 марта 2011

Когда я измеряю Writes и RowCounts в SQL Server Profiler, я обнаружил один оператор (удаление), который сообщает Writes = 26035, но RowCounts 0. Как это возможно?Очевидно, что оператор удаляет строки, так как он пишет, так почему ни один из них не учитывается в столбце rowcount?

1 Ответ

2 голосов
/ 31 марта 2011

Поскольку количество строк указывает на количество строк, возвращаемых клиенту. И удаление не возвращает никаких строк, если вы не используете предложение OUTPUT.

Обновление: ==> Я исправлен

Доказательство:

SELECT * 
  FROM Accounts 
 WHERE Category= 'COA'  
   AND Code between 1500 and 2000 
-- 18 Reads, 0 Writes, 51 RowCount

DELETE FROM Accounts 
 WHERE Category = 'COA' 
   AND Code between 1500 and 2000
-- 22 Reads, 1 Writes, 51 RowCount

DELETE FROM Accounts
OUTPUT DELETED.* 
WHERE Category = 'COA' 
  AND Code between 2000 and 4000
-- 24 Reads, 3 Writes, 103 RowCount

Выполнение оператора удаления для 2 таблиц с 5 миллионами записей, который не удаляет записи, дает мне следующий план запроса: *

delete clust from clust, heap where clust.Key= heap.Key
-- 19854 Reads, 0 Writes, 0 RowCount
 |--Clustered Index Delete(OBJECT:([dbo].[clust].[idx_clust]), OBJECT:([dbo].[clust].[idx2_clust]))
      |--Top(ROWCOUNT est 0)
           |--Parallelism(Gather Streams)
                |--Hash Match(Right Semi Join, HASH:([dbo].[heap].[Key])=([dbo].[clust].[Key]))
                     |--Bitmap(HASH:([dbo].[heap].[Key]), DEFINE:([Bitmap1012]))
                     |    |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([dbo].[heap].[Key]))
                     |         |--Stream Aggregate(GROUP BY:([dbo].[heap].[Key]))
                     |              |--Index Scan(OBJECT:([dbo].[heap].[idx_heap]), ORDERED FORWARD)
                     |--Parallelism(Repartition Streams, Hash Partitioning, PARTITION COLUMNS:([dbo].[clust].[Key]))
                         |--Index Scan(OBJECT:([dbo].[clust].[idx2_clust]),  WHERE:(PROBE([Bitmap1012],[dbo].[clust].[Key],N'[IN ROW]')) ORDERED FORWARD)

Выполнение одного и того же запроса в 2 небольших таблицах по 10 строк в каждой дает следующие результаты:

delete smallclust from smallclust, smallheap where smallclust.srp_key = smallheap.common_key
-- 45 Reads, 0 Writes, 0 RowCount
 |--Table Delete(OBJECT:([dbo].[smallclust]))
      |--Top(ROWCOUNT est 0)
           |--Nested Loops(Left Semi Join, WHERE:([dbo].[smallheap].[Key]=[dbo].[smallclust].[Key]))
                |--Table Scan(OBJECT:([dbo].[smallclust]))
                |--Table Scan(OBJECT:([dbo].[smallheap]))

Таким образом, предположение о хеш-таблице, вызывающей записи, остается неубедительным.

...