Скорость SELECT и RAID 1

sheich
Дата: 16.02.2010 19:23:51
Народ, объясните плиз, в чем может быть причина.

Идентичные запросы к идентичным БД под SQL сервером выполняются с примерно 2-х кратной разницей...

Есть две рабочих станции, есть один сервер.

На станциях несколько различная конфигурация - на одной Windows XP на другой - Vista. Объем памяти - 3 гига и там и там. Процы (2х-ядерные)/чипсеты разные. Тем не менее, имея идентичные базы на этих двух машинах получаем одинаковые результаты - как выполнения чистого запроса (из SQL Server Management Studio), так и загрузки веб-странички - там происходит выполнение того же запроса через веб-сервис, XSLT-преобразование полученных данных и тп. Грубо, говоря, запрос отрабатывается за 290мс, загрузка странички со всей остальной обработкой - за 550мс. Плюс-минус.

На серваке имеем х2 Xeon, те же 3 гига памяти + RAID 1 (mirror). И вот та же самая страничка/запрос здесь выполняется стабильно в 2 раза медленнее. Соответственно, 620мс и 1200мс. Причем, тесты показывают, что чтение XSLT-шаблона с диска, которое выполняется после получения данных от SQL сервера и перед выдачей странички на клиента тоже происходит примерно в два раза медленнее, чем на наших рабочих станциях.

Да, конечно, к нашим машинам нет того количества коннектов, которое есть на серваке. Но, откровенно говоря, и там их не так много - одно обращение за 5 сек. Неужели дело в этом?

Второй вариант - виноват RAID. Но разве не должен он (зеркало) повышать скорость чтения?
pkarklin
Дата: 16.02.2010 19:59:07
Ни слова ни о версии и редакции сервера, ни о планах выполнения, ни о счетчиках дисковой активности и использования памяти и процессоров.
Winnipuh
Дата: 16.02.2010 20:31:50
pkarklin
Ни слова ни о версии и редакции сервера, ни о планах выполнения, ни о счетчиках дисковой активности и использования памяти и процессоров.


ну это легкий путь, а мы не ищем легких путей
:-)
sheich
Дата: 17.02.2010 02:00:49
Версия - 2005 Express. Планы выполнения одинаковые, я же сказал - запросы и базы идентичные.
aleks2
Дата: 17.02.2010 07:17:04
sheich
Версия - 2005 Express. Планы выполнения одинаковые, я же сказал - запросы и базы идентичные.


1. Идентичность баз и запроса не гарантирует идентичность планов. Планы надо ЯВНО смотреть.

2. Уж сколько раз твердили миру: СЕРВЕРНЫЕ компоненты НЕ БЫСТРЕЕ ДЕСКТОПНЫХ. При более-менее равных типах/частотах/объемах. ОНИ только НАДЕЖНЕЕ и лучше держат нагрузку.

Если у вас сервер выполняет запрос С ОДИНАКОВЫМ планом и ОДИНАКОВОЙ статистикой IO за 600 мс, а десктоп за 300мс => у вас РАЗНЫЕ процессоры, либо по частоте, либо по типу. Например, а) Core 2 Duo сделает Пень4-Хeon, б) DDR2/3 дает некоторое преимущество над DDR1, пусть даже регистровой, в) серверная ОСЬ по-умолчанию несет БОЛЬШЕ служб, чем десктопная и, следовательно, более нагружена, вплоть до того что SQL-серверу просто достается меньше ОЗУ и может начаться чтение диска.

3. Диск играет рояль только если запрос обрабатывает данные, НЕ ПОМЕЩАЮЩИЕСЯ в ОЗУ. На чтение RAID 1 не хуже и не лучше одиночного диска или ЛУЧШЕ, ТОЛЬКО ЕСЛИ КОНТРОЛЛЕР ПОДДЕРЖИВАЕТ ЧТЕНИЕ С ЧЕРЕДОВАНИЕМ. Но опять же, ПРИБЛИЗИТЕЛЬНО сравнить быстродействие дисков можно тупо скопировав с него огромный файл на ЭТОТ ЖЕ диск.
--__Александр__--
Дата: 17.02.2010 09:22:37
Да даже если планы одинаковые, на одном серваке индексы могут быть дефрагментированы в хлам, а на другом - вчера отребилжены.

Поэтому, как писалось выше
-смотрим планы
-смотрим IO
-смотрим sys.dm_os_wait_stats
-ну еще блокировки можно посмотреть.

-----------------
open your mind
sheich
Дата: 17.02.2010 11:01:21
aleks2

1. Идентичность баз и запроса не гарантирует идентичность планов. Планы надо ЯВНО смотреть.

Планы смотрел явно. Да, одинаковые.

aleks2

2. Уж сколько раз твердили миру: СЕРВЕРНЫЕ компоненты НЕ БЫСТРЕЕ ДЕСКТОПНЫХ. При более-менее равных типах/частотах/объемах. ОНИ только НАДЕЖНЕЕ и лучше держат нагрузку.

Если у вас сервер выполняет запрос С ОДИНАКОВЫМ планом и ОДИНАКОВОЙ статистикой IO за 600 мс, а десктоп за 300мс => у вас РАЗНЫЕ процессоры, либо по частоте, либо по типу. Например, а) Core 2 Duo сделает Пень4-Хeon, б) DDR2/3 дает некоторое преимущество над DDR1, пусть даже регистровой, в) серверная ОСЬ по-умолчанию несет БОЛЬШЕ служб, чем десктопная и, следовательно, более нагружена, вплоть до того что SQL-серверу просто достается меньше ОЗУ и может начаться чтение диска.

Core 2 Duo быстрее, чем на Хeon, и даже Pentium Dual Core быстрее. То есть, на Core 2 Duo выполняется за точно то же время, что и на Pentium Dual Core. А на Хeon в два раза медленнее.

aleks2

3. Диск играет рояль только если запрос обрабатывает данные, НЕ ПОМЕЩАЮЩИЕСЯ в ОЗУ. На чтение RAID 1 не хуже и не лучше одиночного диска или ЛУЧШЕ, ТОЛЬКО ЕСЛИ КОНТРОЛЛЕР ПОДДЕРЖИВАЕТ ЧТЕНИЕ С ЧЕРЕДОВАНИЕМ. Но опять же, ПРИБЛИЗИТЕЛЬНО сравнить быстродействие дисков можно тупо скопировав с него огромный файл на ЭТОТ ЖЕ диск.

Сиквел держит всю базу в памяти???
sheich
Дата: 17.02.2010 11:06:20
--__Александр__--

-смотрим IO
-смотрим sys.dm_os_wait_stats
-ну еще блокировки можно посмотреть.

Посмотрю...
Что есть "блокировки"?
aleks2
Дата: 17.02.2010 11:10:34
sheich
--__Александр__--

-смотрим IO
-смотрим sys.dm_os_wait_stats
-ну еще блокировки можно посмотреть.

Посмотрю...
Что есть "блокировки"?


Блокировки - есть то, на шо надо смотреть только
1. При многопользовательской работе.
2. Если длительное выполнение наблюдается спорадически, т.е. иногда долго - иногода нет.
--__Александр__--
Дата: 17.02.2010 11:11:47
sp_lock
например, какой-то апдейт, во время того, как вы делаете селект мог наложить блокировку на строку/страницу. И ваш селект просто ждет, когда закончится апдейт.

-----------------
open your mind