【问题标题】:MyISAM performanceMyISAM 性能
【发布时间】:2017-07-21 17:59:45
【问题描述】:
  • 在 Mysql(5.7 及更高版本)中用于对表进行更改跟踪,this approach 实现起来非常简单。
  • 但它需要版本表是 MyISAM,它执行表级锁定。
  • 这种方法是否适用于每秒发生多次插入/更新的生产系统?
  • 有人对这种方法有实际的生产系统经验吗?

数据库中的每个表(InnoDB)都有版本表(MyISAM) 我的系统有以下负载。
* 由于各种连接,每个表的读取速度约为 500 次/秒。
* 并且 50 次写入/秒对触发版本表的各种表。
版本表 (MyISAM) 会成为性能瓶颈吗?

【问题讨论】:

  • 我对这种高性能 MyISAM 场景没有直接经验,但是......我认为 MyISAM 会没问题提供你设置你的表和服务器适当地。我说的是使用静态字段、适当的索引,您甚至可以为需要这种性能的任务使用专用服务器,我认为 MyISAM 会做得很好。您还可以在 SSD 而不是硬盘驱动器上设置数据库。
  • 这里使用 MyISAM 的唯一原因是获得增量。因此,您获得的是不使用 InnoDB 查找方法的时间(状态表/列或简单地使用例如时间戳而不是增量)。你会失去什么:它不会在 MySQL 8 中工作(不再有 MyISAM)。每当 InnoDB 事务回滚时,您将拥有无效的版本条目(因为它不能在 MyISAM 中回滚)。另一方面,性能应该不是问题,如果是,您可以对其进行分片,例如将奇数/偶数 id 的版本放在表/服务器 1/2 中。无论如何,我的观点是:MyISAM 已经死了。让它安息吧。
  • MyISAM 存储引擎将执行全表锁定。不能同时对表进行读取和写入,所有其他想要访问此特定表的会话必须等到更新完成。 InnoDB 肯定会解决这个问题。对于有大量写入的生产系统,您将不得不尝试关闭 query_cache。太大的查询缓存大小会导致性能显着下降。由于缓存开销和锁定。可缓存查询在 MySQL 的查询缓存上取得排他锁。

标签: mysql database-performance production-environment myisam


【解决方案1】:

当一个 MyISAM 表有AUTO_INCREMENT(和某个模式集),并且没有其他UNIQUE 键时,它将“无锁”附加到表中。所以,我认为 50 次写入/秒不会成为问题。

MariaDB 可能会在 Oracle 抛弃 MyISAM 很久之后继续包含它。 Oracle 的意图是让 InnoDB 变得如此出色,以至于不再需要 MyISAM,而且他们很可能会成功。

版本表上的二级索引可能成为瓶颈。在这方面,我认为 InnoDB 的“更改缓冲区”比 MyISAM 的“现在就做”做得更好。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2012-04-14
    • 2015-05-23
    • 2011-08-20
    • 2011-04-01
    • 2012-02-03
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多