转载

INNODB 到底能存放多少数据?

一个INNODB SPACE 最大为64TB,但是为什么这样大呢?
如果我们设置innodb_file_per_table后出现了多个SPACE 那么空间又是多大呢?

先讨论一下INNODB 每个PAGE的 4-8字节为 block 的块号,我们查看一下:
(工具为自己编写放到了云盘http://pan.baidu.com/s/1num76RJ)
root@hadoop1 test]# bcview ibdata1 16 4 4|more
******************************************************************
This Tool Is Uesed For Find The Data In Binary format(Hexadecimal)
Usage:./bcview file blocksize offset cnt-bytes!                   
file: Is Your File Will To Find Data!                             
blocksize: Is N kb Block.Eg: 8 Is 8 Kb Blocksize(Oracle)!         
                         Eg: 16 Is 16 Kb Blocksize(Innodb)!       
offset:Is Every Block Offset Your Want Start!                                     
cnt-bytes:Is After Offset,How Bytes Your Want Gets!                               
Edtor QQ:22389860!                                                
Used gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)                
******************************************************************
----Current file size is :140.000000 Mb
----Current use set blockszie is 16 Kb
current block:00000000--Offset:00004--cnt bytes:04--data is:00000000
current block:00000001--Offset:00004--cnt bytes:04--data is:00000001
current block:00000002--Offset:00004--cnt bytes:04--data is:00000002
current block:00000003--Offset:00004--cnt bytes:04--data is:00000003
current block:00000004--Offset:00004--cnt bytes:04--data is:00000004
current block:00000005--Offset:00004--cnt bytes:04--data is:00000005
current block:00000006--Offset:00004--cnt bytes:04--data is:00000006
current block:00000007--Offset:00004--cnt bytes:04--data is:00000007
current block:00000008--Offset:00004--cnt bytes:04--data is:00000008
current block:00000009--Offset:00004--cnt bytes:04--data is:00000009
current block:00000010--Offset:00004--cnt bytes:04--data is:0000000a
current block:00000011--Offset:00004--cnt bytes:04--data is:0000000b
current block:00000012--Offset:00004--cnt bytes:04--data is:0000000c
current block:00000013--Offset:00004--cnt bytes:04--data is:0000000d
current block:00000014--Offset:00004--cnt bytes:04--data is:0000000e
current block:00000015--Offset:00004--cnt bytes:04--data is:0000000f
省略......


如此我们能够明确的看到确实每个块的 4-8字节为 block 的块号,他们是连续的。
那么一个问题来了,4字节,最大为32位那最大数应该是2^32,而每个块是16K(默认情况)
那么一个SPACE为 16KB*2^32=64T,当然这个还受到具体文件系统限制。
那么如果有多个SPACE设置了参数innodb_file_per_table 那么就会更大,因为每个SPACE 都偶有64T
不过64T对于现在的MYSQL来说也是一个海量了,因为现在的MYSQL还存在很多不如意的地方,真正
管理64T的数据可能真会成为问题。


正文到此结束
Loading...