sql statistics io Scan count объяснение

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

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

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

5 ответов


Из Книги На Линии

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

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

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

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

см. здесь: http://technet.microsoft.com/en-us/library/ms184361.aspx


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

Scan count просто означает, сколько раз таблица или индекс были доступны во время запроса. это может быть полное сканирование, частичное сканирование, или просто искать.

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

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

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 может сделать вывод, что запрос не будет возвращен любые строки, без доступа к таблице.


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

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

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

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

  • Scan Count
    Значение счетчика сканирования указывает количество обращений к соответствующей таблице. Внешние таблицы вложенного соединения цикла имеют число сканирования 1. Для внутренних таблиц счетчик сканирования может быть числом раз" через цикл", к которому была обращена таблица. Число логических считываний определяется суммой числа сканирований, умноженного на число страниц, доступных при каждом сканировании. Однако даже для вложенных соединений цикла счетчик сканирования для внутренней таблицы может отображаться как 1. SQL Server может скопировать необходимые строки из внутренней таблицы в рабочую таблицу в кэше и использовать эту рабочую таблицу для доступа к фактическим строкам данных. Когда этот шаг используется в плане, часто нет указания на него в выводе статистики ввода-вывода. Для определения фактической работы, связанной с выполнением запроса, необходимо использовать выходные данные из статистического времени, а также сведения об используемом фактическом плане обработки. Хэш-соединение и соединения слиянием, как правило, показывают количество сканирования как 1 для обеих таблиц, участвующих в соединении, но эти типы соединений могут включать значительно больше памяти. Вы можете проверить значение memusage в sysprocesses во время выполнения запроса, но в отличие от значения physical_io, это не кумулятивный счетчик и допустимо только для текущего выполняемого запроса. После завершения запроса невозможно увидеть, сколько памяти он использовал."

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


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

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



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