InnoDB独特约束减慢插入

时间:2013-01-16 19:51:07

标签: mysql performance insert innodb unique-constraint

嘿伙计们,所以我一直在与Innodb的问题搏斗。我正在设计的数据库是binning,用于存放.com和.net下列出的所有域。我正在从文件中读取这些内容,然后每周将它们输入到数据库中。你可以猜到会有很多记录。我现在计算了接近1.06亿.com和1400万.net(估计),以防止域的重复记录我对域名列和第二个TLDid设置了唯一约束。每当我每周更新一次时,插入需要5-6天。在没有数据的初始构建中,我获得了常规的插入速度,直到我开始插入2500万,然后它真的开始变慢。

我改变了我的innodb_buffer_pool_size = 6000M。在3小时左右开始减速之前,我能够进行高达4500万的插入。

我已经阅读了很多性能文章并更改了更多设置:

innodb_thread_concurrency参数= 18

innodb_lock_wait_timeout = 50

innodb_file_per_table = 1

innodb_read_io_threads = 3000(默认为64)

innodb_write_io_threads = 7000(默认为64)

innodb_io_capacity = 10000

innodb_flush_log_at_trx_commit = 2

我仍然会慢速插入:

这是表格的样子:

    -- Dumping structure for table domains.domains
    CREATE TABLE IF NOT EXISTS `domains` (
      `DomainID` bigint(19) unsigned NOT NULL AUTO_INCREMENT,
      `DomainName` varchar(100) DEFAULT NULL,
      `TLDid` int(5) unsigned DEFAULT '1',
      `FirstSeen` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      `LastUpdated` timestamp NULL DEFAULT NULL,
      PRIMARY KEY (`DomainID`),
      UNIQUE KEY `UNIQUE DOMAIN INDEX` (`TLDid`,`DomainName`),
      KEY `TIMESTAMP INDEX` (`LastUpdated`,`FirstSeen`),
      KEY `TLD INDEX` (`TLDid`),
      KEY `DOMAIN NAME INDEX` (`DomainName`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

TLDid是1或2但它代表域的扩展名,例如“Test.com”将存储为DomainName:Test TLDid 1.“Test.net”将存储为DomainName:Test TLDid :2。

我的问题是如何优化这个表有1.3亿多个记录,其中有两个独特的约束需要在插入之前进行检查,这样它不会减慢表格,需要14天来更新新的和当前的记录? / p>

谢谢大家

0 个答案:

没有答案