具有超过1000万条记录的ALTER特定表

时间:2017-06-13 08:08:11

标签: mysql

我有一个名为History的表,其中客户的记录超过 1000万

现在我希望ALTER使用New Extra Column ALTER这个表,但这需要花费太多时间,有时甚至是服务器崩溃。

有没有更快的方法可以History大表?

我的查询是:

  

ALTER TABLE oldID ADD COLUMN oldid16 BIGINT(20)UNSIGNED NULL,   添加索引oldIDInnoDB);

我正在使用public String getJWT(){ Date now = new Date(); long t = now.getTime(); Date expirationTime = new Date(t + 1300819380); return Jwts.builder() .setSubject("any subject") .setIssuedAt(now) .setExpiration(expirationTime) .signWith(SignatureAlgorithm.HS512, "username") .compact(); } <--! to validate jwt --> public boolean validateJWT(String jwt){ try { Jwts.parser().setSigningKey("username").parseClaimsJws(jwt); return true; } catch (Exception e) { // TODO: handle exception return false; } }

1 个答案:

答案 0 :(得分:0)

在MySQL Workbench数据库编辑器中有3个选项,不言自明:

  • DBMS连接保持活动间隔(以秒为单位):600
  • DBMS连接读取超时(以秒为单位):600
  • DBMS连接超时(以秒为单位):60

如果您想在MySQL Workbench中完成任务,那么您必须为这些选项提供更高的值。

同样的原则应适用于所有编辑,包括Liquibase。

更多的是,在MySQL服务器中,您可以通过更改某些服务器系统变量来实现此目的:

  • connect_timeout(对您的任务最重要)
  • long_query_time时间
  • WAIT_TIMEOUT
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout

和/或其他人,我不再了解他们了。

祝你好运!

编辑1:

还有innodb特定变量作为改变的候选者,以完成您的任务。像这样,例如:

  • innodb_buffer_pool_size

当然,所有更改和组合都取决于您的系统资源/配置/工作流程。

编辑2:

PS:对于这么大的操作,我们使用SQLyog,一个非常稳定和强大的数据库编辑器。最重要的是:我们从未像使用MySQL Workbench那样崩溃。所有数据库工作流程/流程都很顺利。

编辑3:

新建议:

  • 在再次运行查询之前准备日志记录过程,以便跟踪出现的错误或成功消息。
  • 另外,我看到了查询。我建议你应用oldid16 插入新列后单独索引。
  • 关于db表的一个重要的一点:每个表都应该有一个 在文件系统中分配的单独文件。见InnoDB File-Per-Table Tablespaces。也许,Overview of Partitioning in MySQL

PS:就个人而言,我看不到以其他方式运行ALTER查询的其他选项,而不是原始问题所呈现的:整体而且一次性 - 可能之后,分隔{{ 1}}也是。

相关问题