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

你可能感兴趣的:(Django并发情况下数据库操作异常、连接数过多、游标问题等 解决方案)