У меня есть SSD, который, используя тест IOmeter, показывает производительность более 200 МБ / с. Однако, когда я запускаю любой запрос SQL с локальной машины, монитор ресурсов Windows никогда не показывает дисковый ввод-вывод выше 7 МБ / с. Это верно даже для запросов, выполнение которых занимает более 2 минут. Что может быть узким местом в том, что он использует только 7 МБ / с от SSD?
Я бегу:
- Windows Server 2012 Standard
- SQL server 2008 r2
- Intel i7 3820
- 32 ГБ оперативной памяти
- Сандиск SSD
sql-server
sql-server-2008-r2
hardware
Дин МакГрегор
источник
источник
sys.dm_os_waiting_tasks
время выполнения запроса, чтобы увидеть, есть ли другие типы ожидания, с которыми он сталкивается.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
, Таким образом, никакие результаты не отправляются обратно клиенту, но план и IO останутся прежними.Ответы:
Из цепочки комментариев, похоже, вы интерпретируете,
ASYNC_NETWORK_IO
что означает, что проблема связана с сетью. Это (как правило) нет.Как @martinSmith намекнул (дважды), наиболее вероятным объяснением этого является SSMS или приложение, которое вы используете, не получая результаты так быстро, как их обслуживает SQL Server. Выполните любой из предложенных способов, чтобы удалить потребление строк из вашего измерения, и вы получите истинную (r) картину максимальной пропускной способности ввода-вывода:
На тот случай, если вы этого еще не сделали, вам, очевидно, нужно
DBCC DROPCLEANBUFFERS
убедиться, что данные действительно читаются с диска, а не из кеша буфера. Применяются обычные предупреждения «только на тесте, не делайте этого в активной живой среде» и т. Д.Оттачивая пару других ваших комментариев:
Что именно мы здесь тестируем, как и почему? Если ваш запрос на 9 миллионов строк отличается от a,
SELECT * FROM dbo.SomeTable
то в игру вступают 1001 фактор, кроме простой пропускной способности ввода-вывода.Ваш Intel I7-3820 является 4-ядерным процессором. Если ваш тестовый запрос не генерирует параллельный план, я был бы удивлен, если бы вы могли получить более 20% загрузки ЦП из системы.
3 минуты, чтобы вернуть 9 миллионов строк, очень подозрительно и говорят о том, что мы не получаем полной картины того, что вы тестируете. Я предполагаю, что это случай неоптимального (непараллельного) плана запроса, заполненного множеством операторов вложенного цикла, тянущих миллионы строк, то есть не одну таблицу
SELECT
для проверки потребления ввода-вывода.Я предлагаю:
SELECT *
проверить только IO через SQL Server.источник