Буквально ни с того, ни с сего начал жутко тормозить dev-сервер Django. Странички открывались по 5-8 секунд, что было само по себе раздражительным явлением и, кроме этого, очень тормозило разработку.
После первого подхода к гуглению выяснилось, что у некоторых людей dev-сервер тормозил на отдачи статики. Лечится это, по их словам, переносом статики на какой-нибудь взрослый web-сервер. Например, на nginx или даже Apache.
Но firebug помог мне избежать пустой траты времени на настройку дополнительного web-сервера. А именно, на вкладке Net::All
было видно, что долго обрабатывается только первый GET-запрос самой странички. Последующие же запросы статики обрабатывались в один миг.
К этому моменту стало понятно, что проблема в MySQL. И это было подтверждено тем, что запрос к БД из python manage.py shell
выполнялись с той же 5-8-секундной задержкой.
Следующий найденный вопрос по этой теме имел несколько экзотичное объяснение в ответе. Оказалось, что обращение к dev-серверу через localhost может быть гораздо медленее, чем через 127.0.0.1. По слухам, это связано с тем, что браузер сначала пытается соединиться через IPv6, и только после таймаута по этой попытке делает запрос через IPv4. Насколько это правда судить вам, но у меня обращения через localhost и 127.0.0.1 абсолютно равнозначны по времени.
И, наконец, был найден ответ. Тормозило работу то, что при соединении нового клиента с mysqld
, mysqld
пробует определить домен клиента по его IP. В дальнейшем домен будет использоватся при выяснении, имеет ли право данный клиент с данного домена на те действия, которые он пытается совершить. Эту функциональность можно отключить, выйграв в скорости, но пожертвовав возможностью указывать в MySQL grant tables доменные имена.
Собственно, выбора тут нет, и, добавив строку skip-name-resolve
в конфиг MySQL (в моём случае это /etc/mysql/my.cnf
), получаем быстрый и отзывчивый dev-сервер. Автор вопроса пишет также об опции skip-locking
, но, во-первых, такой опции у MySQL 5 нет, а, во-вторых, наиболее похожая на неё опция skip-external-locking
уже была в конфиге по-умолчанию :)
Подпробнее про то, как MySQL использует DNS тут.
Образцы нормативных документов по стандартизации http://mirtesen.ru/people/266465613
ОтветитьУдалитьОбразцы действующих документов по стандартизации https://metrologu.ru/profile/104916-garina/
Шаблоны нормативных документов по сертификации https://metrologu.ru/profile/104928-tatalina/
Примеры действующих документов по стандартизации https://metrologu.ru/profile/104933-panfilova