MySql InnoDB 可能的性能问题

Posted

技术标签:

【中文标题】MySql InnoDB 可能的性能问题【英文标题】:MySql InnoDB possible performance issues 【发布时间】:2016-10-25 09:42:49 【问题描述】:

我是数据库新手,所以我有什么:

一个表 ~75GB。 (InnoDB) 10GB 的索引。 高流量

在几个廉价的选择查询之后,我对这个巨大的表进行了插入查询和其他选择。

问题:每次插入都会重新索引,它可能会锁定表/行或什么?当同时有多个请求时,它会如何影响高流量?

【问题讨论】:

【参考方案1】:

索引以增量方式更新。无需考虑这个过程;它发生在“背景”中。索引始终是最新的;也就是说,SELECT 将能够像找到旧行一样容易地找到新插入的行。

如果您每秒获得超过 100 个INSERTs,让我们来看看细节。 (SHOW CREATE TABLE,实际INSERT等)

同时,一千个点查询应该没问题。 (即被索引的单行的SELECT。)

高流量...“廉价查询”通常非常快,以至于很少有两个同时运行。即使每秒一千个查询也可能很少同时运行多个查询。长时间运行的查询是另一回事。

几十个主动运行的连接是“重”流量。此时,让我们看看运行时间最长的查询,看看我们是否可以加快它们的速度。

根据 RAM 大小和innodb_buffer_pool_size 以及访问模式,您的大表可能或可能不受 I/O 限制。 UUID/GUID 索引因导致 I/O 迟缓而臭名昭著。您主要查看“最近”行的“日志”或“新闻”将具有“参考位置”,这会导致非常有效的缓存 - 因此表大小与 RAM 无关。

【讨论】:

以上是关于MySql InnoDB 可能的性能问题的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL innodb_deadlock_detect 打开数据库性能低,与事务回滚

单个大数据文件与每个表多个数据文件的 Innodb 的 MySql 性能

《MySQL 性能优化》之 InnoDB 存储引擎

什么可能导致 InnoDB 表的单个 UPDATE 性能非常缓慢?

Mysql Innodb 性能 - 如何最小化多列索引?

MySQL InnoDB 与 MyISAM 中的复杂查询性能