Я использую SQL Server 2012 и делаю простой запрос SELECT *, я вижу, что мой дисковый ввод-вывод в мониторе производительности < 10 МБ/с. Однако, если я делаю резервную копию базы данных, я вижу значения > 200 МБ/с.
Почему SQL-сервер так медленно извлекает данные?
решение1
Причина, по которой вы видите только 10 МБ/сек, заключается в том, что эти счетчики производительности рассматривают данные от одной секунды к другой, а не отдельные действия в течение того же периода времени. Таким образом, ваш запрос мог извлечь 10 МБ менее чем за секунду, но это будет зарегистрировано в Performance Monitor только как 10 МБ/сек.
Резервное копирование тянет большие объемы данных по всем направлениям, поэтому оно будет регистрироваться на полной скорости диска. Если бы оно могло регистрировать дисковые операции ввода-вывода для отдельных действий, оно, вероятно, сказало бы 200 МБ/с или что-то подобное, возможно, даже больше для небольших пакетов данных, поскольку скорость становится почти невозможно измерить для небольших пакетов.
Надеюсь это поможет.
решение2
Оказывается, все мои чтения из запроса шли прямо из памяти, а не с диска. Я смог это определить, выполнив следующую команду перед запросом:
SET STATISTICS IO ON
После этого я запустил запрос и посмотрел на вкладку сообщений для статистики. Логические чтения из памяти, физические чтения с диска.