目前使用 graphene-python 和 graphene-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]"
}
]
}
如果有人知道为什么石墨烯需要这么长时间才能创建响应,或者可以帮助我分析石墨烯的执行情况,我将不胜感激!
尝试使用更好的分析器,例如Silky,它将根据 Django 向数据库发出的查询向您显示细分,以及简洁的 cProfiler 概述。我怀疑无关的数据库调用存在问题。石墨烯往往会让 Django 在构建响应时执行大量的每个字段调用,并且它们可能不会出现在调试器响应中。
如果没有更多有关设置的信息 - 模型、解析器和 graphql 查询 - 很难判断。
我遇到了完全相同的问题了解 DJango 中的 TTFB 延迟 - 即使在本地进行数据库优化后似乎也慢得离谱
你能解决这个问题吗?