Я ищу помощи, чтобы понять, что происходит при выполнении следующей командной строки:
root@prodn$ service mysqld stop
Да, он отключает сервер MySQL, поэтому доступ к нему больше недоступен, пока служба не будет запущена снова. Однако, более конкретно, происходит ли что-нибудь еще, когда служба останавливается? Простите мою новичок здесь, но когда mysqld перезапускается, означает ли это, что журналы были сброшены, некоторая память освобождена, кеши очищены и т. Д.?
Причина, по которой я спрашиваю, заключается в следующем:
Наша база данных хранилища данных является базой данных MySQL, и за последние 4 месяца на это ушло в среднем 8,5 часов.
В прошлую среду я остановил службу mysql, а затем перезапустил ее через 30 минут. С тех пор я начинаю замечать значительное улучшение общей производительности - процессы SELECT / INSERT / UPDATE / DELETE были более эффективными. DW закончил почти на 4 часа раньше с тем же количеством строк данных
Однако, с каждым днем, 15-20 минут как-то прибавляются к времени финиша. Итак, я подозреваю, что мне, возможно, придется перезапускать сервис еженедельно.
Есть ли объяснение этому поведению? Я не знаю, какие еще вопросы актуальны, но было бы замечательно знать, что происходит после mysqld
перезапуска службы.
Кто-нибудь может пролить свет на это, пожалуйста?
источник
Ответы:
Когда вы выпускаете
service mysql stop
, происходит гораздо больше, чем просто отключение БД. Ссылка в комментарии от @ethrbunny уже объясняет, что происходит.Я хотел бы сосредоточиться на одном конкретном аспекте: буферный пул InnoDB. InnoDB должен очищать грязные страницы InnoDB Buffer Pool. Если вы хотите узнать сколько, запустите это до выключения:
Это скажет вам, сколько данных необходимо сбросить из пула буферов InnoDB.
Помните, что InnoDB имеет много движущихся частей в системном табличном пространстве (файле
ibdata1
). Нажмите здесь, чтобы увидеть графическое представление всей инфраструктуры InnoDB .Некоторая информация о транзакциях написана таким образом, что Crash Recovery выполняется при запуске
service mysql start
.НЕОБЯЗАТЕЛЬНЫЙ
Запустив эту команду, вы можете очистить все данные и все транзакции, зафиксированные в ibdata1 и журналах транзакций (
ib_logfile0
,ib_logfile1
).перед запуском
Попробуйте!
ОБНОВЛЕНИЕ 2013-04-24 07:17 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Поскольку в качестве основного хранилища данных используется MyISAM, единственное, что происходит, - это сброс изменений индекса во все
.MYI
файлы, которые ожидают изменений.Я также хотел бы порекомендовать, чтобы в следующий раз вы завершили работу mysqld, запустив это заранее в другой сессии:
и просмотрите проходящие сообщения и узнайте, что mysqld делает с любым механизмом хранения. Если у вас нет абсолютно никаких таблиц InnoDB, вы должны подумать об отключении InnoDB с помощью
поскольку это сделает для более быстрого запуска и, возможно, более быстрого выключения.
источник