graphql-debugger
graphql-debugger copied to clipboard
Slow query execution when using `@graphql-debugger/trace-schema`
Issue description
I'm experiencing slow query execution when using the @graphql-debugger/trace-schema
package in my schema setup. My schema setup includes Nexus for defining the GraphQL schema and Prisma for database access.
Here's a simplified version of my setup:
import { makeSchema } from 'nexus'
import { paljs } from '@paljs/nexus'
import { traceSchema } from '@graphql-debugger/trace-schema'
import { ProxyAdapter } from '@graphql-debugger/adapter-proxy'
const nexusSchema = makeSchema({
plugins: [paljs()],
shouldExitAfterGenerateArtifacts: process.argv.includes('--nexus-typegen'),
shouldGenerateArtifacts: process.argv.includes('--nexus-typegen'),
types: [generatedTypes, types, GQLDate, NumberScalar, IdArray],
outputs: {
typegen: __dirname + '/generated/nexus.d.ts',
},
sourceTypes: {
modules: [
{
module: '.prisma/client',
alias: 'prisma',
},
],
},
})
const adapter = new ProxyAdapter()
export const schema = traceSchema({
schema: nexusSchema,
adapter,
exporterConfig: {
url: 'https://otlp.eu01.nr-data.net:4317/v1/traces',
headers: {
'Content-Type': 'application/json',
'api-key': process.env.NEW_RELIC_LICENSE_KEY as string,
},
},
})
Here's a simple ping
query that I have defined:
import { extendType } from 'nexus'
export const ping = extendType({
type: 'Query',
definition(t) {
t.field('ping', {
type: 'String',
async resolve() {
return 'pong'
},
})
},
})
When I remove the traceSchema
wrapper and export nexusSchema
directly, query execution of the ping
query is fast. However, with traceSchema
, query ping
takes more than 1 or 2 seconds to execute (it should not take more than 20 or 30 ms to execute).
Packages version:
@graphql-debugger/adapter-proxy: 0.0.0-alpha.100
@graphql-debugger/trace-schema: 0.0.0-alpha.100
Node.js version: 20.12.2
Prisma version: 5.10.2
Nexus version: 1.3.0
Additional information:
After debugging the traceSchema
function directly in the node_modules/@graphql-debugger/trace-schema/build/trace-schema.js
file, I found that removing the following block of code resolves the slowness issue:
FieldDefinition: {
enter(node) {
const existingTraceDirective = node.directives?.find((directive) => directive.name.value === "trace");
if (existingTraceDirective) {
return;
}
const newDirectives = [
...(node.directives ?? []),
{
kind: graphql_1.Kind.DIRECTIVE,
name: {
kind: graphql_1.Kind.NAME,
value: "trace",
},
},
];
return {
...node,
directives: newDirectives,
};
},
},
Please let me know if you need any further information. Thank you for your help in resolving this issue.