【问题标题】: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 是否会自动截断表?

【问题讨论】:

    标签: php 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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2015-04-01
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多