Home  >  Article  >  Database  >  MySQL单表到底可以多大

MySQL单表到底可以多大

WBOY
WBOYOriginal
2016-06-07 16:31:441049browse

前天突然收到Monitor Center发出来的报警: PROBLEM:CN_DSL_***4/MAXFILE is CRITICAL,SNMP CRITICAL *These File size is larger than 18932735283: /abc/def/ghi/***/***.MYD 刚看到这个报警的时候,还吓了一跳。数据文件超过最大文件限制?不会吧?好像才

前天突然收到Monitor Center发出来的报警:
PROBLEM:CN_DSL_***4/MAXFILE is CRITICAL,SNMP CRITICAL – *These File size is larger than 18932735283: /abc/def/ghi/***/***.MYD

刚看到这个报警的时候,还吓了一跳。数据文件超过最大文件限制?不会吧?好像才18G嘛,怎么会就开始报警了?
于是开始查找报警来源,经过一番查找,总算找到监控脚本。这台机器之前是SA管理维护的,所以相关规范也是按照SA管理的web服务器来设计的。所以他们在监控系统中添加了某些特定的目录下文件大小的限制,防止某些意外出现大文件的情况。最后我只得在监控脚本中过滤掉了MySQL的“.MYD”和“.MYI”文件。

说到文件大小,刚好常有人问我说MySQL是否有单个表的大小限制?限制多大呢?这里做一个简单的介绍吧。

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。

而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。
当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。

以下是从收集到的一点信息,不一定全部准确:
操作系统??????????????????????????????????? 大小限制
win32 w/ FAT/FAT32????????????? 2GB/4GB
win32 w/ NTFS????????????????????? 2TB(可能更大)
Linux 2.2-Intel 32-bit??????????? 2GB (LFS: 4GB)
Linux 2.4+??????????????????????????? 4TB(ext3)
Solaris 9/10???????????????????????? 16TB
NetWare w/NSS filesystem? 8TB
MacOS X w/ HFS+?????????????? 2TB

以下是MySQL文档中的内容:
Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。

在默认情况下,MySQL创建的MyISAM表允许的最大尺寸为4GB。你可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸。请参见13.5.4节,“SHOW语法”。

如果需要使用大于4GB的MyISAM表(而且你的操作系统支持大文件),可使用允许AVG_ROW_LENGTH和MAX_ROWS选项的CREATE TABLE语句。创建了表后,也可以使用ALTER TABLE更改这些选项,以增加表的最大允许容量。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn