背景:saas平臺采用共享mysql資料庫,共享資料庫表的模式,每個表有都有個外鍵uid來標識每個用戶,而且表的有些欄位是varchar型別的。
問題:那該怎么計算出每個用戶所占用的表空間大小呢?該怎么監控每個用戶所占用表空間大小的變化情況呢?比如說表testA,要計算出每個用戶占用testA表空間大小的情況,監控占用表空間大小的變化情況,這個該怎么實作?
目前想到的方案:可不可以采用java欄位與表欄位映射關系來做呀?就是平臺里采用的Hibernate,java物件與資料庫表是一一對應的。先獲得java物件每個欄位的長度,再按這篇文章(http://blog.csdn.net/J080624/article/details/52875344)的欄位大小來進行換算呀,每行記錄都對應一個租戶,通過這種方式來獲得要插入的一行記錄的大小,進而獲得對應租戶的所有大小。請問這種方案可行嗎?
uj5u.com熱心網友回復:
information_schema.`TABLES`mysql也有類似oracle的動態視圖的表,上面這個表里面有表占用空間大小的資訊。
uj5u.com熱心網友回復:
確實是每個表都有DATA_LENGTH和INDEX_LENGTH,以平均每行的長度AVG_ROW_LENGTH。但是一張表里有多個租戶,且表的有些欄位是varchar欄位,這樣一樣來無法準確得出每個租戶所占用的表空間大小了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/74985.html
標籤:高級技術
