我们有一个spring应用程序。我们通常必须对客户端向我们公开的视图执行几个SQL查询。在一个场景中,我们的查询工作正常,但相同查询的计数(*(会产生问题。它返回org.springframework.dao.RecoverableDataAccessException - StatementCallback;
IO Error: Socket read timed out; nested exception is java.sql.SQLRecoverableException: IO Error: Socket read timed out]
我们要求客户增加oracle.jdbc.ReadTimeout
属性。
相反,他提出公开一种具体化的观点。
在这种情况下(计数查询导致超时(,物化视图是否有帮助?
如何利用物化视图来提高查询的性能
物化视图是解决问题的好方法。物化视图将查询结果存储在表中,可以显著提高性能。您的客户端似乎帮了您一个很大的忙,因为他们将负责维护支持查询的对象。
唯一潜在的缺点取决于他们如何实现物化视图。如果他们创建了一个快速刷新的物化视图,它将在每次更改数据后自动存储正确的结果。但是,快速刷新物化视图有很多局限性,而且您的客户端很可能会提供一个完整刷新的物化视图,该视图必须有时间表。如果它们提供了一个完整的刷新物化视图,请确保应用程序可以使用旧数据。
(当然,数据库超时设置可能仍然不合适。可能存在错误的配置文件、错误的sqlnet.ora参数、错误的资源管理器设置、ora-600错误等。(。您可能想找出查询超时的具体原因。并不是说我认为客户试图向你隐瞒事情;一个糟糕的DBA会说:"运气不好,解决你愚蠢的查询"。事实上,你被提供了一个物化视图,这是一个很好的迹象,表明他们真的在努力解决这个问题。(