主键单个记录的更新速度较慢

时间:2015-05-11 17:11:10

标签: mysql sql performance indexing innodb

我正在使用MySQL 5.5。

我有一个InnoDB表定义如下:

CREATE TABLE `table1` (
  `col1` int(11) NOT NULL AUTO_INCREMENT,
  `col2` int(11) DEFAULT NULL,
  `col3` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `col4` int(11) DEFAULT NULL,
  `col5` datetime DEFAULT NULL,
  `col6` tinyint(1) NOT NULL DEFAULT '0',
  `col7` datetime NOT NULL,
  `col8` datetime NOT NULL,
  `col9` int(11) DEFAULT NULL,
  `col10` tinyint(1) NOT NULL DEFAULT '0',
  `col11` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`col1`),
  UNIQUE KEY `index_table1_on_ci_ai_tn_sti` (`col2`,`col4`,`col3`,`col9`),
  KEY `index_shipments_on_applicant_id` (`col4`),
  KEY `index_shipments_on_shipment_type_id` (`col9`),
  KEY `index_shipments_on_created_at` (`col7`),
  KEY `idx_tracking_number` (`col3`)
) ENGINE=InnoDB AUTO_INCREMENT=7634960 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

问题是更新。此表中大约有2M行。

典型的UPDATE查询是:

UPDATE table1 SET col6 = 1 WHERE col1 = 7634912;

我们在这台生产服务器上有大约5-10k QPS。这些查询通常在"更新"通过流程列表查看状态。 InnoDB锁显示index_table1_on_ci_ai_tn_sti上有许多rec但没有间隙锁。没有交易在等待锁定。

我的感觉是,独特指数导致滞后,但我不确定原因。这是我们唯一使用Unique Index以这种方式定义的表。

1 个答案:

答案 0 :(得分:0)

我认为UNIQUE密钥没有任何影响(在这种情况下)。

您是否真的将DATETIME设置为" 1"? (请检查其他拼写错误 - 他们可以发挥重大作用。)

你是想尝试每秒10K UPDATEs吗?

innodb_buffer_pool_size大于表格,但不超过可用内存的70%吗?

innodb_flush_log_at_trx_commit的价值是多少? 1是默认且安全的,但慢于2。

您可以将一堆更新放入单个交易中吗?这将减少交易开销。