1

嘿伙计们,所以我一直在努力解决我的 Innodb 中的一个问题。我正在设计的数据库是为容纳 .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 亿条记录和 2 个需要在插入之前检查的唯一约束的记录,这样它就不会减慢表的速度,需要 14 天才能更新新记录和当前记录?

多谢你们

4

0 回答 0