Mysql Ограничение размера временных таблиц - как?

young

Новичок
Клиенты иногда выполняют дурацкие запросы, приводящие к созданию гигантских временных таблиц.

Все бы ничего, но иногда они отьедают все доступное место на диске, что делает невозможным работу всего сервера mysql в целом (no space left).

Есть желание ограничить размер одной временной таблицы (скажем, 10 gb). В таком случае, даже во время "дурацкого зарпоса" остальные запросы будут успешно выполняться.

Может, есть решение?

Если нет - может есть решение средствами ОС?

Mysql 5.5.31 на Linux.
 

young

Новичок
Кхм, tmp_table_size ограничивает размер IN MEMORY temorary tables, но никак не влияет на размер временных таблиц создаваемых на диске

Про причины появления disk-based временных таблиц в курсе, спасибо

Еще варианты?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
такие запросы работают очень долго, можно по крону мониторить размер файлов временных таблиц и тупо прибивать запросы, которые их порождают
 

young

Новичок
У меня RAM-based диск на 32gb для временных таблиц, все данные лежат на SSD.

32 Gb RAM диска забиваются на 100% меньше чем за минуту. Примерно 40 секунд.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну, напиши демона чтоб мониторил раз в секунду
 

young

Новичок
Предположим, хотя данное решение кажется мне очень странным.

И как мне по имени временной SQL таблицы определить связанный с ней PID запроса?

Пример:
имя таблицы:
#sql3368_655636_0.MYI

запрос:
6641206
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
например, есть такая таблица: information_schema.GLOBAL_TEMPORARY_TABLES
в ней поля SESSION_ID, TABLE_NAME, NAME, DATA_LENGTH
я думаю, не проблема по ней отслеживать
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мне решение сильно странным не кажется, я помню как сотрудники из центральной Азии любили в запросах писать SQL_COUNT_ROWS, и на таблицах с миллионами записей нередко клали сервер, это никак ограничит не могли, только отслеживали по логам и давали по башке
 
Сверху