java - 执行语句有很长的延迟

标签 java sql sybase

我有一个问题。当我尝试在 Sybase 中插入一些数据时,我有很长的延迟:

2017-11-20 20:30:10,324 [DEBUG] []将数据保存到表

2017-11-20 21:30:28,245 [调试] [] 完成!

一小时,卡尔!

String query = "INSERT INTO {0}table (id, doc_id, num_doc, amount, unload_date, status) VALUES (?, ?, ?, ?, ?, ?)";

pstmt = lib.getConnection().prepareStatement(MessageFormat.format(query, "my_schema"));
pstmt.setLong(1, id);
pstmt.setLong(2, docId);
pstmt.setString(3, numDoc);
pstmt.setBigDecimal(4, amount);
pstmt.setDate(5, new Date());
pstmt.setInt(6, 0);
pstmt.execute();

有什么想法为什么会发生这种情况吗?

最佳答案

如果查询运行缓慢,我建议检查查询是否也在其他客户端运行 - 例如 isql。

第二步是检查这是否与网络有关,以及本地运行 isql 时插入速度是否也很慢。

如果查询仍然很慢,那么这可能是与数据库相关的缓慢设计,例如:

  • 列上未建立索引的外键
  • 缓慢触发

我将使用设置运行插入

set statistics io on
set statement_cache off

并检查 I/O 数量是否较低。如果处理大型扫描,这将产生信息。

如果上述方法均不起作用,那么您需要检查哪个数据库等待事件导致操作缓慢。运行以下代码来调查等待事件:

select * from master..monProcessEvents where SPID = @@SPID

可能需要额外的 MDA 配置。该查询将显示有关哪个事件导致操作变慢的信息​​。

关于java - 执行语句有很长的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47407593/

相关文章:

sql - 在 DateTime LastUpdated 列上使用 Html.hidden 进行版本跟踪时,MVC.NET 毫秒会丢失

mysql - 我可以从同一列中选择值并将它们显示在 2 列结果中吗?

java - 通过 Sybase Jconnect JDBC 驱动程序获取与 DBCP 的连接

java - 在生产代码中使用 JNA 的 Native.setProtected

java - 使用 Builder 也可以构建封装对象

php - 我应该在这里使用什么样的 JOIN?

tsql - Sybase: 'go' block 中 'IF EXISTS' 附近的语法不正确

java - 如何在 session 级别调整 Java 中的 Sybase 优化器设置?

java - Log4j 日志附加到取决于日期的文件名 - 配置

java - 如何在java中将JsonString反序列化为json格式