【发布时间】:2021-11-21 15:54:33
【问题描述】:
我正在用 prisma 编写一个非常基本的查询:
async createContext(contextData: CreateContextDto): Promise<ContextRO> {
const statements = contextData.body
.split('\n')
.filter((statement) => statement !== '')
.map((statement) => ({ content: statement }));
const context = await this.prisma.context.create({
data: {
contextName: contextData.name,
userId: contextData.user,
statements: {
create: statements,
},
},
include: {
statements: true,
},
});
return { context };
使用本地 PostgreSQL,相同的查询大约需要 4 秒。连接到 AWS 上的 PostgreSQL 时,最多需要 90 秒。
任何想法为什么需要这么长时间?
请查找example repo 重现此问题。
当使用 'DEBUG=*' 运行 Prisma 时,cli output
ps。如果我在aws上使用带有PostgreSQL的typeorm运行相同的查询,则需要1-2秒,因此部署不是问题。 (检查分支“typeorm”以查看比较)
【问题讨论】:
-
你正在使用 promise ,但你没有解决你确实返回了!
-
您能否尝试启用
nApi并查看是否有任何更改?您可以了解如何为您的 prisma here 版本执行此操作。如果这不能解决问题,您能否记录您的 Prisma 事件并提供运行查询时发生的情况?您可以设置环境变量export DEBUG="*"来执行此操作,如文档的debugging article 中所述。 -
@TasinIshmam 嗯,我尝试使用“debug=*”和“debug=prisma*”,但输出与我在上面的要点中发布的相同。最后一条消息来自引擎:`prisma:client:libraryEngine 发送请求,this.libraryStarted: true +13s`。我看不到如何按时获取每个步骤的日志。我会尝试更多地研究这个
-
您可能会考虑添加自己的调试日志记录,以查看您的 Prisma 查询和查询持续时间实际生成了哪些 SQL 查询。您可以挂钩 Prisma 中的“查询”事件来执行此操作。这是一些代码: prisma.$on('query', (e: any) => { const msg =
\nBegin query (Prisma): -----\n Query: ${e.query}\n Parameters:${e.params}\n Duration: ${e.duration}ms\nEnd query (Prisma): -----\nconsole.debug(msg); }) -
@OlegYarin 嘿,真的很抱歉。让我看看能不能让人看看!
标签: postgresql nestjs prisma