@immelnikoff
Изучаю БД

Как убить ошибку Error Code: 1114. The table '...\#sqlc60_9_37' is full?

Имеется таблица
CREATE TABLE `test` (
   `id` bigint unsigned NOT NULL AUTO_INCREMENT,
   `sec_code` VARCHAR(255),
   `class_code` VARCHAR(255),
   `qty` int unsigned NOT NULL,
   `vol` decimal(18,9),
   `price` decimal(18,9) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Файл таблицы занимает на диске 2,3 ГБ, всего в таблице 34 174 323 записей. На диске 120 ГБ свободного места.
Так вот, при запуске след. запроса
SELECT
    sec_code,
    class_code,
    count(*) AS qty
FROM test
GROUP BY sec_code, class_code;

происходит ошибка Error Code: 1114. The table '...\#sqlc60_9_37' is full.
При этом, в соответствующей переменной лежит вроде нужное значение:
SELECT @@innodb_data_file_path;
Output: ibdata1:12M:autoextend

Подскажите как мне победить данную ошибку?
  • Вопрос задан
  • 1997 просмотров
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
alter table test add key (sec_code, class_code)
и смотреть, уйдёт ли temporary из поля Extra в EXPLAIN

И вообще - в первую очередь смотреть EXPLAIN, а не возиться с этой ерундой.
и убирать using temporary ДО того как временной таблице перестанет хватать места на диске.
Потому что у меня даже и без этой ошибки инфаркт будет, если я увижу такой запрос в продакшен коде.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы