基于数据库加载的条件执行(Oracle数据库)



我们遇到的情况是,我们必须根据人工输入对数据库执行冗长的查询。随着输入的变化,查询必须一次又一次地进行,并且输入可能每秒更改一次。

问题是,我们知道这会导致服务器活动在几秒钟内激增,而且由于立即或每次输入更改都有答案并不重要,这意味着我们可以执行或不执行查询。

我们希望使用的标准是数据库服务器的当前状态,并且只允许在数据库服务器处于低负载或中等负载状态时进行查询,当数据库服务器处于压力下时跳过查询。

为此,我们使用Oracle数据库,到目前为止,我们还没有从Java中找到任何方法来做到这一点,除了将一个已知的查询实际加载到服务器中并对其进行基准测试,但这本质上是向服务器添加了一些负载。所以我的问题是:有没有其他方法,特别是在Oracle数据库中,我们可以从应用程序的Java端发现数据库的负载?

根据您如何定义"低或中等负载状态",我猜点击v$osstat会给您想要的信息。当然,不断点击v$osstat也会增加服务器的负载。您可能想要编写一个作业,将v$osstat数据定期复制到您控制的表中(因此可以适当地索引),以便您的应用程序可以访问该表,而不是不断地访问动态性能视图。根据目标(即,您是试图确保其他用户有足够的资源,还是试图确保您的应用程序保持响应),您可能希望使用资源管理器来控制用户之间的资源利用率,您可能想要从应用程序异步运行查询,和/或您可能希望在中间层使用某种缓存,以避免每次都访问数据库。

最新更新