**丁奇,原文:
這周阿里集團dba內部分享時,支付寶的黃忠同學提了乙個問題,關於innodb索引page 的利用率。
page利用率
主要是指btee裡面每個page的使用被使用的空間大小。我們知道innodb預設乙個page大小是16k。但實際使用情況不會總用滿
我們定義為所有page的總使用位元組除以總位元組數。
在理論分析之前,我們要先弄個工具,查一下。
例項統計
寫了乙個簡單的工具,讀ibd檔案上的每個page,算出每個page的實際使用位元組,可以得到利用率。
create table `ctu_factor_risk_99_03` (
`seq_id` bigint(20) unsigned not null auto_increment,
`a` varchar(32) default null,
`b` varchar(32) default null,
`c` varchar(32) default null,
key a (a),
key bc (b,c),
key cb (c,b),
) engine=innodb default charset=utf8;
插入資料中a,b,c均為長度為30位元組的隨機字串。
顯然主鍵和其他索引應該分開統計。統計結果發現,主鍵page利用率71%,其他索引利用率約52%。
簡單分析
上面的結果很好理解。因為按照主鍵遞增順序插入資料,因此主鍵上資料「緊湊」。 而其他三個索引,則都是隨機更新,需要不停地作索引節點**。
如何提公升磁碟空間利用率
回到最開始的問題。其實我們關心的,是innodb為了儲存相同的資料,用了多少空間。所以我們的問題變成,儲存相同的資料,如何讓占用的磁碟空間更小。
有乙個很直觀的結論。把這些索引刪了重建,必然會減少空間消耗。因為這個操作之後,在新的資料插入之前,這些索引也變成「緊湊的」。
再建了乙個與cb相同的索引,再跑,利用率居然高達98%。這個原理大家應該都知道了,只是量化一下而已。
工具附後, 用法 ./ibd_used tb.ibd n1 n2 >/tmp/r 最後幾行為各個索引的利用率統計值
InnoDB磁碟空間利用率的檢視
檢視innodb的磁碟空間利用率 page利用率 主要是指btee裡面每個page的使用被使用的空間大小。我們知道innodb預設乙個page大小是16k。但實際使用情況不會總用滿 我們定義為所有page的總使用位元組除以總位元組數。在理論分析之前,我們要先弄個工具,查一下。例項統計 寫了乙個簡單的...
檢視磁碟資訊磁碟空間
如果要檢視磁碟還剩多少空間,當然是用df的命令了。root localhost df h 檔案系統 容量 已用 可用 已用 掛載點 dev sda2 14g 11g 2.6g 82 dev sda1 99m 14m 81m 14 boot tmpfs 442m 275m 168m 63 dev sh...
linux檢視磁碟空間
如果要檢視磁碟還剩多少空間,當然是用df的命令了。root localhost df h 檔案 系統 容量 已用 可用 已用 掛載點 dev sda2 14g 11g 2.6g 82 dev sda1 99m 14m 81m 14 boot tmpfs 442m 275m 168m 63 dev s...