gpt4 book ai didi

sql - Mysql慢速插入

转载 作者:IT老高 更新时间:2023-10-29 00:14:53 25 4
gpt4 key购买 nike

我有以下 InnoDB 表:

+-----------+-----------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| doc_id | char(32) | NO | | NULL | |
| staff | char(18) | NO | | NULL | |
| timestamp | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------+-----------+------+-----+-------------------+----------------+

使用这些键:

+--------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| staff_online | 0 | PRIMARY | 1 | id | A | 277350 | NULL | NULL | | BTREE | |
| staff_online | 1 | timestamp | 1 | timestamp | A | 277350 | NULL | NULL | | BTREE | |
| staff_online | 1 | staff_timestamp | 1 | timestamp | A | 277350 | NULL | NULL | | BTREE | |
| staff_online | 1 | staff_timestamp | 2 | staff | A | 277350 | NULL | NULL | | BTREE | |
+--------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

我刚刚注意到 在 mysql-slow.log 中,我有时会对该表进行 INSERT 查询,这需要超过 1 秒

INSERT INTO `staff_online` (`doc_id`, `staff`, `timestamp`) VALUES ('150b60a0ab8c5888bdbbb80bd8b7f8a2', 'asia', '2011-01-29 16:52:54')

我真的很困惑为什么要花这么长时间。我怎样才能加快速度?

顺便说一句:每天大约有 80 次像这样的缓慢插入和 40 次缓慢更新。

最佳答案

There are 277259 rows and only some inserts are slow (rare)

每当 B-Tree 页面已满时,就需要对其进行拆分,这需要一些时间。索引越多,插入性能也会越慢,因为每次插入都会更新所有索引。 9000 已经正确声明您的 (timestamp,staff) 索引在 95% 的情况下涵盖 (timestamp) 索引,在极少数情况下需要单列 (timestamp) 索引更好的性能。

还有一些周期性的后台任务有时会在一天中减慢一两次插入速度。

此外,延迟的另一个原因仅仅是数据库事件。如果您的事务正在锁定插入需要更新(或页面拆分)的页面,则插入必须等到写入锁定被默认。这些其他事件甚至不需要实际启动事务,它们甚至不必是读-读争用;您还可以有写-写争用或因大量事件而建立的队列。

最后一个可能的原因 - 您的数据库服务器资源不足,无论是内存、CPU 还是网络 I/O。服务器只能做这么多,所以它必须等到它有足够的资源。

关于sql - Mysql慢速插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4837903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com