我编写了一个应用程序,它使用JDBC驱动程序4将SQL Server数据库中两个视图的数据存档到Java中另一个SQL Server数据库中的不同表。我关心的是应用程序的性能。
将20条消息及其附件(仅限名称和链接信息)归档需要大约13分钟,数据由20个colomns组成。
列概述
smallint(6)
datetime
int(11)
varchar(255)
varchar(100)
varchar(100)
varchar(100)
text
int(11)
int(11)
varchar(255)
varchar(255)
int(11)
有人可以指点一下如何让表现更好吗? 并告诉我上面给出的运行时是否可以接受。 (我知道这取决于 情况,该申请是一个POC。)
我签出的东西(编辑)
我已经阅读了一些关于自动提交的帖子,说你可以禁用它来提高性能。我首先检查了Java tuts以找到以下链接
http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#disable_auto_commit
在文章中提交了解释。当我在其中一个示例中检查for循环时,在每次更新结束时使用commit,这是合乎逻辑的。但是每次插入后使用自动提交和提交有什么区别?
我正在使用预处理语句来插入存档数据库。
使用调试程序后的信息
我已经使用eclipse调试器来确定瓶颈所在的位置。
代码挂在以下片段中:
while(rs.next())
{
rows = new ArrayList();
for(int collomnCount = 1; collomnCount <= rsmd.getColumnCount(); collomnCount++)
{
Object fields = rs.getObject(collomnCount);
rows.add(fields);
}
table.add(rows);
this.table = table;
}
我使用此方法使ResultSet中的信息更易于访问。 有办法解决这个问题吗?
答案 0 :(得分:0)
测量,分离,改进。
所有性能提升都需要一个周期。问题是你的测量水平太高,而不是孤立,所以你不知道要改进什么。由于缺乏工作流程,您正在寻找可能(或可能不适用于您的情况)的“可能出现的问题”。
应用程序中有多少时间,数据库中有多少时间?您的申请提出了多少请求?这些请求是否属于类别?他们中的任何一个都花了很多时间吗?您的应用程序是否发出请求并处理响应,是否需要花费大量时间来处理请求,等待回复或处理响应?
只要您知道什么会降低您的应用程序速度,那么您就知道该去哪里看。
而且,查询不会提交。更新,插入和删除提交。