Mysql: что делать, когда таблицы памяти достигают max_heap_table_size? - PullRequest
1 голос
/ 25 января 2011

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

Спасибо.

Ответы [ 2 ]

5 голосов
/ 25 января 2011

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

The table 'table_name' is full

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

1 голос
/ 25 января 2011

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

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

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

...