mysql - падение производительности по ethernet

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-11-22 20:21:40

Собственно, сабж. Есть некий веб-ресурс, при формировании отчета он выкачивает порядка 100Мб с мускуля.
Обсуждать его сразу скажу не надо, т.к. самопал и не мой)
Мускуль и веб были на одном серваке, при этом страничка генерилась за порядка 30 секунд. Сейчас решили разнести по разным серверам мускуль и апач (второй по железу не сильно ушел от первого). И.. страничка стала генериться порядка 70 секунд.
При этом
- производительности нового мускуля хватает - идл порядка 90% при формировании отчета
- дисковая подсистема не нагружается - идл практически 100%
- сетевая подсистема дает во время формирования если все на одном сервере - порядка 3МБ/с на lo0, после того, как разнесли, порядка 1.5МБ/с на сетевой карте мускуля.
- И, самое нтересно. Если при разнесенной схеме во время формирования отчета запустить mysqldump, отчет формируется за те же 70 секунд, дамп отрабатывает довольно шустро и трафик на сетевой мускуля спокойно поднимается до 15МБ/с (сеть гигабит).
В чем прикол?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

ChihPih
ст. прапорщик
Сообщения: 566
Зарегистрирован: 2009-09-04 12:23:30
Откуда: Где-то в России...
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение ChihPih » 2012-11-22 20:32:22

в канале задержки большие?
www.info-x.org - информационный ресурс о ОС FreeBSD.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-11-22 20:51:59

Канал - сервер - коммутатор(гигабитная циска) - сервер. Коммутатор не нагружен вообще.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-11-23 9:33:48

Сам себе и отвечу. Профилирование среднестатистического запроса показало некую разницу в "sending cache result to client" у локального и удаленного подключения. С учетом того, что (как выяснилось) для негерации страницы используется порядка 200.000 запросов, разница в скорости выполнения связана, скорее всего, с разницей скорости пересылки данных. Для одного запроса она микросекунды, для 200.000 - это уже секунды.
"Волшебная" математика показывает, что при средней задержке пакета 0,16мс - 200.000 пакетов дадут примерно 30 секунд. Но это так, совпадение.
Так что вынос оправдан далеко не всегда.

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Gloft » 2012-11-30 14:42:10

Посмотрите курс лекций по БД на сайте http://www.lektorium.tv/course/?id=22894.
Буквально со второй лекции объясняется причина ваших задержек, и как их можно избежать.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-12-01 13:31:27

В двух словах объяснить можете?

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Gloft » 2012-12-01 15:48:02

Если коротко то причина в том, что сеть это всегда медленнее чем локальная обработка.
Особенно если запросов много.
Поэтому для уменьшения времени генерации страницы можно использовать следующие способы:
- минимизировать количество запросов в БД;
- по возможности хранить данные в БД в готовом виде;
- кэшировать данные везде где это возможно.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-12-01 16:35:20

Ну, это общие рекомендации по увеличению производительности. В моем же случае поможет, думается, только уменьшение кол-ва запросов.
Как итог, можно сказать, что при большом количестве запросов вынос ьускуля отдельно не всегда оправдан. Машина может иметь idle > 90%, в то время, как получение результата окажется более менедленным.

FiL
ст. лейтенант
Сообщения: 1363
Зарегистрирован: 2010-02-05 0:21:40

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение FiL » 2012-12-04 1:27:57

stored procedures должны помочь. Тогда 200.000 запросов будут выполняться локально на сервере БД, а на клиента перешлется только результат.
Но это логику переписывать надо, что далеко не всегда возможно.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-12-04 8:34:07

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

FiL
ст. лейтенант
Сообщения: 1363
Зарегистрирован: 2010-02-05 0:21:40

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение FiL » 2012-12-04 21:27:53

Al писал(а):Ну, это только уменьшит трафик в сторону сервера, передающий тело запроса. В итоге получится 200.000 вызываемых процедур.
Это почему? А загнать 200.000 запросов в одну процедуру религия не позволяет?

snorlov
подполковник
Сообщения: 3639
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение snorlov » 2012-12-04 23:55:58

Al писал(а):Ну, это только уменьшит трафик в сторону сервера, передающий тело запроса. В итоге получится 200.000 вызываемых процедур.
Ну у вас и отчет, у меня примерно 5-10 запросов и то только 1 емкий остальные так, для формирования заголовков...

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-12-05 9:10:18

FiL писал(а):
Al писал(а):Ну, это только уменьшит трафик в сторону сервера, передающий тело запроса. В итоге получится 200.000 вызываемых процедур.
Это почему? А загнать 200.000 запросов в одну процедуру религия не позволяет?
Не позволяет. Обработкой данных занимается php или что-то еще. База используется просто как справочник.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

Re: mysql - падение производительности по ethernet

Непрочитанное сообщение Al » 2012-12-05 9:11:02

snorlov писал(а):
Al писал(а):Ну, это только уменьшит трафик в сторону сервера, передающий тело запроса. В итоге получится 200.000 вызываемых процедур.
Ну у вас и отчет, у меня примерно 5-10 запросов и то только 1 емкий остальные так, для формирования заголовков...
Это самопал. При том не наш)