Старт / Стоп MySQL

8

Я ищу помощи, чтобы понять, что происходит при выполнении следующей командной строки:

root@prodn$ service mysqld stop

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

Причина, по которой я спрашиваю, заключается в следующем:

Наша база данных хранилища данных является базой данных MySQL, и за последние 4 месяца на это ушло в среднем 8,5 часов.

В прошлую среду я остановил службу mysql, а затем перезапустил ее через 30 минут. С тех пор я начинаю замечать значительное улучшение общей производительности - процессы SELECT / INSERT / UPDATE / DELETE были более эффективными. DW закончил почти на 4 часа раньше с тем же количеством строк данных

Однако, с каждым днем, 15-20 минут как-то прибавляются к времени финиша. Итак, я подозреваю, что мне, возможно, придется перезапускать сервис еженедельно.

Есть ли объяснение этому поведению? Я не знаю, какие еще вопросы актуальны, но было бы замечательно знать, что происходит после mysqldперезапуска службы.

Кто-нибудь может пролить свет на это, пожалуйста?

dat789
источник
1
попробуйте спросить на serverfault или dba.
gbjbaanb
1
Похоже, у вас есть много данных в памяти, которые фиксируются. dev.mysql.com/doc/refman/5.0/en/server-shutdown.html
ethrbunny
@ dat789, правильное место для поиска ответов уже предоставлено ethrbunny. Это первое место, где ты должен найти его.
Мригеш Радж Шреста,

Ответы:

2

Когда вы выпускаете service mysql stop, происходит гораздо больше, чем просто отключение БД. Ссылка в комментарии от @ethrbunny уже объясняет, что происходит.

Я хотел бы сосредоточиться на одном конкретном аспекте: буферный пул InnoDB. InnoDB должен очищать грязные страницы InnoDB Buffer Pool. Если вы хотите узнать сколько, запустите это до выключения:

SELECT CONCAT(dpbytes/power(1024,expo),' ',SUBSTR(units,expo*2+1,2)) DirtyPages FROM
(SELECT dpbytes,FLOOR(LOG(dpbytes)/LOG(1024)) expo FROM
(SELECT dirty_pages*page_size dpbytes FROM
(SELECT VARIABLE_VALUE dirty_pages FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_buffer_pool_pages_dirty') AAA,
(SELECT VARIABLE_VALUE page_size FROM information_schema.global_status
WHERE VARIABLE_NAME='Innodb_page_size') BBB) AA) A,(SELECT ' BKBMBGBTB' units) B;

Это скажет вам, сколько данных необходимо сбросить из пула буферов InnoDB.

Помните, что InnoDB имеет много движущихся частей в системном табличном пространстве (файле ibdata1). Нажмите здесь, чтобы увидеть графическое представление всей инфраструктуры InnoDB .

Некоторая информация о транзакциях написана таким образом, что Crash Recovery выполняется при запуске service mysql start.

НЕОБЯЗАТЕЛЬНЫЙ

Запустив эту команду, вы можете очистить все данные и все транзакции, зафиксированные в ibdata1 и журналах транзакций ( ib_logfile0, ib_logfile1).

SET GLOBAL innodb_fast_shutdown = 0;

перед запуском

service mysql stop

Попробуйте!

ОБНОВЛЕНИЕ 2013-04-24 07:17 ПО ВОСТОЧНОМУ ВРЕМЕНИ

Поскольку в качестве основного хранилища данных используется MyISAM, единственное, что происходит, - это сброс изменений индекса во все .MYIфайлы, которые ожидают изменений.

Я также хотел бы порекомендовать, чтобы в следующий раз вы завершили работу mysqld, запустив это заранее в другой сессии:

tail -f /var/log/mysqld.log

и просмотрите проходящие сообщения и узнайте, что mysqld делает с любым механизмом хранения. Если у вас нет абсолютно никаких таблиц InnoDB, вы должны подумать об отключении InnoDB с помощью

[mysqld]
skip-innodb

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

RolandoMySQLDBA
источник
Спасибо за это. Я должен был быть более конкретным в отношении еще одного аспекта, который я не упомянул - мы используем движок MyISAM в большинстве наших таблиц. Имеет ли это какое-то значение по сравнению с InnoDB? Есть ли способ сделать то же самое без перезапуска mysqld? Если нет, это будет означать, что мне придется время от времени раздражать нашего системного администратора. Кроме того, причина довольно проста - после каждого проходящего дня с момента последнего перезапуска операции SELECT / UPDATE / INSERT, по-видимому, задерживаются на 25-40 минут. Перезапуск возвращает его к «оптимизированному» времени. Я не могу объяснить почему.
dat789
Я твердо верю, что InnoDB уже отключен. См. Извлечение: 130422 15:35:31 mysqld_safe Запуск демона mysqld с базами данных из / srv / mysqldb / mysql 130422 15:35:33 [Примечание] Плагин 'FEDERATED' отключен. 130422 15:35:33 [Примечание] Плагин «InnoDB» отключен. 130422 15:35:33 [Примечание] Планировщик событий: загружено 0 событий 130422 15:35:33 [Примечание] / usr / libexec / mysqld: готово к подключению. Версия: '5.5.17' сокет: '/srv/mysqldb/mysql/mysql.sock' порт: 3306 MySQL Community Server (GPL) Как мы можем затем сбросить изменения индекса для всех .MYI без перезапуска? Возможный?
дата789