Как освободить место для удаленной базы данных в MemSql

Я новичок в MemSQL. Я создал базу данных и таблицы в MemSQL в кластере с 5 листовыми узлами и 2 узлами-агрегаторами. Spark работает в том же кластере. Все в режиме по умолчанию. Вставил данные и удалил то же самое. select * ничего не возвращает. Но когда я увидел интерфейс веб-кластера, каждый конечный узел по-прежнему потреблял около 6 ТБ дискового пространства.

введите здесь описание изображения введите здесь описание изображения В описании Емкость диска говорится: "Это объем дискового пространства, используемого MemSQL, по отношению к общему объему диска. доступное пространство. Когда оно заполнено, невозможно создать моментальный снимок, журналы транзакций или данные columnstore».

С этим описанием я предполагаю, что дисковое пространство выше 6 ТБ связано с использованием MemSQL.

Можете ли вы уточнить

  1. Записывает ли MemSQL по умолчанию данные на диск?
  2. Не удаляются ли данные, записанные на диск, даже после удаления содержимого и удаления таблицы?
  3. Как освободить место на диске, занимаемое MemSQL? Какой каталог мне нужно удалить? Я выяснил, что в каталоге «/var/lib/memsql/leaf-3306» есть все артефакты memsql для этого листового узла.

person Kishor Bachhav    schedule 18.09.2015    source источник
comment
вы забыли указать URL-адрес на втором скриншоте :)   -  person Joseph Victor    schedule 18.09.2015
comment
здесь я нацарапал URL. :)   -  person Kishor Bachhav    schedule 21.09.2015
comment
Хотя я удалил базу данных, в разделе «Показать базы данных» ниже отображаются базы данных information_schema, memsql, sharding. Я их не создавал. Никто не имеет доступа к этому кластеру. Мне их тоже бросить?   -  person Kishor Bachhav    schedule 21.09.2015


Ответы (3)


Использование 6 ТБ может быть связано с MemSQL, Spark или каким-либо другим процессом. Операции MemSQL сообщают об общем использовании диска, а не о диске, используемом MemSQL (подсказка немного вводит в заблуждение).

1) Таблицы Rowstore (таблицы БЕЗ индекса CLUSTERD COLUMNSTORE) записывают журналы на диск при каждой записи. Журналы объединяются в моментальные снимки, когда журналы становятся слишком большими, и по умолчанию мы сохраняем два последних файла моментальных снимков. Таким образом, возможно, что более старый из двух снимков содержит данные, которые вы удалили. Вы можете запустить новый снимок с помощью SNAPSHOT <dbName>, и это позволит GC очистить старые (возможно, большие).

2) Снимки и журналы относятся к базе данных, а не к таблице. Удаление таблицы не приведет к очистке снимка/журнала, но удаление базы данных или создание нового снимка произойдет.

3) Вам, вероятно, не следует удалять каталоги данных вручную. DROP DATABASE <db_name> удалит все данные, связанные с этой базой данных.

Для таблиц columnstore история немного отличается, но я предполагаю, что «Все по умолчанию» означает отсутствие таблиц columnstore.

person Joseph Victor    schedule 18.09.2015
comment
Операции MemSQL сообщают об общем использовании диска, а не о диске, используемом MemSQL, тогда я чувствую облегчение. Позвольте мне проверить, не используется ли место на диске кем-то еще - person Kishor Bachhav; 21.09.2015
comment
Получив разъяснения по вводящему в заблуждение описанию емкости диска, я удалил другие файлы на своем диске и освободил место на диске. - person Kishor Bachhav; 21.09.2015

Вы удалили базу данных (как в DROP DATABASE db) или удалили все данные (как в DELETE FROM t или TRUNCATE TABLE t)?

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

Если последнее, то это имеет смысл. MemSQL использует журналы транзакций и моментальные снимки для обеспечения надежности. В этом конкретном случае, когда вы вставляете X объем данных, а затем удаляете X объем данных, журнал транзакций будет иметь длину 2X на диске, чтобы при восстановлении он мог воспроизвести все вставки и все удаления. Чтобы уменьшить его, MemSQL иногда делает моментальные снимки (некоторые другие механизмы баз данных называют их контрольными точками). Обычно это происходит, когда логи достигают определенного размера, который в вашем случае, видимо, еще не достигнут. Если вы хотите освободить место на диске, вы можете вручную запустить моментальный снимок, запустить SNAPSHOT db на агрегаторе (db — это имя вашей базы данных), и это должно помочь.

person Ishamael    schedule 19.09.2015
comment
Я удалил базу данных, но это не уменьшило дисковое пространство. show databases показывает ниже базы данных «information_schema», «memsql», «sharding». Я их не создавал. Никто не имеет доступа к этому кластеру. Мне их тоже бросить? - person Kishor Bachhav; 21.09.2015
comment
Наверняка не удаляйте эти базы данных. Они являются системными базами данных memsql и необходимы для правильной работы memsql (скорее всего, вы все равно не сможете их удалить) - person Ishamael; 21.09.2015

Занятая память не будет освобождена до тех пор, пока не будет запущен сборщик мусора. Memsql хранит все данные в памяти. Даже если мы удалим таблицы, базу данных, строки и т. Д., Память будет недоступна, если не выполняется GC. Принудительно GC из командной строки, он освободит память:

memsql> запускает полную очистку сборщика мусора;

сравните free -m до и после запуска команды. Вы увидите разницу :)

person chandan prakash    schedule 28.04.2016
comment
MemSQL автоматически запускает сборщик мусора, нет необходимости запускать триггерный сборщик мусора. Опция сброса, в частности, заставит memsql освободить кешированную память (Buffer_manager_cached_memory), что неблагоприятно повлияет на производительность запросов (и MemSQL в любом случае просто повторно кэширует память позже). Для получения дополнительной информации о том, что использует память, см.: help.memsql.com/hc/en-us/articles/ - person Adam Prout; 14.06.2018