跳至主要内容

长时间运行的事务

优化功能提供可操作的建议,帮助您识别并解决由长时间运行的事务导致的性能问题。

长时间运行的事务会通过锁定资源并长时间占用数据库连接来对可伸缩性和弹性产生负面影响。下面是一个常见的有问题长时间运行事务的示例:

// Example: A single massive transaction performing multiple steps
await prisma.$transaction(async (prisma) => {
const order = await prisma.order.create({
data: {
/* ... */
},
});
await prisma.user.update({
where: { id: userId },
data: { balance: { decrement: order.total } },
});
await prisma.shipping.create({ data: { orderId: order.id /* ... */ } });
// Additional dependent operations
});

问题是什么?

长时间运行的事务可能导致几个关键问题,损害应用程序的性能和可靠性:

  • 数据库锁:长时间事务会持有行、表或其他资源的锁,阻止其他查询的访问。这会导致争用和阻塞,从而显著扰乱并发操作。

  • 连接占用:事务在其整个持续时间内都占用数据库连接。在连接池有限的情况下,这会很快耗尽可用连接,导致应用程序范围内的性能下降或故障。

  • 争用加剧:随着锁的累积和连接的占用,其他事务会排队,从而产生瓶颈、更高的延迟和降低的吞吐量。

  • 可伸缩性挑战:长时间事务造成的效率低下在高流量系统中会被放大,限制了系统有效扩展的能力。

  • 脆弱性:当长时间事务失败或超时时,所有中间进度都将丢失。这在具有多个依赖步骤的工作流中尤其成问题,因为从部分故障中恢复变得复杂且容易出错。

  • 调试困难:长时间运行事务的故障排除具有挑战性,因为它们涉及多个步骤,并且可能由于超时、死锁或意外依赖关系而导致失败。

© . This site is unofficial and not affiliated with Prisma Data, Inc.