Ошибка «Error writing file '/dev/shm/mysql/MAvDMA7v' (Errcode: 28 - No space left on device)»

15 июня 2024
При выполнении запроса на подсчёт количества элементов, найденных в результате фильтрации по гаммам:
SELECT gamma, count(distinct iditem) as counter FROM filter_data GROUP BY gamma

возникает ошибка:
mysqli_sql_exception: Error writing file '/dev/shm/mysql/MAvDMA7v' (Errcode: 28 - No space left on device) in /var/www/spuser/data/www/...

Это происходит из-за того, что для выполнения подсчётов, требуемых запросом, нужно больше памяти, чем располагает хранилище /dev/shm (область в оперативной памяти вида Tmpfs, подробнее https://ru.wikipedia.org/wiki/Tmpfs). Таблица filter_data содержит 4 млн записей. Решить проблему можно либо увеличением оперативной памяти и как следствие /dev/shm или облегчить работу запросу.

Выберем второй вариант. Видим, что запрос использует два поля: gamma и iditem, поэтому напрашивается добавление индекса по этим полям.

Создадим индекс, выполнив запрос:
ALTER TABLE `filter_data` ADD INDEX `gamma_iditem`(`gamma`, `iditem`)

После пробуем снова выполнить проблемный запрос.
Вуаля! Ошибка ушла и теперь всё проходит нормально