2015-09-18 40 views
1

我是MemSQL的新手。我在具有5個葉節點和2個聚合節點的羣集上的MemSQL中創建了一個數據庫和表。 Spark正在同一個羣集上運行。 一切都處於默認模式。插入數據並刪除相同。選擇*不會返回任何內容。但是當我看到web clusterUI時,每個葉節點仍然消耗大約6TB的磁盤空間。如何在MemSql中釋放掉落數據庫的空間

enter image description here enter image description here 磁盤容量描述說:「這是是用於通過MemSQL相對於可用的總的磁盤空間的磁盤空間量。當這種已滿,沒有快照,事務日誌或列存儲的數據可以創建」。

有了這個描述,我假設6TB以上的磁盤空間是因爲MemSQL的使用。

可以請一些澄清

  1. 的默認操作MemSQL將數據寫入磁盤嗎?
  2. 即使刪除內容並刪除表後,是否不刪除寫在磁盤上的數據?
  3. 如何釋放MemSQL使用的磁盤空間?我要刪除哪個目錄?我想出了這個目錄「/ var/lib/memsql/leaf-3306」包含了這個葉節點的所有memsql工件。
+0

你忘了在第二個屏幕截圖中漏掉網址:) –

+0

這裏我劃了一個URL。 :) –

+0

雖然我已經刪除數據庫,show databases顯示數據庫information_schema,memsql,sharding下面。我沒有創造它們。沒有人有權訪問此羣集。我是否應該放棄它們? –

回答

2

6TB的用法可能是因爲MemSQL,也可能是因爲Spark或其他進程。 MemSQL操作報告總磁盤使用情況,而不是MemSQL使用的磁盤(工具提示有點誤導)。

1)Rowstore表(沒有CLUSTERD COLUMNSTORE索引的表)將日誌寫入磁盤用於每次寫入。當日志變大時,日誌會合併到快照中,默認情況下,我們保留最後兩個快照文件。因此,兩個快照中較早的一個可能包含您刪除的數據。你可以用SNAPSHOT <dbName>觸發一個新的快照,這會讓GC清理舊的(可能很大的)快照。

2)快照和日誌是每個數據庫,而不是每個表。刪除表格不會觸發快照/日誌清理,但會刪除數據庫或觸發新的快照。

3)你可能不應該手工刪除數據目錄。 DROP DATABASE <db_name>將刪除與該數據庫關聯的所有數據。

對於列存儲表,故事略有不同,但我認爲「一切都是默認」意味着沒有列存儲表。

+0

「MemSQL操作報告總磁盤使用情況,而不是MemSQL使用的磁盤」,那麼我有點鬆了一口氣。讓我檢查一下是否有其他磁盤空間被使用 –

+1

在獲得有關磁盤容量誤導性描述的說明之後,我刪除了磁盤上的其他文件,並清除了磁盤空間。 –

1

是否刪除了數據庫(如在,DROP DATABASE db)或刪除了所有數據(如在DELETE FROM tTRUNCATE TABLE t中)?

如果以前,磁盤使用率應該立即收縮,如果沒有,我可以幫助您調查消耗的東西。

如果是後者,那麼它非常有意義。 MemSQL正在使用事務日誌和快照來獲得持久性。在這種特殊情況下,當您插入X數據量,然後刪除X數據量時,磁盤上的事務日誌將長爲2X,因此在恢復時它可以重播所有插入和所有刪除。爲了縮小它,MemSQL偶爾會拍攝快照(一些其他數據庫引擎稱它們爲檢查點)。當日志達到一定的大小時,它通常會這樣,顯然,在你的情況下,還沒有達到。如果您想釋放磁盤空間,則可以手動觸發快照,在聚合器上運行SNAPSHOT dbdb是數據庫的名稱),它應該有所幫助。

+0

我已經刪除了數據庫,但沒有減少磁盤空間。 「show databases」顯示在數據庫'information_schema','memsql','sharding'下面。我沒有創造它們。沒有人有權訪問此羣集。我是否應該放棄它們? –

+0

絕對不要刪除這些數據庫。它們是memsql的系統數據庫,並且是memsql正常運行所必需的(很可能無論如何您都不能放棄它們) – Ishamael

2

直到觸發GC時,佔用的內存將不會空閒。 Memsql將所有數據保存在內存中。即使我們刪除了表格,數據庫,行等內存也不可用,如果GC沒有發生。 從命令提示符強制執行GC,它將釋放內存:

memsql> trigger full gc flush;

比較free -m在觸發命令之前和之後。 你會看到區別:)