Mysql: что делать, когда таблицы памяти достигают max_heap_table_size?

Я использую таблицу памяти mysql как способ кэширования строк данных, которые читаются несколько раз. Я выбрал эту альтернативу, потому что я не могу использовать xcache или memcache в своем решении. Прочитав руководство по MySQL и форум по этой теме, я пришел к выводу, что будет возникать ошибка, когда таблица достигнет своего максимального объема памяти. Я хочу знать, есть ли способ отловить эту ошибку, чтобы обрезать таблицу и освободить память. Я не хочу поднимать предел памяти, который можно использовать, мне нужен способ автоматического освобождения памяти, чтобы таблица могла продолжать работать.

Благодарю.

2 ответа

Решение

Если у вас недостаточно памяти, двигатель выдаст ошибку 1114 со следующим сообщением об ошибке:

The table 'table_name' is full

Вы должны отловить эту ошибку на стороне клиента и удалить некоторые данные из таблицы.

Вместо этого вы должны использовать обычные постоянные таблицы и полагаться на встроенное кэширование. Для таблиц, в которых содержимое можно безопасно выбросить, MyISAM является безопасным механизмом (при условии, что вы готовы выполнять TRUNCATE TABLE при каждой загрузке), или же вы можете использовать тот же механизм, что и ваши постоянные таблицы (например, InnoDB).

Таблицы памяти в любом случае чрезвычайно плохие (во всех выпущенных версиях MySQL; лучше в Drizzle и некоторых других), потому что они дополняют строки до максимальной длины, а это означает, что вы не можете реально начать добавлять в них VARCHAR.

К сожалению, вы пока не можете установить параметр долговечности innodb для каждой таблицы (или для каждой транзакции), поэтому вы должны решить для каждого сервера, насколько вам нужна долговечность - в вашем случае нет, поэтому вы можете установить innodb_flush_log_at_trx_commit до 2 (или даже 0, но это приносит вам мало)

Другие вопросы по тегам