Django并發(fā)情況下數(shù)據(jù)庫操作異常、連接數(shù)過多、游標(biāo)問題等 解決方案

使用 siege 對項目接口進(jìn)行并發(fā)測試時,后臺日志出現(xiàn)下面幾種異常:

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

運行環(huán)境:

ubuntu 16.04
python 3.6
Django 2.14
MySQL 5.6
部署 Gunicorn
數(shù)據(jù)庫包 Pymysql

問題分析:

  1. Django 數(shù)據(jù)庫訪問默認(rèn)是長連接,并發(fā)情況下連接數(shù)耗盡
  2. 使用 pymysql 庫,性能較差,使用gevent 時 會出現(xiàn)游標(biāo)訪問異常等問題

解決方案:

  1. 使用連接池管理
  2. 使用MySQLdb庫
1.使用PooledDB庫是實現(xiàn)連接池
image.png
2.重寫數(shù)據(jù)庫引擎
image.png
3.settings.py中設(shè)置 ENGINE, CONN_MAX_AGE需要設(shè)置為None

ps: 需要刪除 這句環(huán)境兼容代碼(如果有的話,否則無法使用MySQLdb)
import pymysql
pymysql.install_as_MySQLdb()


image.png
4. 設(shè)置數(shù)據(jù)庫的最大連接數(shù) max_connections = 1000

如果安裝 MySQLdb失敗,請查看http://www.itdecent.cn/p/f389d50a5678

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容