首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将更改的停机时间降到最低?

如何将更改的停机时间降到最低?
EN

Database Administration用户
提问于 2015-05-18 20:08:05
回答 1查看 477关注 0票数 1

我最近继承了一个正在增长的MySQL数据库。它刚刚超过10亿条记录,其中一张表的性能非常糟糕。我想最终改变数据库,但我现在没有时间去做。

数据库的创建者决定使用BIGINT代替TINYINT或SMALLINT,选择糟糕的索引,不对表进行分区(当它真的可以使用一个)。不幸的是,每次我试图修改这个表时,它都会锁住它,并且它可以运行几天,这是我无法拥有的,因为表不断增长,需要访问。

我使用的是MySQL 5.7.5,即使我选择了‘就位’算法或者没有锁,它似乎仍然会影响性能,否则它会运行,永远不会完成,就像超时之类的。

有没有一种方法可以在不停机的情况下迅速改变一个桌子?

以下是CREATE表:

代码语言:javascript
复制
CREATE TABLE `devicelog` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `site_id` bigint(20) unsigned NOT NULL,
  `system_id` bigint(20) unsigned NOT NULL,
  `device_id` bigint(20) unsigned NOT NULL,
  `field_id` bigint(20) unsigned NOT NULL,
  `val` double DEFAULT NULL,
  `valid` tinyint(1) NOT NULL,
  `timestmp` datetime NOT NULL,
  `unixtime` bigint(20) unsigned DEFAULT NULL,
  `interval5` bigint(20) unsigned DEFAULT NULL,
  `interval15` bigint(20) unsigned DEFAULT NULL,
  `interval60` bigint(20) unsigned DEFAULT NULL,
  `interval1440` bigint(20) unsigned DEFAULT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `site_id` (`site_id`),
  KEY `system_id` (`system_id`),
  KEY `device_id` (`device_id`),
  KEY `field_id` (`field_id`,`device_id`,`system_id`,`site_id`,`valid`),
  KEY `unixtime` (`unixtime`),
  KEY `created_timestmp` (`created`),
  KEY `timestmp` (`timestmp`)
) ENGINE=InnoDB AUTO_INCREMENT=1012220164 DEFAULT CHARSET=utf8 COMMENT='Device log.'
EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-05-18 20:51:21

有两种工具可以用来做这件事。

1) Percona的PT-ONLINE模式变化,可以发现这里 (Percona是MySQL世界中一个非常大的击球手)。

而且也有

( 2)史洛米·诺奇的橡木橡木--在线--改变桌子,可以找到这里。诺奇的c.v。也令人印象深刻。

年度甲骨文最佳技术人员奖:开发人员奖,甲骨文ACE MySQL社区年度成员奖,2009年奖。

显然,分区也可以帮助您的速度,但如果您现在负担不起分区,这些工具可能会对您有所帮助。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/101834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档