【问题标题】:MySQL csv import incremental slowdown (alternatives?)MySQL csv 导入增量减速(替代方案?)
【发布时间】:2011-05-26 19:52:20
【问题描述】:

我有下表:

CREATE  TABLE `Product_Category_Rank` (
  `CategoryId` SMALLINT(5) UNSIGNED NOT NULL ,
  `ProductId` VARCHAR(32) NOT NULL ,
  `RankedOn` DATE NOT NULL ,
  `PopularityRank` SMALLINT(5) NOT NULL ,
  PRIMARY KEY (`CategoryId`, `ProductId`, `RankedOn`) ,
  INDEX `fk_Product_Category_Rank_Product` (`ProductId` ASC) ,
  INDEX `fk_Product_Category_Rank_Category` (`CategoryId` ASC) ,
  CONSTRAINT `fk_Product_Category_Rank_Category`
    FOREIGN KEY (`CategoryId` )
    REFERENCES `Category` (`CategoryId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Product_Category_Rank_Product`
    FOREIGN KEY (`ProductId` )
    REFERENCES `Product` (`ProductId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci

我有一个包含不到 30,000 条记录的 csv 文件(我每天都在导入)。

我试过了:

LOAD DATA LOCAL INFILE 'temp/product_category_rank.csv'
INTO TABLE `Product_Category_Rank`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n';

我也尝试将文件加载到临时表中并执行以下操作:

INSERT
  INTO `Product_Category_Rank` ( ... )
SELECT ...
  FROM `tmp_product_category_rank`

这两种方法效果相同(结果相同),但我确信第二种方法的资源成本略高。我遇到的问题是每天加载/插入选择功能的导入时间每天增加约 3 秒。所以第 30 天,我正在寻找 90 秒直接导入表格。

事实:导入将永远有重复的主键(当然,除非我尝试两次导入相同的数据,这不是问题)

那么有没有办法加快这个过程(也许在导入之前关闭密钥检查?(如何?))

编辑:还要注意外键检查不是必需的,因为类别和产品表已经更新并且外键约束不是导入的问题。

【问题讨论】:

  • 我觉得我在某处读到过删除索引、执行导入和重新添加索引比导入索引时更快。不过,在对真实数据进行尝试之前,我会先做一些测试用例。
  • @Sam Dufel 我想知道是否有办法在导入期间禁用键和外键检查
  • @Sam Dufel 是的(我也在这里谷歌搜索,我尝试将 LOAD 包装在 SET foreign_key_checks = 0; 和 SET foreign_key_checks = 1; 之间似乎没有任何效果(速度方面)
  • @Sam Dufel 从头开始​​,也许它会有所帮助,我会在这里做更多的基准测试,很快就会更新。

标签: mysql csv import slowdown


【解决方案1】:

解决方案:(显然与查询无关)

MySQL 服务器变量:

innodb_buffer_pool_size = 8MB(更改为 2GB) innodb_log_file_size = 5MB(更改为 256MB) innodb_log_buffer_size = 1MB(更改为 4MB) innodb_flush_log_at_trx_commit = 1(改为2)

这些新设置基于以下文章: http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

现在,当我运行导入时,每天的导入速度并没有降低。我已经进口了 30 天,每次进口的速度都和上次一样。所以这实际上是一个服务器优化问题。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 2013-03-15
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多