django数据库优化(一)

django数据库优化(一)# 版本背景python:3.7django:2.2mysql:8.0前景:因为django在每次查询时就进行一次数据库连接操作,而且查询完成之后就立马关闭连接,因此在进行频繁操作数据库的场景下该操作十分不友好,会大大增加了数据库的压力,降低服务性能。解决方案:修改django数据库的短连接,改用长连接查阅官方文档:Django Databases持久化连接持久化连接避免了在每个请求中重新建立到数据库的连接的开销。它们由CONN_MAX_AGE定义连接最长生命
摘要由CSDN通过智能技术生成

django数据库优化(一)

# 版本背景
python:3.7
django:2.2
mysql:8.0

前景:因为django在每次查询时就进行一次数据库连接操作,而且查询完成之后就立马关闭连接,因此在进行频繁操作数据库的场景下该操作十分不友好,会大大增加了数据库的压力,降低服务性能。
解决方案:修改django数据库的短连接,改用长连接

查阅官方文档:Django Databases

持久化连接

持久化连接避免了在每个请求中重新建立到数据库的连接的开销。它们由CONN_MAX_AGE定义连接最长生命周期的参数控制 。可以为每个数据库独立设置。

默认值为0,保留每次请求结束时关闭数据库连接的历史行为。要启用持久化连接,请将CONN_MAX_AGE设置为正值的秒数。对于无限制的持久化连接,请将其设置为None.

连接管理

Django 在第一次进行数据库查询时会打开一个到数据库的连接。它保持此连接打开并在后续请求中重用它。一旦连接超过定义的最大数值CONN_MAX_AGE或不再可用时,Django 将关闭连接 。

详细地说,Django 会在需要连接但还没有连接时自动打开一个数据库的连接——要么因为这是第一个连接,要么因为前一个连接已关闭。

在每个请求开始时,如果连接已达到最大值,Django 会关闭连接。如果您的数据库在一段时间后终止空闲连接,您应该设置CONN_MAX_AGE一个较低的值,以便 Django 不会尝试使用已被数据库服务器终止的连接。(这个问题可能只会影响非常低流量的网站。)

在每个请求结束时,如果连接已达到最大值或处于不可恢复的错误状态,Django 将关闭连接。如果在处理请求时发生任何数据库错误,Django 会检查连接是否仍然有效,如果无效则关闭它。因此,数据库错误最多影响一个请求;如果连接变得不可用,下一个请求将获得一个新的连接。

注意事项

由于每个线程都维护自己的连接,因此您的数据库必须至少支持与工作线程一样多的同时连接。

有时数据库不会被大多数视图访问,例如因为它是外部系统的数据库,或者由于缓存。在这种情况下,您应该设置CONN_MAX_AGE一个较低的值甚至 0,因为维护不太可能被重用的连接是没有意义的。这将有助于保持与该数据库的同时连接数较少。

开发服务器为它处理的每个请求创建一个新线程,消除持久连接的影响。不要在开发过程中启用它们。

当 Django 与数据库建立连接时,它会根据所使用的后端设置适当的参数。如果启用持久连接,则不再在每个请求中重复此设置。如果修改连接的隔离级别或时区等参数,则应该在每个请求结束时恢复 Django 的默认值,在每个请求开始时强制使用适当的值,或者禁用持久连接。

django使用长连接

DATABASES = {
   
    'default': 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值