Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
dbyyb
Member

Откуда: Москва
Сообщений: 4
Добрый день.

Есть два сервера.

Слабый:
Dell T30
Xeon E3-1225 v5 @ 3.30GHz, ОЗУ 32Гб
Windows Server 2016 Standart 64-bit
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
SSD 240Гб - система + tempdb
HDD01 4Тб - data
HDD02 4Тб - log

Более мощный:
Dell R910
Xeon E7-8837 @ 2.67GHz, ОЗУ 64Гб
Windows Server 2016 Standart 64-bit
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
RAID PERC-H700, 10 SSD INTEL 200Гб
RAID1 2*200Гб - система
RAID1 2*200Гб - tempdb
RAID0 3*200Гб - data
RAID0 3*200Гб - log
Нулевые рейды пока нет дополнительных дисков, будет RAID10.

Есть запрос, который выполняет SELECT. В результе, T30 выполняет запрос за 00:02:40, а R910 за 00:07:50. Базы одни и те же.

CrystalMarkDisk показывает скорость чтение и записи SSD в RAID1 и SSD в RAID0 на R910 выше в 5-6 раз, чем HDD и SSD на T30.

Никак не могу понять, почему более слабый сервер выполняет запросы быстрее.
13 янв 18, 21:48    [21104845]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
если у вас проблема с запросом, то начинать нужно с сиквел сервера, а не с дисков
план запроса сравните
13 янв 18, 22:22    [21104887]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
dbyyb
Добрый день.

Есть два сервера.

Слабый:
Dell T30
Xeon E3-1225 v5 @ 3.30GHz, ОЗУ 32Гб
Windows Server 2016 Standart 64-bit
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
SSD 240Гб - система + tempdb
HDD01 4Тб - data
HDD02 4Тб - log

Более мощный:
Dell R910
Xeon E7-8837 @ 2.67GHz, ОЗУ 64Гб
Windows Server 2016 Standart 64-bit
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
RAID PERC-H700, 10 SSD INTEL 200Гб
RAID1 2*200Гб - система
RAID1 2*200Гб - tempdb
RAID0 3*200Гб - data
RAID0 3*200Гб - log
Нулевые рейды пока нет дополнительных дисков, будет RAID10.

Есть запрос, который выполняет SELECT. В результе, T30 выполняет запрос за 00:02:40, а R910 за 00:07:50. Базы одни и те же.

CrystalMarkDisk показывает скорость чтение и записи SSD в RAID1 и SSD в RAID0 на R910 выше в 5-6 раз, чем HDD и SSD на T30.

Никак не могу понять, почему более слабый сервер выполняет запросы быстрее.

Верю, что для SSD тесты на новом что-то показали. Не верю в то, что Вы правильно трактовали результаты этих тестов. И не верю, что после проведению их Вы в боевом режиме все так же настроили.

Потому что даже при том, что в старом T40 диск SSD скорее всего имеет характеристики 550MB/s Read / 490MB/s Write (если это не старый 330/330), а в новом диск наверняка Intel S3700 имеет характеристики 500/365. А Вы упираетесь в сортировку внутри tempdb. И чем быстрее запишет SQL данные в tempdb, тем лучше.
Плюс к этому Вы могли или батарейку BBU не вставить в PERC-H700 ну или таки криво его настроить.
13 янв 18, 22:28    [21104895]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Andy_OLAP,

То есть в старом T30, опечатался. Ну или MSSQL на новом делает merge join, а на старом hash join.
13 янв 18, 22:33    [21104901]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
aleks222
Guest
dbyyb
Есть запрос, который выполняет SELECT. В результе, T30 выполняет запрос за 00:02:40, а R910 за 00:07:50. Базы одни и те же.

CrystalMarkDisk показывает скорость чтение и записи SSD в RAID1 и SSD в RAID0 на R910 выше в 5-6 раз, чем HDD и SSD на T30.

Никак не могу понять, почему более слабый сервер выполняет запросы быстрее.


1. Патаму, что если MS SQL решит прочитать таблицы на новом сервере в 100 раз больше раз (каламбурчик), скорость чтения " выше в 5-6 раз" - тупо не спасет.

2. Спасет обновление статистики.

3. Если обновление статистики не спасет - радикальное средство - написать запрос правильно.
14 янв 18, 11:00    [21105282]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
dbyyb
Member

Откуда: Москва
Сообщений: 4
Andy_OLAP,
оба сервера работают в тестовом режиме. Про трактовку результатов тестов поясните, пожалуйста. Банальная скорость копировать файла 50Гб показывает скорость 300Мб/с на R910 против 85Мб/с на Т30. Или это ничего не значит?


aleks222,
база данных одинаковая на обоих серверах (из одного бэкапа), запрос используется один и тот же. Статистику обновлял.

На Zabbix есть темплейт по MSSQL2012. Сейчас сравнил оба сервера при выполнение запроса. Получил вот какие данные:
Average SQLServer:Access Methods: Workfiles Created/sec {MS SQL 2012:perf_counter["\SQLServer:Access Methods\Workfiles Created/sec",30].last()}>20 поднимается до 70 (против 0,8 на T30)
Average SQLServer:Access Methods: Worktables Created/sec {MS SQL 2012:perf_counter["\SQLServer:Access Methods\Worktables Created/sec",30].last()}>20 поднимается до 180 (против 6,5 на Т30)
Average SQLServer:Access Methods Page Splits / Sec {MS SQL 2012:perf_counter["\SQLServer:Access Methods\Page Splits/sec",30].last()}>{MS SQL 2012:perf_counter["\SQLServer:SQL Statistics\Batch Requests/sec",30].last()}/5 поднимается до 60 (против 2,3 на Т30)

Это имеет какое-то значение?
14 янв 18, 14:41    [21105525]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
aleks222
Guest
Наивный чукотский вьюноша.

Запусти свой запрос

SET STATISTICS IO ON;

select [чаво там у тебя]...


И, может быть, просветление наступит.
14 янв 18, 15:36    [21105581]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
архивариус
Member

Откуда:
Сообщений: 150
разницу в три раза это не объясняет , но тем не менее :
процессор на старом сервере на 25% быстрее
14 янв 18, 16:59    [21105693]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
Tauzer
Member

Откуда:
Сообщений: 114
для чистоты эксперимента делаю простой запрос из таблицы
SELECT * FROM table

результат возвращает примерно 8,5 млн. строк

Вот статистика:
на Т30

на R910 все то же самое, только время выполнения не 120077 , а 194322
В остальном статистика идентичная.

К сообщению приложен файл. Размер - 22Kb
14 янв 18, 18:52    [21105850]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Надо смотреть план конкретного запроса. Если все необходимые данные уже загружены в кеш, то скорость ввода-вывода с диска значения не играет. Зато играет значение производительность процессора, системной шины, оперативной памяти. Именно так и происходит в хорошо сбалансированных системах, где памяти достаточно и Page Life Expectancy зашкаливает.

З.Ы. Оценивать производительности системы по отдельно взятому запросу не очень правильно. Например, если в системе много простых запросов (например, веб магазин), то хорошо будут работать многоядерные процессоры, где будут работать параллельные планы. А бывают задачи с очень тяжёлыми транзакциями. Типа ERP. Где планы редко распараллеливаются. Там высокая тактовая частота процессора играет значительную роль. А количество ядер можно поменьше.

#Хэш=
14 янв 18, 19:26    [21105899]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Tauzer
для чистоты эксперимента делаю простой запрос из таблицы
SELECT * FROM table

результат возвращает примерно 8,5 млн. строк

Вот статистика:
на Т30

на R910 все то же самое, только время выполнения не 120077 , а 194322
В остальном статистика идентичная.
Неверное представление о чистоте эксперимента. Во-первых, данные могли читаться не с физического диска, а из кэша. Во-вторых я вижу количество байтов полученных с сервера и понимаю, что у Вас тут передача данных по сети в основном задействована и скорость вывода на консоль.

Не надо делать SELECT * FROM table.
Надо SELECT SUM() FROM table, например.

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

Ну и SET STATISTICS IO ON; надо, чтобы понять, что там реально с дисковыми операциями происходит. Тогда будет понятно, физические это чтения или логические. Есть ли запись во временные таблицы и т.д.

#Хэш=
14 янв 18, 19:35    [21105909]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Tauzer
Вот статистика
Зачем вам это, что тут можно понять?
Посмотрите SET STATISTICS IO ON, и не на SELECT * FROM table, а на вашем запросе, который "Есть запрос, который выполняет SELECT. В результе, T30 выполняет запрос за 00:02:40, а R910 за 00:07:50."
Если это и есть тот самый запрос, тогда у вас просто разное сетевое подключение, и больше ничего.
14 янв 18, 22:00    [21106026]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
04cf9f9576a6f15
Надо смотреть план конкретного запроса. Если все необходимые данные уже загружены в кеш, то скорость ввода-вывода с диска значения не играет. Зато играет значение производительность процессора, системной шины, оперативной памяти. Именно так и происходит в хорошо сбалансированных системах, где памяти достаточно и Page Life Expectancy зашкаливает.

З.Ы. Оценивать производительности системы по отдельно взятому запросу не очень правильно. Например, если в системе много простых запросов (например, веб магазин), то хорошо будут работать многоядерные процессоры, где будут работать параллельные планы. А бывают задачи с очень тяжёлыми транзакциями. Типа ERP. Где планы редко распараллеливаются. Там высокая тактовая частота процессора играет значительную роль. А количество ядер можно поменьше.

#Хэш=

Таки самое смешное, что в старом T30 у него стоят планки памяти DDR4 Unbuffered DIMMs (варианты 1600 MT/s, 1866 MT/s, 2133 MT/s, 2400 MT/s, скорее всего, самые скоростные), а в новом R910 на чипсете Intel 7500 стоят планки DDR3 низковольтовые, а по официальной спеке "Supported DDR3L are 2 GB x8, 4 GB x8, 8 GB x8, and 16 GB x4 DRAM RDIMMs. RDIMMs rated at 1333 MT/s operate at maximum of 1066 MT/s". И получается, что данные по шине между оперативной памятью и CPU в старом прокачиваются 2400, а в новом 1333. Делим 00:02:40 (160 секунд) на 1333 и умножаем на 2400 - и получаем 288 секунд (4 минуты 48 секунд). А если делим на 1066 и умножаем на 2400, то получаем 360 секунд (уже 6 минут). А плюс большой размер кэша L3 на новом, но в 24 Мбайта размер считанных строк для select не помещается - и тут вступает в работу частота 3.3 Гц против 2.67 Гц.
И берем 360 секунд, делим на 2.67 и умножаем на 3.3 - и получаем 445 секунд (7 минут 25 секунд).

Ну а учитывая то, что скорее всего на R910 включен режим не максимальной производительности для Windows, а адаптивной - ему еще нужно раскачаться и выйти на частоту 2.67. Отсюда получаем 7 минут 50 секунд. При одинаковом плане выполнения...
14 янв 18, 23:11    [21106105]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Andy_OLAP
Таки самое смешное, что в старом T30 у него стоят планки памяти DDR4 Unbuffered DIMMs
Вообще, слишком мало деталей.
При выполнении одного запроса, понятно, старый сервер с малым количеством высокочастотных ядер, читая данные из памяти, закономерно будет выполнять запрос быстрее, если в запросе нет распараллеливания.
А может запрос вида select * from [большая таблица], тогда многое определяется клиентом и сетью.
В общем, непонятно из предоставленных данных.
15 янв 18, 08:50    [21106389]     Ответить | Цитировать Сообщить модератору
 Re: Почему скорость выполнения запроса на слабом сервере выше, чем на более мощном?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Andy_OLAP
04cf9f9576a6f15
Надо смотреть план конкретного запроса. Если все необходимые данные уже загружены в кеш, то скорость ввода-вывода с диска значения не играет. Зато играет значение производительность процессора, системной шины, оперативной памяти. Именно так и происходит в хорошо сбалансированных системах, где памяти достаточно и Page Life Expectancy зашкаливает.

З.Ы. Оценивать производительности системы по отдельно взятому запросу не очень правильно. Например, если в системе много простых запросов (например, веб магазин), то хорошо будут работать многоядерные процессоры, где будут работать параллельные планы. А бывают задачи с очень тяжёлыми транзакциями. Типа ERP. Где планы редко распараллеливаются. Там высокая тактовая частота процессора играет значительную роль. А количество ядер можно поменьше.

#Хэш=

Таки самое смешное, что в старом T30 у него стоят планки памяти DDR4 Unbuffered DIMMs (варианты 1600 MT/s, 1866 MT/s, 2133 MT/s, 2400 MT/s, скорее всего, самые скоростные), а в новом R910 на чипсете Intel 7500 стоят планки DDR3 низковольтовые, а по официальной спеке "Supported DDR3L are 2 GB x8, 4 GB x8, 8 GB x8, and 16 GB x4 DRAM RDIMMs. RDIMMs rated at 1333 MT/s operate at maximum of 1066 MT/s". И получается, что данные по шине между оперативной памятью и CPU в старом прокачиваются 2400, а в новом 1333. Делим 00:02:40 (160 секунд) на 1333 и умножаем на 2400 - и получаем 288 секунд (4 минуты 48 секунд). А если делим на 1066 и умножаем на 2400, то получаем 360 секунд (уже 6 минут). А плюс большой размер кэша L3 на новом, но в 24 Мбайта размер считанных строк для select не помещается - и тут вступает в работу частота 3.3 Гц против 2.67 Гц.
И берем 360 секунд, делим на 2.67 и умножаем на 3.3 - и получаем 445 секунд (7 минут 25 секунд).

Ну а учитывая то, что скорее всего на R910 включен режим не максимальной производительности для Windows, а адаптивной - ему еще нужно раскачаться и выйти на частоту 2.67. Отсюда получаем 7 минут 50 секунд. При одинаковом плане выполнения...
Вот это скорее всего наиболее правдоподобное объяснение. Ради любопытства можно на рабочей системе под нагрузкой фиксировать показатели "page lookups / sec" и процент загрузки процессора. Скорее всего обнаружится хорошая корреляция. То есть, запросы, вызывающие большое количество логических чтений, вызывают высокую загрузку процессора. Соответственно, если в наличии огромный размер памяти, вся база туда целиком помещается, обращения к диску по нулям, то узким местом становится процессор и шина.

Выход здесь только в оптимизации запроса. Надо стремится, чтобы для получения результата требовалось минимальное количество логических чтений страниц.

З.Ы. Особенно обидно, когда есть 8 ядер, а запрос не параллелится. То есть, до предела загружено одно ядро. Остальные стоят. На графике загрузка процессора, соответственно, 12%. И это предел. Объяснить админу, что при загрузке процессоров 12% именно они являются узким местом, бывает непросто.

#Хэш=
15 янв 18, 09:00    [21106404]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить