虽然阻止会话为0,但SQL查询正在阻止另一个查询

虽然阻止会话为0,但SQL查询正在阻止另一个查询,sql,oracle,concurrency,oracle10g,locks,Sql,Oracle,Concurrency,Oracle10g,Locks,我从在同一个表上运行的两个应用程序登录,并从这两个程序执行两个操作,导致后台SQL查询运行。一个操作导致另一个卡住或运行非常缓慢。我发现这两个问题在很长一段时间内一直存在 从表中选择计数(*) 插入表格 另外,您能否告诉我如何在运行时显示查询获取的锁,或者查看哪些查询可能存在冲突?我认为您没有任何锁定问题,因为select不会请求任何锁定 您可能遇到的情况是,select必须使用before图像,即insert之前的值(假设insert和select使用相同的表)。在图像存储在回滚段中之前,访问

我从在同一个表上运行的两个应用程序登录,并从这两个程序执行两个操作,导致后台SQL查询运行。一个操作导致另一个卡住或运行非常缓慢。我发现这两个问题在很长一段时间内一直存在

  • 从表中选择计数(*)
  • 插入表格

  • 另外,您能否告诉我如何在运行时显示查询获取的锁,或者查看哪些查询可能存在冲突?

    我认为您没有任何锁定问题,因为select不会请求任何锁定

    您可能遇到的情况是,select必须使用before图像,即insert之前的值(假设insert和select使用相同的表)。在图像存储在回滚段中之前,访问它们的成本有些高


    尽管如此,查询正在填充的表的行数仍然没有什么意义。结果会告诉你什么?一微秒后就会出错。这表明,您应该重新考虑这一切背后的逻辑。

    显示冲突锁是非常非常特定于DBMS的。您需要指定正在使用的DBMS。用于选择的点流中的信息可能与为什么需要如此长的时间非常相关;大概有一个WHERE子句强制表扫描。INSERT语句的点流中的信息也可能是相关的;它可能不是一行的简单值列表。还有其他因素,;隔离级别可能是个问题。如果您使用的是MySQL,那么了解InnoDB和MyISAM可能也很有意义。等等。您还应该向我们展示您是如何发现“阻塞会话为0”的。另外:select和insert不应相互阻塞(至少在现代DBMS中不应如此)。应用程序正在使用oracle 10g db。我通过执行select*from v$lock看到阻塞会话为0。您能告诉我如何实时查看正在获取的锁吗。