mariadb 10.3.13 проблемы с table_open_cache

#mariadb

#mariadb

Вопрос:

Только что обновил mysql 5.6 до mariadb 10.3.13 — теперь, когда сервер нажимает open_tables = 2000, мои php-запросы перестают работать — если я выполняю сброс таблиц, он снова начинает работать корректно. Этого никогда не случалось, когда я использовал mysql — теперь я не могу прожить и дня без входа в систему и выполнения очистки таблиц, чтобы все снова заработало

Я использую WHM / Cpanel для администрирования моего VPS, и в последнем выпуске WHM он начал предупреждать меня, что версия MySQL (на самом деле не помню, какая это была версия — она была загружена, когда я получил свой VPS), которую я запускал, скоро подходит к концу, и мне нужно будет обновиться до SQL 5.7 или MariaDB xxx. В любом случае, я уже некоторое время хотел перейти на MariaDB, что я и сделал — WHM рекомендовала версию 10.3.13.

После еще нескольких просмотров выясняется, что то, что заставляет мои open_tables достигать максимума в 2000, — это автоматические процедуры резервного копирования CPANEL, которые также создают резервные копии всех моих баз данных за один раз. Ничего не приводит к сбою, просто вызывает проблемы с подключениями моего приложения PHP — я не думаю, что соединения отклоняются — они просто не возвращают никаких данных…. Отключил все автоматические резервные копии WHM / CPANEL, и все немного успокоилось.

table_definition_cache 400 table_open_cache 2000

Я все еще делаю mysqldump через cron для создания резервных копий моей базы данных — только две действующие базы данных, и они по-прежнему увеличивают tables_open до 2000 max — просто не так быстро.

Теперь я запускаю скрипт, который запускается каждый час, чтобы показать мне некоторые переменные, и вот что я вижу

после выполнения команды flush tables оба open_tables и open_table_definitions начинают увеличиваться, пока open_table_definitions не достигнет 400, он перестает увеличиваться, в то время как open_tables продолжает увеличиваться в течение дня.

затем, когда рано утром происходят mysqldumps, tables_open достигает 2000 (максимальное значение), и мои php-запросы не выполняются

Я не получаю ошибку PHP.

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

УСТАНОВИТЕ ГЛОБАЛЬНЫЙ general_log = ‘ВКЛЮЧЕНО’

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

Я сделал то же самое, когда он начал барахлить (т. Е. мое php-приложение снова не начало получать результат)

Просматривая журнал, я вижу, что мое приложение подключается, затем готовит инструкцию, а затем вместо того, чтобы видеть, как оно выполняет инструкцию, оно подготавливает ту же инструкцию еще 2 раза, а затем отключается…

Я вошел в mysql и выполнил команду flush tables, и все возвращается в нормальное русло — приложение подключается, подготавливает инструкцию, выполняет ее, отключается…

Но этого никогда не случалось до того, как я перешел на MariaDB — я вообще никогда не вмешивался в работу сервера MySQL — единственный раз, когда MySQL был перезапущен, это когда я обновлял систему CENTOS 6 и должен был перезагрузить сервер — мог месяцами ничего не делать на сервере….

Комментарии:

1. Странно. table_open_cache это кэш. MySQL / MariaDB не «перестает работать», если превышен лимит. Пожалуйста, предоставьте больше информации. Что вы делали, когда он «перестал работать»? Какие движки вы используете?

Ответ №1:

Похоже, виновата система — я изменил open_table_cache на 400, и у моего php-приложения больше не возникает проблем с подготовкой инструкций, даже после еженощных резервных копий баз данных. Просматривая более старую документацию mysql, в mysql 5.6.7 значение table_open_cache было равно 400, поэтому, когда я обновился до mariadb 10.3.13, это значение по умолчанию было изменено на 2000, и тогда у меня начались проблемы.

Не совсем уверен, о чем мне говорит следующее, но может представлять интерес….

su — mysql

-bash-4.1$ ограничение -Hn 100 -bash-4.1$ ограничение -Sn 100 -bash-4.1$ выход из системы [~]# ограничение -Hn 4096 [~]# ограничение -Sn 4096