如何降低select sysdate from dual的消耗

[复制链接]
查看11 | 回复9 | 2013-10-30 05:51:12 | 显示全部楼层 |阅读模式
之前做项目时,有一个要求:"不允许使用select sysdate from dual" 从数据库获取时间

原因是,这个语句运行频繁太高,导致cpu占用较多

但,最后实现时,还是使用select sysdate from dual去获得时间

因为各个模块,部署在不同机器上,用机器时间不统一。

这个问题,不知道版里面有没有搞程序开发的,你们是是怎么解决获取时间问题的?

有没有什么办法,降低从数据库取时间对数据库的消耗

回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
做个function直接return to_char(sysdate,'yyyyMMdd')
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
本帖最后由 皇家救星 于 2013-10-26 19:21 编辑
ls这个消耗比原来的sql还高 我还要执行select function_name from dual
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
我倒觉得语句本身是没什么问题的。
关键是相关的程序的获取的时间的频率过高问题,这点应该是可以通过优化程序逻辑来达到降低语句的执行频率。
例如,一个PKG过程的处理过程执行速度很快,过程处理需要100次的调用系统日期,可以考虑通过一个中间参数的办法,参数获取sysdate,然后这个过程别的地方直接用这个参数的值就可以了。当然,也要考虑别的相关的问题,例如优化之后会不会导致时间失真等。
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
升级硬件配置,
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
samt007 发表于 2013-10-26 21:27
我倒觉得语句本身是没什么问题的。
关键是相关的程序的获取的时间的频率过高问题,这点应该是可以通过优化 ...

之前项目是java + c++
项目比较大有很多模块也有很多机
每个模块又有许多自己的程序
除了接口程序,其它基本是独立的但时间要求保持一致
你这个方法取,sysdate就变成固定了,反应不了实际时间(100次的循环都用了同一个sysdate)
不能满足需求
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
ZALBB 发表于 2013-10-26 21:40
升级硬件配置,

已经是ibm最新的小型机了 国内暂时采购不到更高端的了
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
硬件上已经基本无优化空间,逻辑实际上,还要各位指点一下
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
我觉得可以这样~把服务器的各个时间做一个时间同步~然后用程序取机器的时间
回复

使用道具 举报

千问 | 2013-10-30 05:51:12 | 显示全部楼层
NTP同步后,再从时间服务器不是很好吗?在OS级别?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行