我目前有一个应用程序正在使用 130 个 MySQL 表,所有表都带有 MyISAM 存储引擎。每个表每秒都有多个查询,包括选择/插入/更新/删除查询,因此数据和索引不断变化。
我面临的问题是硬盘驱动器无法应对,等待 I/O 访问的时间长达 6 秒以上,而 MySQL 正在执行如此多的读/写操作。
我正在考虑更改为仅 1 个表并使其基于内存。不过,我从来没有为有这么多查询的东西使用过内存表,所以我想知道是否有人可以给我任何反馈,告诉我这样做是否正确?
最佳答案
一种可能性是可能有其他问题导致性能问题 - 6 秒对于 CRUD 操作来说似乎过长,即使在复杂的数据库上也是如此。请记住(在过去)ArsDigita 可以在磁盘配置相当适中的双向 Sun Ultra 2 (IIRC) 上每秒处理 30 次点击。具有合理磁盘布局和适当调整的现代中低档服务器应该能够处理相当大的工作量。
您是否缺少索引? - 检查慢速查询的查询计划,以便在不应该扫描的地方进行表扫描。
服务器上的磁盘布局是什么? - 您是否需要升级硬件或修复一些磁盘配置问题(例如,磁盘不足、日志与数据位于同一卷上)。
正如其他张贴者所建议的,您可能希望在大量写入的表上使用 InnoDB。
检查数据库服务器上的内存使用设置。您可能需要配置更多缓存。
编辑:数据库日志应该保存在它们自己的安静磁盘上。他们使用具有许多小的顺序写入的顺序访问模式。在他们与数据文件等随机访问工作负载共享磁盘的地方,随机磁盘访问会在日志上造成很大的系统性能瓶颈。请注意,这是需要完成的写入流量(即写入物理磁盘),因此缓存对此无济于事。
关于mysql - 用于不断变化的数据的最佳存储引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680023/