Mysql InnoDB分区表上的MOD(primarykey)是否会导致碎片

Mysql InnoDB分区表上的MOD(primarykey)是否会导致碎片,mysql,innodb,partitioning,modulus,Mysql,Innodb,Partitioning,Modulus,我正在服务器之间导出一个巨大的表(15亿行)。这是表格格式 CREATE TABLE IF NOT EXISTS `partitionedtable` ( `domainid` int(10) unsigned NOT NULL, `instanceid` int(10) unsigned NOT NULL, `urlid` int(10) unsigned NOT NULL, `adjrankid` smallint(5) unsigned NOT NULL, PRIMAR

我正在服务器之间导出一个巨大的表(15亿行)。这是表格格式

CREATE TABLE IF NOT EXISTS `partitionedtable` (
  `domainid` int(10) unsigned NOT NULL,
  `instanceid` int(10) unsigned NOT NULL,
  `urlid` int(10) unsigned NOT NULL,
  `adjrankid` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`domainid`,`instanceid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (MOD(domainid,8192))
(PARTITION p0 VALUES LESS THAN (1) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (2) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (3) ENGINE = InnoDB
 ...
 PARTITION p8191 VALUES LESS THAN (8192) ENGINE = InnoDB)
数据按PK顺序导出到新服务器,并生成8192个文本文件。。。这相当于每个文件大约20万条记录

我只是从0迭代到8191,将文件导入到新表中

LOAD DATA INFILE '/home/backup/rc/$i.tsv INTO TABLE partitionedtable PARTITION (p$i)
我认为每一个导入都只需要一秒钟,但是它们需要大约6秒钟

服务器的规范可以在这里看到。

服务器中没有太多其他事情会使流程瓶颈

是不是MOD()分区会导致碎片?我的印象是不会有任何碎片,因为每个分区都会被视为一个单独的表,而且因为数据是按主键顺序插入的,所以不会有碎片

  • 添加-可能有用。。。这些设置在批处理开始时应用

    设置自动提交=0; 设置外键检查=0; 设置sql\u log\u bin=0; 设置唯一检查=0

在每个文件之后应用提交


在加载数据填充期间,线程的大部分时间似乎都处于系统锁定状态。

当我设置服务器时,我错误地认为打开文件的限制更高,但实际上它是1024

我已经将它提升到16000并重新启动了服务器,并且它在3秒钟内运行得稍微快一点(我假设文件打开/关闭导致系统锁定状态)

我还清除了bin日志


不过还是有点慢。

这不包括将数据从文件复制到数据库表文件吗?当然,但是将文件放在/dev/shm中似乎没有什么区别,这应该可以消除一半的IO慢度。这些文件的大小只有8MB,非常小。请检查每个核心的CPU负载。每个分区需要1个内核,因此将数据写入8192个分区可能会非常痛苦。与加载到具有6-8哈希分区的表相比,SCPU加载是正常的。这远远低于限制。我一次将它们加载到1中,因此没有发现分区/并发问题。您可以发布
SHOW PROFILE
的输出吗?