MySQL5.6 против Percona 5.7 проблема неявного преобразования

Недавно мы начали тестировать обновление с MySQL5.6 до Percona Server 5.7 и использование таблиц tokuDB. База данных обслуживает наше приложение PHP 5.5, которое использует библиотеку PDO для параметризованных запросов.

Загрузив percona с идентичными данными в таблицу tokudb и сравнив производительность с существующим производством, мы сразу заметили огромное снижение производительности (в 10 раз медленнее). Для запросов ниже предположим, что таблица имеет 12 миллионов строк

Я смог сузить эту проблему в базе данных 5.7 до того факта, что при выполнении запроса, такого как:

SELECT * FROM TABLE WHERE id='12345'; -- exec time 10.5sec
vs.
SELECT * FROM TABLE WHERE id=12345; -- exec time 1.3sec

где id имеет тип столбца целое число. Это было мое впечатление, и мое исследование, кажется, подтверждает, что mySQL должен выполнять неявное преобразование «12345» в 12345, когда сравниваемый столбец является числовым типом, однако в mySQL5.7 / Percona этого не происходит. Это происходило в MySQL5.6x

Проблема здесь в том, что при таком поведении вам нужно явно установить тип с помощью PDOStatement :: bindParam (ref http://php.net/manual/en/pdostatement.bindparam.php) для каждой переменной! Это может привести к почти глобальному переписыванию всех подготовленных операторов, которые в настоящее время передают массивы параметров в PDOStatement: execute (), которая не поддерживает явную установку типа!

Итак, мой вопрос заключается в том, изменилось ли что-то в mySQL, поэтому неявное преобразование не выполняется в 5.7, или это Percona или таблица tokuDB? Есть ли параметр конфигурации, который я могу установить, чтобы включить его снова?

1

Решение

Неясно, пытаетесь ли вы обновить и сравнить производительность 5.6 TokuDB с производительностью 5.7 TokuDB или 5.6 с InnoDB до 5.7 TokuDB. Не могли бы вы уточнить и определить конкретные варианты и версии 5.6 и 5.7?

Если TokuDB вокруг, одна возможность — неправильный выбор индекса из-за плохой / старой / нулевой статистики индекса. В 5.7 также есть много изменений по умолчанию SQL_MODE, некоторые из которых также могут влиять на поведение.

Также может быть полезно увидеть результаты ‘SHOW CREATE TABLE’ и ‘SHOW INDEXES FROM’ в экземплярах 5.6 и 5.7.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]