статистика sql - PullRequest
       20

статистика sql

22 голосов
/ 14 января 2009

Простой вопрос, но я не нашел хорошего объяснения в Google. При использовании Set Statistics IO ON логические чтения и количество сканирований предоставляются в окне сообщений студии управления. Если у меня есть:

tblExample, число сканирования 5, логическое чтение 20

Что означает число сканирований?

Ответы [ 5 ]

18 голосов
/ 06 августа 2010

Что означает "сканирование таблицы" , лучшее, что я смог найти, это:

Число сканирований просто означает, сколько раз к таблице или индексу обращались во время запроса. Это может быть полное сканирование, частичное сканирование или просто поиск.

Другими словами, сам по себе счетчик сканирования недостаточно для продолжения. Вы должны точно знать, что это были за сканы, поэтому вам придется взглянуть на фактический план выполнения более подробно. В итоге это не очень полезный показатель сам по себе!

Дополнительно:

http://www.eggheadcafe.com/software/aspnet/32171165/set-statistics-io-scan-count-explanation.aspx

К сожалению, Количество сканирования в наши дни не очень информативно . Хм, хорошо, если вы видите число, например 19223, вероятно, к таблице есть доступ через вложенный цикл присоединяйся много раз.

Было время, когда «количество сканирований» просто означало «время доступа к таблице», но это было давно, может быть, в SQL 6.5. Единственный раз, когда вы могли получить число сканирований с этим определением 0 соответствует запросу типа ...

select *
from TestA1
where CompanyID = 1
and CompanyID = 2

... где SQL Server мог бы сделать вывод, что запрос не вернется любые строки без доступа к таблице.

14 голосов
/ 14 января 2009

Из книг в сети

Количество сканирований: Число выполненных сканирований индекса или таблицы.

логические чтения: Количество страниц, прочитанных из кэша данных.

физические чтения: Количество прочитанных страниц с диска.

чтение впереди читает: Количество страниц, помещенных в кеш для запроса.

Смотрите также здесь: http://technet.microsoft.com/en-us/library/ms184361.aspx

13 голосов

Если продолжить сбор цитат MSDN. Тогда [1], что повторяется в [2]:

  • " Логические чтения
    Это значение указывает общее количество обращений к странице, необходимое для обработки запроса. Каждая страница считывается из кэша данных, независимо от того, было ли необходимо перенести эту страницу с диска в кэш для какого-либо данного чтения . Это значение всегда по крайней мере такое же большое и обычно больше, чем значение для физических чтений. Одна и та же страница может быть прочитана много раз (например, когда запрос выполняется из индекса), поэтому число логических чтений для таблицы может превышать количество страниц в таблице.

  • Физические чтения
    Это значение указывает количество страниц, которые были прочитаны с диска; оно всегда меньше или равно значению логического чтения. Значение коэффициента попадания в буферный кэш, отображаемое системным монитором, вычисляется из значений логического чтения и физического чтения следующим образом:

  • Чтение впереди Чтения
    Значение Read Ahead Reads указывает количество страниц, которые были прочитаны в кэш с использованием механизма опережающего чтения во время обработки запроса. Эти страницы не обязательно используются запросом. Если страница в конечном счете необходима, логическое чтение считается, а физическое чтение - нет. Высокое значение означает, что значение для физических чтений, вероятно, ниже, а коэффициент попаданий в кэш, вероятно, выше, чем ... [усечено vgv8]

  • Количество сканирований
    Значение счетчика сканирования показывает количество обращений к соответствующей таблице. Внешние таблицы объединения с вложенным циклом имеют число сканирований, равное 1. Для внутренних таблиц счетчиком сканирований может быть количество обращений к таблице через «цикл». Количество логических чтений определяется суммой числа сканирований, умноженных на количество страниц, к которым обращались при каждом сканировании. Однако даже для соединений с вложенным циклом счетчик сканирования для внутренней таблицы может отображаться как 1. SQL Server может скопировать необходимые строки из внутренней таблицы в рабочую таблицу в кеше и использовать эту рабочую таблицу для доступа к фактическим строкам данных. Когда этот шаг используется в плане, его часто нет в выходных данных STATISTICS IO. Вы должны использовать выходные данные из STATISTIC TIME, а также информацию о реальном используемом плане обработки, чтобы определить фактическую работу, связанную с выполнением запроса. Хеш-объединения и объединения-слияния обычно показывают число сканирований как 1 для обеих таблиц, участвующих в объединении, но эти типы объединений могут занимать значительно больше памяти. Вы можете проверить значение memusage в sysprocesses во время выполнения запроса, но в отличие от значения Physical_io это не кумулятивный счетчик, и он действителен только для текущего запущенного запроса. Как только запрос завершается, невозможно определить, сколько памяти он использовал. "

[1]
Глава 4. Устранение неполадок с производительностью запросов. Мониторинг производительности запросов
Внутри Microsoft® SQL Server ™ 2005 : настройка и оптимизация запросов
Кален Делани


Издатель: Microsoft Press
Дата публикации: 26 сентября 2007 года
Печать ISBN-10: 0-7356-2196-9
Печать ISBN-13: 978-0-7356-2196-1
Страницы: 448

[2] * * тысяча сорок девять Мониторинг производительности запросов
Оптимизация производительности запросов
Рон Соукуп, Кален Делани
Глава 14 изнутри Microsoft SQL Server 7.0, опубликованная Microsoft Press
http://technet.microsoft.com/en-us/library/cc917719.aspx#ECAA

9 голосов
/ 20 ноября 2010
1 голос
/ 07 марта 2014

Игнорировать счетчик сканирования, это не важно. Сосредоточьтесь на том, как снизить логическое чтение. На основании http://www.practicalsqldba.com/2013/07/sql-server-performance-tuning.html.

...