最近公司获取资产列表的接口奇慢无比,架构师给出如下解决办法思路
- 把数据库全缓存在redis中
- 给数据库建索引index
- 存储介质换成固态硬盘
- 抓取django查询数据库的sql语句。
其中从第四条开始着手的时候,遇到django使用django.core.serializer来序列化,无法抓取这部分的sql。于是从MySQL数据库这端来抓取。打开MySQL引擎的配置文件(/etc/mysql/my.cnf
),把general_log_file= /var/log/mysql/mysql.log
和general_log=1
参数前面的注释去掉,然后重启数据库服务(service mysql restart
)。查询后进入 /var/log/mysql/mysql.log
查看语句。
最终原因找到,是切片工作没有在序列化之前完成,导致每次序列化是进行全表扫描。