常见问题
- 什么东西在消耗系统中每台主机的CPU、磁盘、网络,以及内存资源
- 应用真的需要所有获取到的数据吗
- 应用在处理本应由数据库处理的事情吗
- 应用执行了太多的查询吗
- 应用执行的查询太少吗
- 应用创建了没必要的Mysql连接吗
- 应用对一个Mysql实例创建连接的次数太多了吗
- 应用做了太多的垃圾查询吗
- 应用使用了连接池吗
- 应用是否使用了长连接
- 应用是否在不使用的时候还保持连接打开
Web服务器问题
最常见的问题是保持他的进程的存活时间过长,或者在各种不同的用途下混合使用,而不是分别对不同类型的工作进行优化。
另一个主要问题是如果开启了 Keep-Alive 设置,进程可能很长时间处于繁忙状态。当然即使没有开启 Keep-Alive ,某些进程也可能存活很久。
寻找最优并发度
每个Web服务器都有一个最佳并发度,就是说让进程处理请求尽可能快,并且不超过系统负载的最优的并发连接数。
缓存
缓存对高负载应用来说是至关重要的,一个典型的Web应用程序会提供大量的内容,直接生成这些内容的成本比采用缓存要高得多,所以采用缓存通常可以获得数量级的性能提升。
可以把缓存分成两大类:被动缓存和主动缓存。被动缓存除了存储和返回数据外不做任何事情。当从被动缓存请求一些内容时,要么可以得到结果,要么返回空。
主动缓存则会在访问命中时做一些额外工作。通常会将请求转发送给应用的其他部分来生成请求结果。
应用层以下的缓存
Mysql服务器有自己的内部缓存,但也可以构建