数据库连接特别慢

数据库连接特别慢,第1张

ping一下数据库服务器,看下延时。

如果延时正常的话,然后查询下连接数,检查是不是创建了大量连接。

再没有问题就尝试sqlplus直连。正常情况数据库主机通信不是很大,一般是程序中有大量创建连接引起的。

1.connection不知道你是采用什么方式获取的,如果不是从连接池里取,你每connection.close()一次,下次get的时候会重新建立实际物理链接,这样会相当耗时。所以你检查一下是在获取connection时耗的时间多,还是在execute的时间多。代码:

long startTime = System.currentTimeMillis()

conn = getConnection()// execute()

long endTime = System.currentTimeMillis()

System.out.println("获取链接的时间:" + (endTime - startTime))

执行的类似;

2.从你的存储过程的逻辑来说,要条件查询,更新某个字段的值,和入库,这三个步骤应该有输入参数的,那么你的这个参数是怎么传入的?

个人觉得你的这个存储过程可以优化成SQL来执行,效率应该会更好:

首先,你把输入参数放入一个临时表;

比如结构是:

_id _field

查询的条件 更新的字段

// 更新_table中存在的记录的_field字段,并且只更新_table与_tmp键值相等的记录

UPDATE _table t SET _field=(SELECT MAX(_field) FROM _tmp WHERE _id=t._id) WHERE EXISTS (SELECT 'X' FROM _tmp WHERE _id=t._id)

// 选择_table与_tmp键值不相等的记录(即_table中不存在的记录)插入_table

INSERT INTO _table (_id,_field) (SELECT _id,_field FROM _tmp t WHERE NOT EXISTS (SELECT 'X' FROM _table WHERE _id=t._id))

这样的话,每次都是两个批量 *** 作,而且不需要输入参数,直接调用就可以,唯一需要多做的工作就是做临时表。

1.采用连接池技术,可以很大程度上提高数据库连接的利用率,避免频繁创建、销毁数据库连接带来的性能影响。

2.正确使用SQL批处理以及事务控制,优化大量SQL执行的效率。

3.使用合适的缓存技术。

4.结合数据库特性以及实际数据情况优化SQL语句,例如数据库表增加索引、使用数据库内置的函数等等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9931495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存