Django并发情况下数据库操作异常、连接数过多、游标问题等 解决方案

使用 siege 对项目接口进行并发测试时,后台日志出现下面几种异常:

  1. _io.BufferedReader
  2. Packet sequence number wrong
  3. NoneType' object has no attribute 'settimeout'
  4. Too many connections

运行环境:

ubuntu 16.04
python 3.6
Django 2.14
MySQL 5.6
部署 Gunicorn
数据库包 Pymysql

问题分析:

  1. Django 数据库访问默认是长连接,并发情况下连接数耗尽
  2. 使用 pymysql 库,性能较差,使用gevent 时 会出现游标访问异常等问题

解决方案:

  1. 使用连接池管理
  2. 使用MySQLdb库
1.使用PooledDB库是实现连接池
image.png
2.重写数据库引擎
image.png
3.settings.py中设置 ENGINE, CONN_MAX_AGE需要设置为None

ps: 需要删除 这句环境兼容代码(如果有的话,否则无法使用MySQLdb)
import pymysql
pymysql.install_as_MySQLdb()


image.png
4. 设置数据库的最大连接数 max_connections = 1000

如果安装 MySQLdb失败,请查看https://www.jianshu.com/p/f389d50a5678

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容