【发布时间】:2020-02-02 21:38:39
【问题描述】:
我可以在 my.ini 文件中更改什么来加快“加载数据输入”吗?
我有两个 MySQL 5.5 实例,每个实例都有一个相同的表,结构如下:
CREATE TABLE `log_access` (
`_id` bigint(20) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`type_id` int(11) NOT NULL,
`building_id` int(11) NOT NULL,
`card_id` varchar(15) NOT NULL,
`user_key` varchar(35) DEFAULT NULL,
`user_name` varchar(25) DEFAULT NULL,
`user_validation` varchar(10) DEFAULT NULL,
PRIMARY KEY (`_id`),
KEY `log_access__user_key_timestamp` (`user_key`,`timestamp`)
KEY `log_access__timestamp` (`timestamp`)
) ENGINE=MyISAM
每天我需要将前一天的数据从实例 A 移动到实例 B,其中包含大约 2500 万条记录。目前我正在做以下事情:
- 在实例 A 上,生成一个带有“WHERE timestamp BETWEEN”的 OUTFILE “2014-09-23 00:00:00”和“2014-09-23 23:59:59”。这通常需要 不到 2 分钟。
- 在实例 B 上,执行“LOAD DATA INFILE”。这是问题区域 因为大约需要 13 小时。
- 在实例 A 上,删除前一天的记录。这可能是另一个
- 在实例 B 上,运行统计信息 在实例 B 上,截断表
我还考虑过对表进行分区并仅交换分区。从 5.6 开始支持 EXCHANGE PARTITION,我愿意更新 MySQL,但是,所有文档都讨论了表之间的交换,我无法确认我是否能够在数据库实例之间执行此操作。
实例之间的复制,但由于我过去没有修改过复制,而且这是一项时间敏感的任务,我有点不愿意涉足新领域。
非常感谢任何智慧之言。
【问题讨论】:
-
您是否尝试在 LOAD DATA INFILE 之前禁用实例 B 上的键?
-
那么,文件有多大>
-
不,EXCHANGE PARTITION 不能将分区从一个实例移动到另一个实例。
-
感谢您澄清@BillKarwin
标签: mysql optimization