大型数据集的Graphene-python性能问题

问题描述 投票:0回答:2

目前使用 graphene-pythongraphene-django(和 graphene-django-optimizer)。

收到GraphQL查询后,不到一秒就成功完成数据库查询;然而,石墨烯在接下来的 10 多秒内没有发送响应。如果我增加响应中发送的数据,响应时间会线性增加(数据的三倍=响应时间的三倍)。

正在检索的数据由嵌套对象组成,最多 7 层深,但通过优化查询,这不会影响从数据库检索数据所需的时间,因此我假设延迟与石墨烯有关 - python 将结果解析为 GraphQL 响应。

我不知道如何分析执行以确定花费了这么长时间的时间——在 Django 上运行 cProfiler 似乎没有跟踪石墨烯的执行。

SQL Query响应时间是使用graphene-django-debugger中间件确定的,结果如下所示:

    "_debug": {
  "sql": [
    {
      "duration": 0.0016078948974609375,
      "isSlow": false,
      "rawSql": "SELECT SYSDATETIME()"
    },
    {
      "duration": 0.0014908313751220703,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0014371871948242188,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.001291036605834961,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0013201236724853516,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0015559196472167969,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0016672611236572266,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0014820098876953125,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0014810562133789062,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.001667022705078125,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0014202594757080078,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0027959346771240234,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.002704143524169922,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    },
    {
      "duration": 0.0030939579010009766,
      "isSlow": false,
      "rawSql": "SELECT [redacted]"
    }
  ]
}

下面的屏幕截图显示了服务器对同一请求的相应响应时间:

如果有人知道为什么石墨烯需要这么长时间才能创建响应,或者可以帮助我分析石墨烯的执行情况,我将不胜感激!

django graphql graphene-python graphene-django
2个回答
1
投票

尝试使用更好的分析器,例如Silky,它将根据 Django 向数据库发出的查询向您显示细分,以及简洁的 cProfiler 概述。我怀疑无关的数据库调用存在问题。石墨烯往往会让 Django 在构建响应时执行大量的每个字段调用,并且它们可能不会出现在调试器响应中。

如果没有更多有关设置的信息 - 模型、解析器和 graphql 查询 - 很难判断。


-1
投票

我遇到了完全相同的问题了解 DJango 中的 TTFB 延迟 - 即使在本地进行数据库优化后似乎也慢得离谱

你能解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.