Мое приложение очень интенсивно использует базу данных. В настоящее время я использую MySQL 5.5.19 и использую MyISAM, но я нахожусь в процессе перехода на InnoDB. Единственная проблема - это проверка контрольной суммы.
Мое приложение выполняет около 500-1000 CHECKSUM TABLE
операторов в секунду в пиковое время, потому что клиентский графический интерфейс постоянно опрашивает базу данных на предмет изменений (это система мониторинга, поэтому она должна быть очень отзывчивой и быстрой).
С MyISAM существуют текущие контрольные суммы, которые предварительно рассчитываются при модификации таблицы и являются ОЧЕНЬ быстрыми. Однако в InnoDB такого нет. Итак, CHECKSUM TABLE
ОЧЕНЬ медленно.
Я надеялся, что смогу проверить время последнего обновления таблицы. К сожалению, это также недоступно в InnoDB. Я застрял сейчас, потому что тесты показали, что производительность приложения резко падает.
Просто слишком много строк кода, которые обновляют таблицы, поэтому о реализации логики в приложении для регистрации изменений таблиц не может быть и речи.
Есть ли быстрый метод для обнаружения изменений в таблицах InnoDB?
источник
Я думаю, что нашел решение. Некоторое время я смотрел на Percona Server, чтобы заменить мои MySQL-серверы, и теперь я думаю, что есть веская причина для этого.
Сервер Percona представляет много новых таблиц INFORMATION_SCHEMA, таких как INNODB_TABLE_STATS, которые недоступны на стандартном сервере MySQL. Когда вы делаете:
Вы получаете фактическое количество строк и счетчик. В официальной документации об этом поле сказано следующее:
Таким образом, этот счетчик оборачивается время от времени, но вы можете сделать контрольную сумму количества строк и счетчика, а затем при каждой модификации таблицы вы получите уникальную контрольную сумму. Например:
В любом случае я собирался обновить мои серверы до сервера Percona, так что это не проблема для меня. Управление сотнями триггеров и добавление полей в таблицы является основной проблемой для этого приложения, поскольку оно очень поздно в разработке.
Это функция PHP, которую я придумал, чтобы убедиться, что таблицы могут быть проверены на сумме независимо от того, какой движок и сервер используются:
Вы можете использовать это так:
Я надеюсь, что это спасет некоторых людей от подобных проблем.
источник
Вы должны обновить до Mysql v5.6 +, в этой версии innodb также имеет поддержку таблицы контрольных сумм. http://dev.mysql.com/doc/refman/5.6/en/checksum-table.html
кроме того, идеальным решением было бы, если бы ваш клиент не опрашивал результаты постоянно, а вместо этого вы отправляли новые и измененные данные, когда и если они были доступны. Это было бы быстрее и меньше нагрузки на сервер. Если вы используете веб-интерфейс, вам следует обратиться к APE http://ape-project.org/ или другим подобным проектам.
источник
Если вы в основном добавляете в таблицу, вы можете подключить AUTO_INCREMENT в качестве меры обновления.
Но я бы предпочел сослаться на исходный источник, такой как счетчик в Memcached, который вы будете увеличивать при каждом изменении чего-либо в базе данных.
источник
Вы можете попробовать сделать следующее:
Это возвращает число, которое увеличивается с каждым обновлением таблицы, отслеживая его, чтобы обнаружить изменения.
Важное примечание: значение изменяется сразу после ОБНОВЛЕНИЯ, а не после COMMIT. Таким образом, вы можете не увидеть изменения, если изменения были сделаны внутри другой транзакции, которая не была завершена.
источник
Этот ответ не имеет ничего общего с версиями или типами баз данных MySQL, я хотел знать, вносили ли изменения операторы обновления И делать это в моем php-коде ..
Создала фиктивную таблицу с одной записью и одним полем, которые я бы запросил, чтобы получить значение mysql current_timestamp.
В обновляемую таблицу данных добавили поле временной метки и использовали опцию mysql «ON UPDATE CURRENT_TIMESTAMP»
По сравнению № 1 и № 2
Это не будет работать 100% времени, но для моего приложения это было простое и отличное решение. Надеюсь, это кому-нибудь поможет
источник