在日常工作中,时不时会遇到一个已在线的产品的数据库出现性能问题,如访问速度太慢甚至是无法打开的问题,通过相关工具查看数据往往会见到锁太多,服务器的 cup , 内存占用过大的情况,这时候就需要做些优化工作了。以下是我所总结的几种方法,还有什么好的办法,希望得到大家的指教。
1. 静态化。 对于过于访问频繁的页面我们可以考虑使用静态化,静态化包括整个页面静态化和数据静态化。整个页面静态化这个好理解;数据静态化就是将与 数据库返回的数据形成文件然后保存到 XML 之类的文件中,每次访问读的是 XML 文件数据,静态数据生成时机 一般采用的是 访问前生成,访问后生成,生成程序自动生成。何时静态化,使用什么样的静态化?不同的使用场景需采用不同的静态生成策略。
2. 分表。针对每个时间周期产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中,如论坛按照一个月内的主帖的回帖保存到一个表中;而主帖的字段太多,我将其内容 content 字段 保存到另外一个表中,避免一个表过大的问题。
3. 分库。 就是将系统按照模块相关的特征分布到不同的数据中,以提高系统整体负载能力。
4. 定时任务。 如某个相册,每小时有3000次的访问,我们要记录每张图片的点击量(每日,每周,每月,总点击量),但浏览时对其实时性要求不高。显然每次更新图片的点击量会成为系统的一个瓶颈,这时候可采取将访问情况记录到一个临时性的点击表中,每隔一个时钟周期将其更新回相关地方,然后 truncate 临时表中的数据。