gpt4 book ai didi

database - 如何使用 SYSCS_DIAG.LOCK_TABLE 检查 Derby 锁(表始终显示为空)?

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:29 34 4
gpt4 key购买 nike

我正在尝试调试 Glassfish(EJB 应用程序)下的 Derby 死锁问题。我想在各个点查看锁表,所以我编写了以下代码。问题是在我调用它的每个地方,锁表总是返回为空。我错过了什么?

private void dumpLockTable()
{
try ( Connection connection = dataSource.getConnection() )
{
PreparedStatement ps = connection.prepareStatement( "SELECT * FROM SYSCS_DIAG.LOCK_TABLE" );
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
StringBuilder sb = new StringBuilder();
sb.append( "Lock Table\n" );
while( rs.next() )
{
for ( int col = 1; col <= columns; col++ )
{
sb.append( rs.getString( col ) );
sb.append( "\t|" );
}
sb.append( "\n" );
}
logger.info( sb.toString() );
}

catch ( SQLException sqle )
{
logger.throwing( LOG_CLASS_NAME, "dumpLockTable", sqle );
}
}

这是 Glassfish 3.1.2.1 下的 Derby 10.8。我正在获取数据源:

@Resource(mappedName="jdbc/myderbyjndi")
private DataSource dataSource;

所有其他 Derby 事件都是通过实体 bean 和实体管理器进行的。

最佳答案

我觉得你的代码没问题;我不确定它有什么问题。

但也许当您运行它时,当时根本没有任何锁被持有。

您可以通过使用“ij”工具和两个“ij” session 来开始诊断过程:

  1. 在第一个 session 中,连接到数据库并使用LOCK TABLE语句锁定一些表
  2. 在第二个 session 中,连接到数据库并运行 SELECT * FROM SYSCS_DIAG.LOCK_TABLE

看看在这种情况下是否可以看到 LOCK_TABLE 诊断表的内容。一旦可以,您就可以使用相同的技术(在运行代码时人为地在 ij session 中持有锁)来进一步调试子例程代码。

wiki 中有一些关于诊断 Derby 锁行为的好建议。在docs .

您可能想投票给 this Derby enhancement request .

关于database - 如何使用 SYSCS_DIAG.LOCK_TABLE 检查 Derby 锁(表始终显示为空)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670722/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com