Как я могу определить, когда таблица InnoDB была в последний раз изменена?

Я имел успех в прошлом хранении (в большой степени) обработанных результатов запроса базы данных в memcached, с помощью времени последнего обновления базовых таблиц (таблиц) как часть ключа кэша. Для таблиц MyISAM то прошлое измененное время доступно в SHOW TABLE STATUS. К сожалению, это является обычно ПУСТЫМ для таблиц InnoDB.

В MySQL 4.1, ctime для InnoDB в SHOW TABLE STATUS строка обычно была своим фактическим временем последнего обновления, но это, кажется, не верно для MySQL 5.1.

В таблице существует поле DATETIME, но это только показывает, когда строка была изменена - это не может показать время удаления строки, которая это не там больше! Так, я действительно не могу использовать MAX(update_time).

Вот действительно хитрая часть. У меня есть много копий, от которых я делаю чтения. Я могу выяснить состояние таблицы, которая не полагается, когда изменения были на самом деле применены?

Мое заключение после работы над этим некоторое время состоит в том, что не будет возможным получить эту информацию так же дешево, как я хотел бы. Я, вероятно, иду в данные кэша до времени, когда я ожидаю, что таблица изменится (это обновляется один раз в день), и освободите справку кэша запроса, где это может.

11
задан David M 7 May 2010 в 00:25
поделиться

1 ответ

Это MySQL bug 14374, 15438, и лежащая в основе InnoDB bug 2681.

У меня есть два предложения (кроме исправления MySQL).

  1. Если вы используете одну таблицу на файл (innodb_file_per_table), статтестируйте базовый файл. Для этого можно написать функцию/расширение MySQL. Это может немного отставать из-за кэширования базы данных.
  2. Вы можете использовать триггеры после обновления, удаления и вставки для хранения собственной таблицы метаданных с временем последнего обновления для каждой таблицы, которая вас интересует.

Я бы лично предложил второй вариант, так как он гораздо более переносимый и не зависит от деталей реализации (таких как innodb_file_per_table).

11
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: