4

我有一个数据库,其中有 3 个表,每个表的行数超过 2000 万。我使用 GUID 作为主键(不幸的是)。现在我们的数据库大约是 20GB,并且每月增长 5GB。

对数据库进行完整备份大约需要 2 小时,在 4GB RAM 的机器上恢复需要 30 小时。

我们曾经让数据库中的所有表都消失了。同一台服务器中的其他 mysql 数据库都很好,除了一个 - 只有一个数据消失了,留下了空表。

选择查询(在许多慢查询中) - 在 20m 表之一中获取日期列的最大值大约需要 5 分钟才能返回结果。这个查询经常使用。

我正在寻找的答案

  1. 推荐的数据库设计更改
  2. 提高选择查询性能的方法 - 20m 记录的最大日期列
  3. 其他查询的表现
  4. 如何处理未来的数据库增长

谢谢大家的关注。

4

4 回答 4

1

Innodb 热备份的免费替代品是Percona XtraBackup Tool

于 2009-12-25T03:03:29.603 回答
1

我见过更大尺寸的设置(InnoDB作为存储引擎和GUID作为主键),并且没有这样的问题。

我们曾经让数据库中的所有表都消失了。同一台服务器中的其他 mysql 数据库都很好,除了一个 - 只有一个数据消失了,留下了空表。

如果系统LSN低于每个页面的LSN. 如果InnoDB日志文件损坏,则可能会发生这种情况。InnoDB但是,在这种情况下会发出警告。

选择查询(在许多慢查询中) - 在 20m 表之一中获取日期列的最大值大约需要 5 分钟才能返回结果。这个查询经常使用。

在此列上创建索引,查询将是即时的。

请发布确切的查询,我会告诉你如何创建最佳索引。

我认为DB这样的设计没有问题,很可能是您的服务器的问题。

是否可以在另一台安装了干净香草的服务器上重现此行为MySQL

您可能还想尝试在表之间拆分数据。设置innodb_file_per_table并从备份中恢复。

于 2009-11-08T18:24:37.427 回答
0

对于备份,您可以使用innodb 热备份工具。这不仅可以让您在数据库启动时进行一致的备份,而且恢复速度比您正在执行的备份要快得多(我假设是 mysqldump?)。它确实要花钱。

于 2009-11-08T18:59:24.313 回答
0

你也可以试试 Mydumper:http ://www.mydumper.org/

它是一个很棒的工具,并且是免费和开源的

于 2011-12-07T22:05:56.883 回答