为什么 Django Xadmin 后台页面有的加载很快,有的却很慢?

项目环境

  • 操作系统:Ubuntu 16.04
  • 服务器:Nginx 1.10.3、uWSGI 2.0.17
  • 数据库:Mysql 5.7(使用的是阿里云的 RDS)
  • Python:3.5.2
  • Django:2.0.3
  • Xadmin:2.0.1

问题描述

  • 我在 Django 项目中创建了 N 个 app,其中有两个数据量相对较大(Mysql 数据库存储20W+的数据)。
  • 从 Xadmin 进入后台,其中一个项目打开一直报 nginx:504 Gateway Time out 的错误,后来结果排查,是因为 nginx 设置 uWSGI 的超时时间只有 2s,导致数据没等查询结束就到了超时时间。

    解决方案:

    Nginx 延长的 uWSGI 的超时时间

    图片描述

  • 解决 Nginx 的报错问题后,又出现了新的问题,访问 Xadmin
    后台的项目信息特别特别的慢(快的时候需要40s,慢的时候需要2分钟),诡异的是除了这一个模块其他的模块都正常。

    图片描述

排查问题:

  1. 检查是否是 Nginx 的问题:如果是 Nginx的问题,那么整个站点都应该会受影响,但实际情况是只有这一个模块有问题,其他正常,所以应该不是 Nginx 的问题。
  2. 检查是否是 uWSGI 的问题:如果是 uWSGI 的问题,那么我停掉 uWSGI,直接使用 Django自带的服务器启动项目就应该回复正常才对(python3 manage.py runserver),但实际情况是我使用自带的服务器启动项目后,问题依然存在,所以应该也不是 uWSGI 的问题。
  3. 检查是否是数据量太大的问题:按照正常的逻辑,20W+ 的数据也不算是数据量特别的大的。而且其他的模块也有 20W+ 的数据,就没出现过这个问题。但是当我把数据删除到只有几百条的时候,访问速度就恢复正常了。所以问题出在数据量太大,还是极有可能的,只是前后出现的悖论让我还是没想明白问题出在哪。
  4. 检查是否是 Django ORM 查询数据库的问题:经过实际操作后,发现数据库查询最长时间也只用了不到 2s,所以应该也不是 ORM 查询或数据库的问题。
  5. 虽然不是 Django ORM 查询数据库的问题,但是随后又发现了一个查询数据库之后的问题。就是 Django 到数据库中查询后,拿到数据后没有及时吐出给 uWSGI,而是卡着那里。所以问题极有可能就是 Django 项目的问题,至于为什么卡在那里,出现了什么问题,我还没有搞明白。
  6. 其他问题:值得一提的是 uWSGI 出现过一个奇葩的问题,就是在页面被请求的时候 CPU 的使用率瞬间达到了100%,我也搞不明白为毛也会出现这种问题。

    图片描述

综上所述:出现问题的可能性是数据量太大或者是 Django 项目的问题,但是我不知道从哪下手解决。如有遇到过的这类问题的或者能提供一个解决思路的大神,请不吝赐教,谢谢!

回答:

都快一年了....算了,我自己回答吧!

当时是因为要在Xadimn的后台和调用API接口进行数据筛选查询,但是筛选的时候底层SQL语句其实就是 %*% ,需要通配符进行筛选,这样就会导致全文查找,20W+的数据量进行查询当然慢了(Django的ORM查表机制应该就是这样的,要不然为什么大项目都用Tornado框架呢)应该是可以优化的,当时也不太懂Django,所以后来自己用Flask直接从数据库中拿的数据。再后来...就做别的项目了,还是没学精啊,有机会再重新做一次吧!

以上是 为什么 Django Xadmin 后台页面有的加载很快,有的却很慢? 的全部内容, 来源链接: utcz.com/a/165230.html

回到顶部