Нагрузочное тестирование

Место для обсуждения любых вопросов, которые интересны программистам и администраторам, преподавателям и студентам, абитуриентам и школьникам ...

Модератор: Vladislav_133

Нагрузочное тестирование

Сообщение Solveig 25 авг 2010, 10:14

Хотелось бы поподробнее узнать о нагрузочном тестировании.
Сталкивался ли кто-нибудь с этим на практике, какие утилиты использовали, что тестировали, как интерпретировать результаты и так далее.
Конкретно интересует тестирование MS SQL сервера, но не лишним будет узнать и о web серверах, отдельно тестировании канала связи клиент-сервер и прочих частностях.
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение Solveig 07 сен 2010, 09:28

Неужели совсем никто с этим не сталкивался???
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение xdsl 07 сен 2010, 14:39

Немногие с этим сталкиваются в практической деятельности. Должны быть серьезные причины, в звонких монетках за каждый отказ системы, чтобы заниматься таким тестированием. Методики индивидуальны для каждого набора ПО+железо, как и получаемые результаты. И Вам, как я понял, нужны не общие понятия (напр. http://www.protesting.ru/automation/performance.html), а голая конкретика.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Нагрузочное тестирование

Сообщение Solveig 07 сен 2010, 16:31

Ну да, хотелось бы по возможности конкретные примеры.
Сделали запрос в головной офис, они предложили только перестроить индексы на MS SQL (что я уже и так сделала, так как они были ужасно фрагментированы - до 80 процентов по некоторым таблицам), и замерить производительность с помощью монитора производительности и стабильности.
Обещают прислать шаблоны для трассировок SQL Profiler, подождем...
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение Solveig 07 сен 2010, 16:37

xdsl писал(а):Должны быть серьезные причины

Просто на данном этапе медленная работа пользователей очень критична - каждый месяц подключаются еще порядка сотни пользователей, на данный момент их 600, в итоге будет в общей сложности 1500. Если сейчас не разобраться с висяками базы - потом вообще будет невозможно работать.
На момент первого поста работа пользователей была практически парализована - сервер SQL нагружался на 92-97 процентов, доступ к базе шел минуты по 3 (база по объему гигов около 90).
Было произведено обновление с MS SQL Server 2008 до 2008 R2, нагрузка резко спала - теперь около 40 процентов.
С чем были связаны зависания - так никто и не понял, разбираемся сейчас, что делать, чтоб такое не повторялось.
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение xdsl 08 сен 2010, 07:57

База может быть хоть сто терабайт размером, дело не в этом. Она-ж не в одной таблице, как я думаю. И запросы выборку не по всей базе делают. Дело в оптимизации структуры базы и запросов в ней. Некоторые нетипичные примеры, которые у меня тормозили сервер, правда mysql:
1. Создание многочисленных временных таблиц множеством пользователей
2. Одновременные многочисленные INSERTы и SELECTы на одну таблицу или связную совокупность таблиц
3. Одновременные многочисленные INSERTы на таблицу(ы) со сложными и объемными индексами
4. Блокировки на таблицу отдельными пользователями

Из типичных примеров:
1. Недостаточное индексирование
2. Различные типы(размеры) у связных ключей (например, у ключа - int, а у ссылки на него - bigint)

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

Что-то еще посоветовать не могу, слишком мало исходной информации, схему БД не видел, логов запросов - тоже, о структуре индексов - не осведомлен.

P.S. Ах да, у Вас еще триггеры могут беспорядочно срабатывать и узкое место образовывать. Например, delete (insert) на каждой записи заставляет срабатывать триггер, который сохраняет данные удаляемой (вставляемой) записи в файл, по достижению определенного объема отправляемый по сетевому каналу связи конкурентам Вашей компании ;). Шутка, конечно, но подобные узкие места могут тормозить всю систему, ведь во время дозаписи данных к файлу он для всех остальных блокируется.

P.P.S. Еще момент - если используется масса хранимых процедур, то дело наверняка в них. Вернее, дело в вышеизложенном, но генератором тормозов являются скорее всего они, прямо или косвенно. Например, вместо того, чтобы получить одним запросом полную информацию о некой сущности, осуществив выборку из нескольких таблиц, Вы вызываете хранимую процедуру, которую кто-то в свое время писал на коленке и которая генерирует множество запросов, выбирая из результатов нужную информацию, отбрасывая лишнюю и возвращая Вам тот-же результат, что Вы-бы получили единственным запросом, но за десятикратное время и стократное задействование ресурсов сервера.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Нагрузочное тестирование

Сообщение xdsl 08 сен 2010, 08:02

Ах да, если решитесь на анализ логов, особое внимание обратите на запросы, время выполнения которых неравномерно. Например один и тот-же запрос выполняется то миллисекунду, то 10 секунд. Найдете зависимость, найдете источник проблем.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Нагрузочное тестирование

Сообщение Solveig 08 сен 2010, 11:25

Спасибо за помощь, логи уже анализируются, правда не мной.
Уже выявлено то, что Вами было сказано - тормоза с многочисленной выборкой из нескольких связных таблиц.
По поводу различных типов ключей - буду проверять, база какое-то время редактировалась не только нашими сотрудниками, но и ИТ-отделом заказчика, поэтому возможно все.
Триггеров своих у нас нет, все на хранимых процедурах. Используемые в них запросы сейчас анализируются и будут оптимизированы.

Вопрос - а почему висеть то все перестало при обновлении версии сервера? Проведенная до этого дефрагментация индексов на дала большого прироста производительности...
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение Solveig 08 сен 2010, 11:31

Кстати, сейчас файлы пока хранятся в базе в бинарном виде. С заказчиком обговаривали про возможность создания хранилища filestream, чтоб разгрузить базу, но тут идет у них сильное беспокойство за безопасность.
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение xdsl 08 сен 2010, 14:25

Solveig писал(а):Вопрос - а почему висеть то все перестало при обновлении версии сервера? Проведенная до этого дефрагментация индексов на дала большого прироста производительности...

Ну-у, например - улучшили оптимизацию запросов, изменили настройки по умолчанию, отвечающие за барьеры использования памяти и т.п. Мало-ли что ... Гадать можно долго и не всегда удачно, тем более что MSSQL - не мой профиль.

Насчет бинарников в БД - очень неудачное решение, имхо. Ладно если файлы по несколько байт или килобайт, а если мега- и гигабайтные - никаких мощностей не хватит на их обработку. Датацентры тогда Вам надо заводить.
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

Re: Нагрузочное тестирование

Сообщение Solveig 08 сен 2010, 18:36

По поводу бинарников -это решение заказчика, мы тоже настаиваем на отдельном хранилище, посмотрим как будут развиваться события.
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение Vladislav_133 10 сен 2010, 18:10

Наконец то я вышел на работу на форум. Solveig я вам письмо оправил. Но, конечно, надо смотреть больного. Кстати индексов может как нехватать, так и наоборот, они могут мешать. Но в этом надо разбираться. Нужно анализировать запросы. Почитайте еще мое письмо, может поможет.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: Нагрузочное тестирование

Сообщение Vladislav_133 10 сен 2010, 18:22

Письмо опубликую, может у кого новые мысли возникнут.

Добрый день.
Ну попробую перечислить.
1. Иногда помогает процедура сохранить-восстановить.
2. Разбить базу на несколько файлов и развести их на разные диски.
3. Развести базу и журнал транзакций - на разные диски. Обнулять журнал транзакций (но осторожно).
4. Увеличить память сервера. Заменить процессоры. В общем сделать аппартаный апгрейт.
5. Проверить, используются ли многопроцессорные возможности. Процессоров наверняка несколько или несколько ядер. Ну это в рядли. Кажется это у старых серверов было.
6. Посмотреть, какие службы еще работают на сервере. Лишнее убрать.
7. Произвести переиндексацию.
8. Возможно имеются лишние индексы или их наоборот нехватает. Тут надо запросы анализировать.

Но самое главное попытаться найти, где максимальная задержка в запросах. Но это долгая работа.
1. Оптимизация самих запросов.
2. Проверьте у хранимых процедур - они не должны каждый раз перекомпилироваться.

Ну я кратко и наверое не все. Спрашивайте, если что. Я теперь буду на форуме постоянно.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: Нагрузочное тестирование

Сообщение Solveig 13 сен 2010, 11:47

Спасибо большое за помощь. Итак, по пунктам:
Vladislav_133 писал(а):1. Иногда помогает процедура сохранить-восстановить.

Сейчас все работает нормально, на будущее запомню)
Vladislav_133 писал(а):2. Разбить базу на несколько файлов и развести их на разные диски.

Вот это можно будет сделать...А при этом не понизится скорость доступа к данным?
Vladislav_133 писал(а):3. Развести базу и журнал транзакций - на разные диски. Обнулять журнал транзакций (но осторожно).

У нас очень активный заказчик, их ИТ-отдел быстро порушил практически все логи какие велись, журнал транзакций был обнулен. Насчет разных дисков - будем обговаривать.
Vladislav_133 писал(а):4. Увеличить память сервера. Заменить процессоры. В общем сделать аппартаный апгрейт.

На сервер добавлено оперативной памяти, сейчас стоит 8ядерный процессор и 32 гигабайта оперативной памяти.
Vladislav_133 писал(а):5. Проверить, используются ли многопроцессорные возможности. Процессоров наверняка несколько или несколько ядер. Ну это в рядли. Кажется это у старых серверов было.

Используются)
Vladislav_133 писал(а):6. Посмотреть, какие службы еще работают на сервере. Лишнее убрать.

Как уже говорила, ИТ-отдел заказчика поотключал все что можно и нельзя. Учитывая последствия, теперь хотят поднимать зеркалирование базы)))
Vladislav_133 писал(а):7. Произвести переиндексацию.

Проведена
Vladislav_133 писал(а):8. Возможно имеются лишние индексы или их наоборот нехватает. Тут надо запросы анализировать.

На данный момент ведется анализ.
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение Vladislav_133 13 сен 2010, 12:32

Что касается разбиение базы на несколько файлов и разведение их на разные диски (физические). Эта процедура в принципе наоборот повышает производительность, ведь обработка ведется разными контролерами.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: Нагрузочное тестирование

Сообщение Solveig 14 сен 2010, 09:33

Ну тогда будем пробовать))
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение alekam 20 сен 2010, 12:04

Про нагрузочное тестирование в контексте вас веб-приложений. Самый известный инструмент - ab http://httpd.apache.org/docs/2.0/programs/ab.html
У Microsoft для нагрузочного тестирования есть Microsoft Web Application Stress Tool и WCat из IIS Resource Kit.

Однако, такие тесты оторваны от реальности. Пользователи одновременно выполняют разные последовательности действий и отправляют разные данные. С помощью таких тестов можно определить только предел нагрузки конкретной части системы (раздел сайта или конкретная страница).
alekam
 
Сообщения: 46
Зарегистрирован: 23 дек 2008, 14:36
Полное имя: A.K.

Re: Нагрузочное тестирование

Сообщение Solveig 22 сен 2010, 11:13

Про ab довольно много слышала, еще есть Autohotkey, который позволяет создать сценарий нажатия определенных кнопок внутри приложения
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна

Re: Нагрузочное тестирование

Сообщение alekam 22 сен 2010, 11:40

для выполнения сценариев можно использовать selenium, twill, webtest и т.п. python фрэймворки, но они предназначены для функционального тестирования, а не нагрузочного

если вас интересует производительность БД MS SQL, то у MS есть специальные утилиты для ее оптимизации. ключевые слова "ms sql perfomance"
alekam
 
Сообщения: 46
Зарегистрирован: 23 дек 2008, 14:36
Полное имя: A.K.

Re: Нагрузочное тестирование

Сообщение Solveig 22 сен 2010, 13:05

Спасибо! ;)
Solveig
Elite
 
Сообщения: 93
Зарегистрирован: 16 янв 2009, 01:36
Полное имя: Зыкова Любовь Ивановна


Вернуться в Обмен мнениями

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2