MySQL Ошибка 1032 «Не могу найти запись в таблице» - PullRequest
1 голос
/ 28 марта 2019

Я задал этот вопрос вчера на dba.stackexchange.com и не получил никаких ответов, поэтому я пытаюсь здесь.

Яполучение MySQL 1032 «Не удается найти запись в« лице »» для некоторых запросов в моей базе данных, и я не могу их устранить.

Вот таблица:

CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `first_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `dob` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `person_full_idx` (`last_name`,`first_name`,`title`)
) ENGINE=InnoDB AUTO_INCREMENT=4448 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Запрос, которыйсбой равен

SELECT * FROM person p0_
WHERE MATCH (p0_.last_name , p0_.first_name , p0_.title) AGAINST ('anne' IN BOOLEAN MODE) > 0.5
ORDER BY p0_.last_name ASC, p0_.first_name ASC, p0_.dob ASC;

Если я уберу какой-либо из пунктов по предложениям, запрос выполняется просто отлично.И если я поменяю anne на anna, запрос выполняется нормально со всеми тремя предложениями order by.В таблице есть несколько Annes, примерно столько же, сколько Annas.

В журнале ошибок MySQL есть куча таких сообщений об ошибках при каждом сбое запроса:

2019-03-27T17:31:27.891405Z 9 [Warning] [MY-012853] [InnoDB] Using a
partial-field key prefix in search, index `FTS_DOC_ID_INDEX` of table 
`database`.`person`. Last data field length 8 bytes, key ptr now 
exceeds key end by 4 bytes. Key value in the MySQL format:
len 4; hex 05110000; asc     ;

I 'Я не использую репликацию, и вставки, обновления и удаления все успешно для записей anne.Я удалил и пересоздал полнотекстовый индекс без улучшений.Я сбросил и перезагрузил базу данных и получил ту же ошибку.

Запрос не вызывает сбоев в работе (mysql Ver 15.1 Distrib 10.1.37-MariaDB) с теми же данными.Насколько я могу судить, это происходит только на моем компьютере разработчика (mysql Ver 8.0.15 для osx10.14 на x86_64 (Homebrew)).

Что мне попробовать дальше?

1 Ответ

1 голос
/ 28 марта 2019

Как отмечено в комментарии выше, это известная ошибка в MySQL 8.0: https://bugs.mysql.com/bug.php?id=93241

Временное решение - увеличить размер sort_buffer_size.По умолчанию размер sort_buffer в MySQL 8.0 равен 256 КБ, а максимальное значение, которое вы можете настроить, составляет 2 ^ 32-1 или 2 ^ 64-1.

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

Я бы предостерег от очень большого увеличения sort_buffer_size, поскольку каждый поток, выполняющий этот запрос, выделяет свой собственный буфер сортировки.

Предположим, вы увеличили sort_buffer_size до 1 ГБ, а затем 100 одновременно работающих клиентов одновременно выполняют полнотекстовый поиск!Вы можете случайно заставить MySQL превысить вашу общую системную память, и вы не будете предупреждены, когда это произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...