graphql-python / graphql-python/graphql-core
Performance issues related to complete_value on large datasets
- Linguagem predominante
- Python
- Estrelas
- 531
- Forks
- 146
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
Hi! We've noticed that returning a list of 5k elements, with a couple of nested objects is pretty slow:
```
Person {
id
name
lastname
age
address {street number}
job {id org_name}
partner {id name}
pets {name type}
school {id name}
}
```

ncalls | tottime | percall | cumtime | percall | filename:lineno(function)
-- | -- | -- | -- | -- | --
1 | 1.8e-05 | 1.8e-05 | 2.145 | 2.145 | graphql.py:103(graphql_sync)
1 | 1.5e-05 | 1.5e-05 | 2.145 | 2.145 | graphql.py:152(graphql_impl)
1/30001 | 0.19 | 6.335e-06 | 2.137 | 7.122e-05 | execute.py:413(ExecutionContext.execute_fields)
1 | 1.3e-05 | 1.3e-05 | 2.137 | 2.137 | execute.py:965(execute)
1 | 7e-06 | 7e-06 | 2.137 | 2.137 | execute.py:328(ExecutionContext.execute_operation)
1/135001 | 0.3229 | 2.392e-06 | 2.135 | 1.581e-05 | execute.py:485(ExecutionContext.execute_field)
1/145001 | 0.2737 | 1.888e-06 | 2.071 | 1.428e-05 | execute.py:575(ExecutionContext.complete_value)
1 | 0.009884 | 0.009884 | 2.071 | 2.071 | execute.py:660(ExecutionContext.complete_list_value)
**5000/30000** | 0.02747 | 9.156e-07 | 2.026 | 6.752e-05 | execute.py:893(ExecutionContext.complete_object_value)
By itself it's not really a slow function, but its executed 30k times. Is there any way to reduce the overhead by reducing the number of times this function is invoked?
Tested on Python 3.8 and graphql-core==3.2.3
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Direção de pesquisa
Start in execute.py at ExecutionContext.complete_value, complete_list_value, and complete_object_value, using the reported graphql.py call path as the reproduction entry point. Reproduce the 5,000-element nested query on Python 3.8 with graphql-core 3.2.3, profile the execution, and verify that any change reduces overhead without altering the returned result.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- api, performance
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 35/100