如何避免这种非常繁重的查询会减慢应用程序的速度?

2023-11-22

我们有一个在生产环境中运行的 Web 应用程序,有时客户抱怨应用程序变得多么慢。

当我们检查应用程序和数据库的情况时,我们发现这个“宝贵”的查询正在由多个用户同时执行(从而对数据库服务器造成极高的负载):

SELECT   NULL AS table_cat,
         o.owner AS table_schem,
         o.object_name AS table_name,
         o.object_type AS table_type,
         NULL AS remarks
FROM     all_objects o
WHERE    o.owner LIKE :1 ESCAPE :"SYS_B_0" AND
         o.object_name LIKE :2 ESCAPE :"SYS_B_1" AND
         o.object_type IN(:"SYS_B_2", :"SYS_B_3")
ORDER BY table_type, table_schem, table_name

我们的应用程序不执行这个查询,我相信它是一个 Hibernate 内部查询。我发现很少有关于 Hibernate 为什么执行这种极其繁重的查询的信息,因此非常感谢任何关于如何避免它的帮助!

生产环境信息:Red Hat Enterprise Linux 5.3(Tikanga)、JDK 1.5、Web 容器 OC4J(Oracle 应用服务器中)、Oracle Database 10.1.0.4、JDK 1.2 和 1.3 的 JDBC 驱动程序、Hibernate 版本 3.2.6.ga、连接池库 C3P0 版本 0.9.1。

UPDATE:感谢 @BalusC 的澄清,确实是 Hibernate 执行了查询,现在我对发生的事情有了更好的了解。我将解释我们处理休眠会话的方式(是的,这是非常基本的,如果您有关于如何更好地处理它的建议,我们非常欢迎!)

我们有一个过滤器(实现 javax.servlet.Filter),当它启动(init 方法)时,它会构造会话工厂(假设这只发生一次)。然后每个发送到应用程序的 HttpRequest 都会经过过滤器并获得一个new会话并启动一个事务。当过程结束时,它通过过滤器返回,提交事务,killshibernate 会话,然后继续前进页面(我们不将 hibernate 会话存储在 Http 会话中,因为它在我们的测试中从未正常工作)。

现在我认为问题所在的部分来了。在我们的开发环境中,我们在 Tomcat 5.5 中部署应用程序,当我们启动服务时,所有过滤器都会立即启动并只有一次。在 OC4J 的生产环境中似乎不是这样工作的。我们部署应用程序,并且仅当第一个请求到达时,OC4J 才会实例化过滤器。

这让我认为 OC4J 实例化了过滤器every请求(或至少多次,这仍然是错误的),从而在每个请求上创建一个会话工厂,它执行 %&%#%$# 查询,这导致了我的问题!

现在,这是正确的吗?有没有办法让我配置 OC4J 使其仅实例化过滤器一次?

非常感谢大家花时间回复此问题!


它确实来自 Hibernate,特别是org.hibernate.tool.hbm2ddl.TableMetadata。它在每个下都用于验证架构(表和列映射)。显然,它不必要在每个生成的请求或会话上执行,而不是在应用程序启动期间仅执行一次。例如,您是否不需要在每个请求或会话上调用 Hibernate 配置器?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免这种非常繁重的查询会减慢应用程序的速度? 的相关文章

  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • 使用条件查询限制加入休眠搜索查询

    我想知道您如何将以下两个查询连接在一起 标准条件查询 Criteria result1 session createCriteria Store class add Restrictions eq department name categ
  • 在 SELECT IN 中使用 Oracle 参数时出现问题

    我在将一串数字插入sql查询时遇到问题 SELECT FROM tablename a WHERE a flokkurid IN 3857 3858 3863 3285 ORDER BY sjodategund rodun or SELEC
  • Hibernate JOIN FETCH - 对象在结果集中出现多次

    我正在使用 Spring JPA 和 Hibernate 构建 REST API 我搜索了 2 天 但没有找到任何解决方案来解决这个问题 在某些查询中 我有多个 JOIN FETCH 子句 当我执行查询时 我的结果集中多次出现父对象 实际上
  • 在触发期间更新 oracle 中的同一行?

    简短的问题 因为我不知道如何搜索这个 我可以 重新更新 同一行吗 例如 我有一个存储付款小计的字段 并且考虑到我的业务限制 我可以更新该值 我可以仅用触发器更新同一行的总计吗 预先谢谢您 顺便说一句 我正在使用 Oracle 和 PL SQ
  • OracleDataSource.getConnection 是线程安全的吗?

    我以为找到这个答案很容易 但并不是那么容易 有谁知道 OracleDataSource getConnection 方法是否是线程安全的 我不是指它返回的 Connection 对象 而是指 getConnection 本身的调用 具体来说
  • Grails/GORM“符合”标准

    是否可以使用 GORM 标准执行 in 标准 我正在寻找与以下 SQL 等效的内容 select from Person where age in 20 21 22 如果可能的话 我想语法会是这样的 def results Person w
  • 为什么在 HQL 中直接使用列名有时只能起作用?

    我有两个 HQL 查询用于快速而肮脏的单元测试 第一个看起来有点像这样 from Foo where SOME FOREIGN KEY 42 第二个看起来像这样 from Foo as foo inner join foo Bar as b
  • Hibernate:hbm2ddl.auto=生产中更新?

    是否可以运行配置为 Hibernate 的应用程序hbm2ddl auto update在生产环境中更新数据库架构 不 这不安全 尽管 Hibernate 团队尽了最大努力 但您根本不能依赖自动更新生产中 编写您自己的补丁 与 DBA 一起
  • spring 如何允许延迟加载?

    如果您在 Dao 方法中有一个调用 例如 伪代码 return getHibernateTemplate 通过 id 获取 现在假设该实体有一个延迟加载的集合 使用 hibernateTemplate 辅助方法从 Dao 返回后 会话如何保
  • Oracle:如何获取刚刚插入的行的序列号?

    如何获取刚刚插入的行的序列号 插入 返回 declare s2 number begin insert into seqtest2 x values aaa returning seq into s2 dbms output put lin
  • 如何在 Oracle PLSQL 中提交单个事务

    我需要编写一个 PL SQL 过程 在这个过程中 我需要在其自己的事务范围内调用另一个过程 并提交它 无论主事务是否失败或提交 换句话说 我需要类似的东西REQUIRES NEW交易传播 就像是 procedure mainProcedur
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 从函数内的 SELECT 返回一个变量

    我正在尝试创建一个返回 varchar 的函数 其中一个字段形成一个选择 即聚合字段 我收到下一个错误 ORA 01422 exact fetch returns more than requested number of rows 我的理
  • 弹簧隔离支持吗? SQL快照隔离

    我们正在使用 SQL Server 快照隔离可能是提高性能和解决一些死锁问题的好方法 假设我们确实需要更改为快照隔离 我似乎找不到一种简单的方法来在 Springs 上启用快照隔离 Transactional 我发现以下 hibernate
  • JPA2 中是否有 OnDelete 的等效注释

    import org hibernate annotations OnDelete OnDelete action org hibernate annotations OnDeleteAction CASCADE List
  • 循环预定义值

    有没有办法在 oracle 中执行 for every 如下所示 begin for VAR in 1 2 5 loop dbms output put line The value VAR end loop end 我知道你可以这样做 b
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 如何升级 Hibernate 4.3 --> 5.2?

    我用 Google 搜索了一下 但没有看到任何将 Hibernate 升级到 5 2 的教程 我唯一能找到的是 http hibernate org search documentation migrate 5 0 http hiberna
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • CSS:根据后备字体设置字体粗细

    我正在尝试根据选择的字体设置元素的字体粗细 例如 我可能正在尝试做这样的事情 h1 font family Arial Narrow Impact sans serif font weight 假设如果用户的系统上安装了 Arial Nar
  • 将 C99 代码转换为 C89

    如何将c99源代码自动转换为c89 我想用Visual C 编译c99库 但MSVC只支持c89 许多更改只是语法上的 例如结构初始值设定项 您可以编写一个工具来自动 de c99 代码 这个预处理器存在吗 基于 Clang 的源到源转换器
  • 如何使用 php 检查 $_GET['id'] 是否已设置且不为空

    这是一段php代码 if isset GET id do something else redirect index php redirect is a function 现在 如果设置了 id 例如 index php id 12 则执行
  • 在 MATLAB 中显示 CPU 内核利用率

    无论如何 任何功能等 都要显示CPU cores utilization in MATLAB in a GUI喜欢我们的Task Manager窗口 性能选项卡 Thanks 据我所知 没有任何 Matlab 函数可以在进程使用级别访问系统
  • 鼠标焦点没有轮廓,但键盘焦点仍有轮廓?

    当页面的元素获得焦点 例如链接或按钮 时 它们会显示轮廓 我希望此轮廓仅在键盘 而不是鼠标 赋予该元素焦点时显示 是否可以通过 JavaScript 确定该元素如何获得焦点 如果是这样 我如何控制浏览器自己的大纲功能 浏览器使用CSSout
  • 无法在 php 中解码 JSON 字符串

    我有以下 JSON 字符串 我尝试使用 php json decode 但 postarray 进行解码 总是 NULL 不明白这是为什么 在 Debian 5 0 Linux 上运行 php 客户端 API 版本 gt 5 0 51a J
  • 如何使用更短的名称调用 Perl 类?

    我正在编写一个 Perl 模块Galaxy SGE MakeJobSH与面向对象 我想用MakeJobSH gt new 代替Galaxy SGE MakeJobSH gt new 或其他一些简称 我怎样才能做到这一点 您可以建议您的用户使
  • ListView 在滚动期间更改项目

    我正在使用自定义 ArrayAdapter 来实现 ListFragment 来填充列表 每个行项目都有一个 ImageView 和三个 TextView 数据通过 XML 进行解析 图像进行异步加载 我遇到的问题是 ListView 填充
  • 为什么我在 Windows SDK 中找不到 cfgmgr32.lib?

    我正在尝试使用配置管理器 API 例如CM Get Device ID 文档说要链接到cfgmgr32 lib 但是 当我这样做时 我从链接器收到一条错误消息 错误 1 错误 LNK1104 无法打开文件 cfgmgr32 lib 我找不到
  • 如何在 Android 中使用系统提供的图标(例如 Expander_ic_maximized)

    你能告诉我如何使用android的图标expander ic maximized吗 我发现在frameworks base core res res drawable hdpi expanderic minimized 9 png 这是我的
  • 给元素添加点击事件?

    如何将单击事件分配给任意范围 eg lt span id foo gt foo lt span gt 在 ST2 应用程序中 我有一个简单的例子来说明我想做的事情的想法 在示例中 我写了字母A B C我想告诉用户他们点击了哪个字母 这是一张
  • 如何在 SharedPreferences 中存储整数数组?

    我想使用保存 调用整数数组共享首选项 这可能吗 您可以尝试这样做 将整数放入字符串中 用字符 例如逗号 分隔每个整数 然后将它们保存为字符串 SharedPreferences prefs getPreferences MODE PRIVA
  • 如何在 Swift 3 中声明具有新优先级组的指数/幂运算符?

    Xcode 8 beta 6 的 Swift 3 发生了变化 现在我无法像以前那样声明我的操作符 infix operator public func radix Double power Double gt Double return p
  • 无法让自定义存储库工作

    我正在遵循 Symfony2 教程 第 4 章 但我在检索时遇到问题getLatestBlogs我的自定义存储库中的方法 我在 Linux Mint 上使用 Symfony 2 2 和 Phar 我自己创建了存储库 但我很困惑 我收到此错误
  • 如何将焦点设置到已经处于运行状态的应用程序?

    我开发了一个 C Windows 应用程序并创建了它的 exe 我想要的是 当我尝试运行应用程序时 如果它已经处于运行状态 则激活该应用程序实例 否则启动新应用程序 这意味着我不想多次打开同一个应用程序 使用以下代码将焦点设置到当前应用程序
  • 估计由一组点生成的图像面积(Alpha 形状??)

    I have a set of points in an example ASCII file showing a 2D image I would like to estimate the total area that these po
  • MySQL“IN”子句中的逗号分隔值

    我的一个表中有一个列 其中存储多个用逗号分隔的 id 有没有一种方法可以在查询的 IN 子句中使用此列的值 专栏 city 的值如下6 7 8 16 21 2 我需要用作 select from table where e ID in Se
  • 执行 argc=0 的进程

    是否可以执行 argc 0 的进程 我需要执行一个程序 但它的 argc 等于 0 非常重要 有没有办法做到这一点 我尝试在命令行中放入 2 32 个参数 这样看起来就好像 argc 0 但参数数量有最大限制 您可以编写一个程序来调用exe
  • 如何使用单个锚标记打开多个链接

    所以这是一个简单但有趣的问题 如何使用单个链接打开多个链接 a 元素 使用它只会打开第一个href a href http www yahoo com target blank Click Here a 你当然可以尝试这个 Demo a h
  • 如何避免这种非常繁重的查询会减慢应用程序的速度?

    我们有一个在生产环境中运行的 Web 应用程序 有时客户抱怨应用程序变得多么慢 当我们检查应用程序和数据库的情况时 我们发现这个 宝贵 的查询正在由多个用户同时执行 从而对数据库服务器造成极高的负载 SELECT NULL AS table