达到表大小限制时,MYSQL 是不是会截断表?
Posted
技术标签:
【中文标题】达到表大小限制时,MYSQL 是不是会截断表?【英文标题】:Does MYSQL truncate a table when the tables size limit is reached?达到表大小限制时,MYSQL 是否会截断表? 【发布时间】:2011-05-03 18:51:05 【问题描述】:我一直在翻阅 mysql 文档,试图确定我的脚本或 MYSQL 本身是否导致大表截断。我看到的基本行为:
从浏览器启动 php 脚本以从 MSSQL 表中选择行并立即将它们插入到本地 MySQL 数据库表中。 确定 MSSQL 中的行数后,我的脚本将选择分解为多个块以避免任何内存不足问题。 脚本然后截断本地表并开始通过迭代块来导入数据 直接跟踪 MySQL 中的数据,我看到表接近约 200,000 行,然后表突然被截断,计数重新开始 我认为我会看到一些关于表已满的错误,并且我认为如果达到表限制,MySQL 不会截断表。如果达到表限制或设置检查以关闭此类行为,任何人都可以确认 MySQL 是否会自动截断表?
【问题讨论】:
【参考方案1】:没有 MySQL 对表的大小没有硬性限制,但是有一些限制...
明确的表格大小 您可以使用
设置最大表大小ALTER TABLE tbl_name MAX_ROWS=200000
您可以通过
查看表格大小的当前设置SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
见:http://dev.mysql.com/doc/refman/5.0/en/full-table.html
注意MAX_ROWS
是:
您计划在表中存储的最大行数。这不是硬性限制,而是对存储引擎的提示,即表必须能够存储至少这么多行。
文件系统限制 MySQL 5.x 的默认表大小为 256TB,但如果您的文件系统不允许大于 4GB 的文件,这也可能是导致此行为的限制。
内存限制
如果您使用memory
(堆)引擎,则您的表大小由max_heap_table_size
系统变量决定。
【讨论】:
谢谢!我怀疑这不是 MySQL,但在棺材上钉一个钉子可以更容易地在我的脚本中查明问题。【参考方案2】:我不认为 MySQL 会截断您的数据,我使用过 500,000 行或更多行的表,完全没有问题。所以,我认为你最好注意你的 PHP 脚本,或者至少是 PHP 配置,PHP 可以处理的所有超时设置和脚本大小。
max_execution_time max_input_time memory_limit希望对你有帮助。
【讨论】:
以上是关于达到表大小限制时,MYSQL 是不是会截断表?的主要内容,如果未能解决你的问题,请参考以下文章
Google Colab 错误:缓冲数据在达到输出大小限制后被截断