我的网络应用程序遇到了性能问题。发现瓶颈是db。应用程序在LAMP服务器(VPS)上运行,具有4个CPU和2GB RAM 在将新记录插入到DB(具有大约100.000条记录的表)之后,选择查询会显着减慢一段时间(有时几分钟)。我认为这个问题是重新索引,但插入后VPS实际上没有任何活动。剩下大量内存,无需交换。 CPU空闲。
事实是,选择非常复杂:
SELECT COUNT(A.id), B.title FROM B JOIN A .... WHERE ..lot of stuff..
A和B都有大约100K的记录。 A有很多列,B只有少数,但它是由嵌套集表示的树结构。 B不经常变化,但A确实如此。条件主要由索引覆盖。结果集中通常有大约10-30行。
我可以进行任何优化吗?
答案 0 :(得分:1)
你可能想要包含你的“很多东西”......你可能会像'比较'或加入未编制索引的varchar列:)
您还需要查看大量使用的索引列。
答案 1 :(得分:0)
首先是:不要相信VPS中的任何CPU / RAM等测量 - 它们可能是错误的,因为它们没有考虑机器上发生的事情(在其他VPS中)!
至于表现:
检查所有SQL语句的查询计划...在应用程序本身上使用分析器,看看瓶颈在哪里......
另一点是检查MySQL数据库的配置......是否有任何复制正在进行(也可能导致缓慢)? DB有足够的RAM吗?数据库是在不同的机器/ VPS上还是在同一个VPS中?