При обновлении с версии mysql 5.1 до 5.7 при последовательном запуске запросов DDL с помощью сценария perl застревает причина "Ожидание блокировки метаданных таблицы".

У меня есть Perl-скрипт, который использует DBD::mysql и выполняет такие операции, как создание таблиц, а также выполняет вставку, обновление, изменение, удаление запросов выбора над ними. Данные загружаются сюда из XML-файла. Я здесь пытаюсь обновить с MySQL 5.1 до MySQL 5.7. И я столкнулся с проблемой, как загрузка застревает при использовании этого сценария.

Когда проверено на show processlist выход как показано ниже:

mysql> show full processlist;
+----+------+-----------+---------+---------+------+---------------------------------+----------------------------+
| Id | User | Host      | db      | Command | Time | State                           | Info                       |
+----+------+-----------+---------+---------+------+---------------------------------+----------------------------+
| 14 | test | localhost | REGRESS | Sleep   |   17 |                                 | NULL                       |
| 15 | test | localhost | REGRESS | Query   |   16 | Waiting for table metadata lock | OPTIMIZE TABLE TEST.SOURCE |
| 16 | test | localhost | NULL    | Query   |    0 | starting                        | show full processlist      |
+----+------+-----------+---------+---------+------+---------------------------------+----------------------------+

Я не сталкивался с этой проблемой при использовании MySQL 5.1.

Здесь для каждого запроса, который мы выполняем, прежде чем запрос выполняется, autocommit установлен в 0 кроме вставки и удаления, мы не выполняем коммит после выполнения запроса.

Я хотел бы знать, является ли это ошибкой в ​​последней версии MySQL, или какими-либо изменениями, которые мне нужно внести в мой код для выполнения ручной фиксации даже после select запрос запускается из другого сеанса в моем скрипте (см. комментарий: https://dev.mysql.com/doc/refman/5.7/en/metadata-locking.html).

Я попытался убить процесс, спящий от другого сеанса MySQL, и сценарий пошел дальше. Также пытался поставить commit заявления после select операторы и без процесса уничтожения все прошло нормально, но все же застрял при выполнении другой последовательности вышеупомянутых наборов запросов - я хотел бы знать, помещая операторы commit - это правильно?

Есть ли переменная или параметр, который я должен установить - что необходимо изменить при обновлении до MySQL 5.7?

Есть ли обходной путь для вышеуказанной проблемы?

Как найти Спящий поток был создан?

Есть ли способ идентифицировать живой запущенный запрос в MySQL?

Обновление вопроса: есть ли способ получить функциональность движка MyISAM DB, как в 5.1 после обновления до MySQL 5.7 с помощью сценариев perl.

Используя параметры default-storage-engine и disabled-storage-engine в my.cnf, установите его как: default-storage-engine=MyISAM disabled-storage-engine =InnoDB

Пытался загрузить данные XML в мой скрипт.

Автокоммит переменных состояния:
MySQL 5.7 - выберите @@ autocommit

mysql> select @@autocommit;  
+--------------+  
| @@autocommit |  
+--------------+  
|            1 |  
+--------------+  

Perl dbh autocommit через скрипт при подключении к БД по-прежнему не установлен как: $self->{dbh}->{AutoCommit}=0;

Проблема блокировки таблицы все еще сохраняется.

Фрагмент статуса двигателя:

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MyISAM             | DEFAULT | MyISAM storage engine                                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

Есть ли каким-либо образом я могу отключить управление транзакциями на mysql5.7? Дайте мне знать, если мне нужно установить любой другой флаг, чтобы получить вышеуказанные запрошенные функции.

Заранее спасибо.

0 ответов

Другие вопросы по тегам