2016-12-23 3 views
1

У нас есть один узел MemSQL Community Edition работает в производстве, хотя MemSQL один узел не рекомендуется для использования в производстве, мы начали, как РОС и развернутое то же самое Prodвосстановления базы данных MemSQL

Сегодня мы столкнулись в следующую проблему,

(stderr) ERROR 1720 (HY000) в строке 3: Ошибка листа (10.0.0.28:3307): Использование памяти MemSQL для таблиц (26255 МБ) достигло значения глобальной переменной 'maximum_table_memory' (26064 МБ). Этот запрос не может быть выполнен.

И мы попытались удалить некоторые данные, и мы не смогли этого сделать из-за приведенного ниже исключения. Код ошибки: 1712. Ошибка листа (10.0.0.28:3307): Недостаточно памяти для завершения текущего запроса. Запрос не обрабатывался. 46.836 сек.

Затем мы удвоили ОЗУ на машине и перезапустили memsql, но лист не взял дополнительную память, а затем я изменил настройку памяти в memsql.cnf (/ var/lib/memsql/leaf- 3307 /) и перезапустили листовой узел, а затем лист собрал дополнительную память.

Идеальная память не должна быть жестко закодированной, вместо этого она должна быть в процентах от объема памяти, доступной на машине, и после перезапуска она должна выбрать дополнительную память

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

Мы постоянно получали исключение ниже 2, и когда и когда мы можем подключить и перезапустить приложение (ETL), мы снова столкнулись с той же проблемой, мы попробовали 10 раз, и мы не знаем, что происходит, мы попробовали перезапустив memsql, мы попытались перебалансировать парирования (мы знаем, что это не работает, но все же), мы попытались восстановить базу данных, но БД находится в режиме онлайн, когда лист взял дополнительную память после того, как столкнулся с машинной конфигурацией (AWS), мы очистили (удаленные) некоторые данные из одной таблицы, поэтому мы подумали, что это может создать проблему и воссоздать таблицу, но все равно не удастся.

ОШИБКА 1731 (HY000): База данных «reports_and_summary» будет доступна для запроса через 35 секунд после восстановление с диска завершено. Запуск ВЫСТАВКАХ БАЗ РАСПРОСТРАНЕНИЯ и посетить http://docs.memsql.com/5.5/concepts/database#states для получения дополнительной информации

«Первичный ключ восстановления memsql базы данных»

Наконец, единственная вещь, которая работала есть, мы обновили версию memsql, и я думаю, что это сделал чистую установку снова и его начал работать, но что, если новая версия не доступна для обновления :)

Кто-нибудь сталкивался с подобной проблемой и что может быть причиной?

+0

Как долго продолжались ошибки восстановления? В какой версии вы были? –

+0

Я пробовал больше часа, и когда я вижу, что БД прекрасно работает с командой «SHOW DATABASE EXTENDED», я попытался перезагрузить загрузку, и БД снова перешла в состояние восстановления. В последнюю очередь я попробовал обновить приложение является критически важным и размер набора данных также не слишком велик, это всего лишь 24gigs –

ответ

2

1) Если вы не указали max_memory в файле memsql.cnf явно, то MemSQL установит max_memory на 90% физической памяти на вашем компьютере и максимум_table_memory на 80% физической памяти вашего компьютера. См. http://docs.memsql.com/docs/memory-management для более подробной информации. Таким образом, если вы добавите больше памяти и перезапустите MemSQL, она подберет и использует новую память, если она не ограничена параметром maximum_memory в вашем .cnf-файле.

2) MemSQL необходимо использовать память для запуска запросов DELETE (его база данных с несколькими версиями - запросы DELETE не удаляются физически сразу, они отмечают их как удаленные. Когда DELETE фиксирует строки, удаляется и память освобождается, если ни один другой запрос не использует строки). Если вы нажмете ошибку вне памяти, на которой выполняется удаление, самый простой выход - удалить меньшее количество строк в одной инструкции удаления (т.е.e, положите LIMIT 10000 на удаление и запустите несколько DELETE вместо одного большого удаления, которое потребует большего количества доступной памяти). Если вы удаляете все данные из таблицы, тогда TRUNCATE TABLE использует гораздо меньше памяти, чем DELETE. Вы также можете запустить SET GLOBAL maximum_memory и настроить maximum_memory на более высокое значение, но это не рекомендуется.

3) Если вы нажмете на ошибку «восстановление базы данных», потому что MemSQL не завершил перезагрузку всех данных с диска в память после перезапуска. Если вы дождитесь окончания процесса восстановления, данные будут запрошены. MemSQL - это база данных с оптимизированной памятью, поэтому все данные должны быть в памяти, прежде чем она позволит запускать запросы. Если у вас есть корпоративная версия MemSQL, вы можете работать с резервированием 2, и вам не придется ждать восстановления (там будет другая копия данных, уже сохраненных в памяти на другом листовом узле).

+0

Согласитесь как с 1, так и с 2 Но в отношении пункта 3 ошибка, которую мы получали, была ниже, я контролировал статус восстановления, используя SHOW DATABASES EXTENDED, и когда я больше не вижу сообщение о том, что он восстанавливается, тогда я использовал загрузку БД и снова, когда БД выбрасывала ту же самую ошибку ниже, что она восстанавливалась, я пробовал это 10 раз и не мог найти любым способом доведение БД до нормального состояния. «База данных« reports_and_summary »будет доступна для запроса через 35 секунд после завершения восстановления с диска. Запустите SHOW DATABASES EXTENDED« –

+0

Либо MemSQL точно не показывает время восстановления, либо делает что-то неправильно, не уверен? Есть ли какой-либо другой способ, я могу проверить, восстанавливается ли БД или нет, кроме использования команды «SHOW DATABASES EXTENDED», , потому что это произошло и в прошлом, где мы боролись в течение нескольких часов, а затем решили о восстановлении базы данных –

+0

Любые идеи по этому вопросу? –

Смежные вопросы