Сражение с медленными HDD на сервере
Написал Blogger team Опубликовано 31 мар, 2018

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

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

Все началось с того что долгое время я работал на диска 10000 Об/мин, это серверные диски, они прекрасно работали 4 года, в рамках своих проектов я просто не знал проблем. И вот... начался новый проект - Документооборот. Он должен был заменить несколько старых систем, и на их место на старом сервер (виртуальная машина)  его и собирались установить. Там стояли диски около 7200 Об/мин, но так как речь идет о виртуальной машине - скорость конечно меньше. Все предполагалось поставить на один сервер Apache+php+mysql+(несколько exe-шников для обработки документов).


В целом, по началу сервер с новой ОС Windows Server 2012 работал весьма шустро. И ни что не предвещало проблем. Итак, Док-оборот был запущен в тестирование (примерно на 300 человек). И вот Проблема номер РАЗ - если каждое обращение писать в таблицу InnoDB, то в какой-то момент возникает затык -  дедлоки или просто кучи запросов ждут очереди (все перепробовал, в том числе и MyISAM - результатов 0!!! Использовать NoSql решения помимо основной СУБД не хотел, чтобы не усложнять систему). В результате все виснет. Ну хорошо, отказался от регистрации каждого запроса и просто стал писать последний запрос каждого пользователя в таблицу типа MEMORY... идем дальше.  Так же выкрутил на максимум все что можно в mysql:


query_cache_type = 1

query_cache_size = 256M

innodb_buffer_pool_size = 1000M

innodb_flush_log_at_trx_commit=2              /* значение 0 тоже ставил, но это ничего не дало */

transaction-isolation = READ-COMMITTED

innodb_doublewrite = 0


И даже здесь сюрприз с параметром   innodb_io_capacity. Оказалось, что по-умолчанию он равен 200 операций в секунду, что соответствует диску  примерно в 7200 Об/Мин, но в моем случае скорость меньше. Пришлось его поставить на 100 операций!


    innodb_io_capacity = 100


Вроде устаканилось наконец-то. 

Теперь пользователей уже больше, работа интенсивней - и вдруг опять полное замирание сервера, а в логах дедлоков нет. Вопрос? На какой-то момент даже подумал на windows-protect, но это было не так. Оказалось, теперь проблема в СВОПЕ!)) В пики работы сервер начинает писать в СВОП и все замирает опять. Вопрос был решен добавлением RAM до 8ГБ и добавлением ядер процессора, теперь их 4. Так же ограничил пул одновременных запросов на Apache до 250.

 

ThreadsPerChild        250

MaxConnectionsPerChild   300000


Сейчас все работает шикарно - НО!!!! Если бы диски были 10000 Об/мин - этих вопрос просто бы не было, как и было в предыдущих проектах.

Мораль - медленные диски - это головная боль, не стоит на этом экономить.

Естественно, что лучший вариант - это SSD, но в моем случае это было бы слишком шикарно... для хранения документов. А вот диска 10000 Об/мин были бы в самый раз.


Ссылки к публикации
Комментарии 0
защитный код
Блог вопросов и решений
Вопросы и решения всегда лежат прямо под ногами или летают над головой. Их надо ловить!
Последние посты
Популярное