Sybase/hibernate数据库性能

Sybase/hibernate数据库性能,hibernate,sybase,jtds,Hibernate,Sybase,Jtds,我们有一个Sybase数据库,我们正在用一个非常简单的查询进行查询 Select * from ts_logs where time_sheet_id = 1234 该表大约有110万条记录,直到3天前,它是一个非常快速的查询,大约在半秒钟内执行 我们的应用程序使用hibernate,sql输出显示了完全相同的查询。三天前,我们注意到性能大幅下降,现在执行查询需要9到11秒 我们尝试在NetBeans数据库可视化工具中运行查询,发现了相同的性能问题。我们最初确定这是一个数据库性能问题,并决定在

我们有一个Sybase数据库,我们正在用一个非常简单的查询进行查询

Select * from ts_logs where time_sheet_id = 1234
该表大约有110万条记录,直到3天前,它是一个非常快速的查询,大约在半秒钟内执行

我们的应用程序使用hibernate,sql输出显示了完全相同的查询。三天前,我们注意到性能大幅下降,现在执行查询需要9到11秒

我们尝试在NetBeans数据库可视化工具中运行查询,发现了相同的性能问题。我们最初确定这是一个数据库性能问题,并决定在dbvisualizer中进一步诊断该问题,但出乎意料的是,dbvisualizer在不到半秒钟的时间内执行了相同的精确查询

我们在每个环境中都使用jtds 1.3

在所有环境中使用相同的数据库

在所有环境中使用相同的查询

是什么导致了hibernate/netbeans的性能瓶颈,而不是dbvisualizer?你对下一个要去的地方有什么想法吗

CREATE TABLE ts_log (id numeric identity(19) NOT NULL GENERATED ALWAYS AS IDENTITY, log_comment varchar(2500), log_entry varchar(2500) NOT NULL, time_sheet_id numeric(19) NOT NULL, PRIMARY KEY (id));

可能发生的情况是查询计划已更改,这可能是由于行数的增加。您应该运行updatestatistics,并检查查询计划。如果搜索参数的选择性不足以检索所需的行,则应重新考虑表/查询设计。

查询返回多少行?也许DbVisualizer并没有显示所有这些内容,而NetBeans显示了这些内容。或者DbVisualizer不显示所有内容。请回答您的问题,并为相关表格添加
create table
语句。您是否在所有四种环境中对连接URL使用相同的参数?使用create语句更新了问题。NetBeans上的默认值为1000行,返回的实际行总数为2。所有环境中的URL都相同。我们昨晚运行了更新统计,发现它解决了我们的问题。我们最终发现,在某些机器上,dbvisualizer将使用表索引查询表,但在使用dbvisualizer的其他机器上,尽管有相同的驱动程序,它却不会使用表索引。我打算发布一个问题,问什么会导致索引不总是被使用?这似乎是不同机器之间非常一致的行为。你对这件事有什么想法吗?它已经运行了将近3年,但突然间成了一个问题。当数据内容发生变化,或者表变得支离破碎时,查询计划总是有可能在某个时刻发生翻转。因此,定期运行更新统计信息(如果可能,更新索引统计信息)是正常数据库维护的一部分。