我目前有一个使用130 MySQL表的应用程序都使用MyISAM存储引擎。每个表每秒都有多个查询,包括select / insert / update / delete查询,因此数据和索引会不断变化。
我面临的问题是硬盘驱动器无法应对,I / O访问的等待时间长达6秒以上,而MySQL完成了如此多的读/写操作。
我正在考虑改为只有1个表并使其基于内存。我从来没有使用内存表来处理那么多查询的内容,所以我想知道是否有人能给我任何关于它是否正确的反馈意见?
答案 0 :(得分:2)
一种可能性是可能存在导致性能问题的其他问题 - 即使在复杂的数据库上,CRUD操作也需要6秒。请记住(在当天)ArsDigita在双向Sun Ultra 2(IIRC)上可以处理每秒30次点击,并且磁盘配置相当适中。具有合理磁盘布局和适当调整的现代中低端服务器应该能够应对相当大的工作量。
你错过了一个索引吗? - 检查表扫描的慢查询的查询计划,它们不应该是。
服务器上的磁盘布局是什么? - 您是否需要升级硬件或修复某些磁盘配置问题(例如,没有足够的磁盘,与数据在同一卷上的日志)。
正如另一张海报建议的那样,您可能希望在大量编写的表格中使用InnoDB。
检查数据库服务器上的内存使用情况设置。您可能需要配置更多缓存。
编辑:数据库日志应该位于自己的安静磁盘上。它们使用顺序访问模式和许多小的顺序写入。如果他们与随机访问工作负载(如数据文件)共享磁盘,则随机磁盘访问会在日志上造成巨大的系统性能瓶颈。请注意,这是需要完成的写入流量(即写入物理磁盘),因此缓存对此没有帮助。
答案 1 :(得分:1)
我现在改为MEMORY表,一切都好多了。事实上,我现在在服务器上有额外的备用资源,可以进一步扩展操作。
答案 2 :(得分:0)
您是否有特殊原因未使用innodb?由于缓存和不同的并发模型,它可能会产生更好的性能。它可能需要更多调整,但可能会产生更好的结果。
答案 3 :(得分:0)
我认为你的数据库结构非常错误,需要优化,与存储无关