- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我使用 Eclipselink 作为 OracleDB 的 ORM,但遇到了性能问题。
我正在执行这样的代码:
entityManager
.createNamedQuery(RoleToPermissionEntity.FIND_BY_APPLICATION_ROLE, RoleToPermissionEntity.class)
.setParameter(RoleToPermissionEntity.APPLICATION_ROLES_QUERY_PARAM, applicationRoles)
.getResultList();
带有命名查询:
SELECT mapping
FROM RoleToPermissionEntity mapping
WHERE mapping.applicationRole IN :applicationRoles
ORDER BY mapping.id
实体管理器由@PersistenceContext
设置。
对于 3 个给定的应用程序角色,应用程序获取 123 行(从 393 行开始),每行 9 列(2 个带时区的时间戳、3 个数字、4 个短 varchar)。
我检查了执行时间,作为执行给定代码之前和之后 System.nanoTime()
之间的差异。无论是第一次执行还是连续第十次执行,大约需要 550 毫秒。我的假设是它应该更快。
我的第一个猜测是查询有问题,所以我检查了 Eclipselink 日志。执行的查询是:
SELECT *all_columns*
FROM *table_name*
WHERE (APPLICATION_ROLE IN (?,?,?)) ORDER BY ID
bind => [3_application_roles]
对我来说看起来不错。我尝试将其作为 native 查询执行,但结果是相同的。我还尝试了其他查询,例如 SELECT * FROM table_name
,但时间仍然约为 500-600 毫秒。
这次我想进行一些比较,因此我手动创建了数据库连接并执行了如下查询:
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection(database_args);
Statement statement = connection.createStatement();
statement.executeQuery(query);
我执行了好几次,第一次(建立连接时)花了相当长的时间,但接下来花了大约 50-60 毫秒。
我的第二个猜测是连接池有问题。我试图在 Eclipselink 文档中找到一些内容,但我只注意到参数:
<property name="eclipselink.connection-pool.default.initial" value="1"/>
<property name="eclipselink.connection-pool.default.min" value="16"/>
<property name="eclipselink.connection-pool.default.max" value="16"/>
应该设置。是的,但问题仍然存在。
我的 persistence.xml 的内容:
<persistence>
<persistence-unit name=unit transaction-type="JTA">
<jta-data-source>datasource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<!-- cache needs to be deactivated for multiple pods -->
<!-- https://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching -->
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<!--<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>-->
<property name="eclipselink.weaving" value="false"/>
<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.oracle.Oracle12Platform"/>
<property name="eclipselink.connection-pool.default.initial" value="1"/>
<property name="eclipselink.connection-pool.default.min" value="16"/>
<property name="eclipselink.connection-pool.default.max" value="16"/>
</properties>
</persistence-unit>
</persistence>
我可以采取什么措施来解决此问题?
最佳答案
几个小时后我发现了问题。 OJDBC 的默认获取大小为 10,因此随着行数的增加,获取时间会增加得非常快。
奇怪的是:这是我的第一个想法,所以我尝试设置 <property name="eclipselink.jdbc.fetch-size" value="100"/>
在persistence.xml
。它不起作用,所以我跳到其他解决方案。今天我将其设置为 query.setHint("eclipselink.jdbc.fetch-size", 100)
的单个查询并且它有效。
关于java - 使用 Eclipselink 从 OracleDB 获取数据时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61573091/
我主要根据 EclipseLink 网站上的教程编写了以下代码: Partner p = new Partner(); p.setId(1); p.setKey("a");
我主要根据 EclipseLink 网站上的教程编写了以下代码: Partner p = new Partner(); p.setId(1); p.setKey("a");
我目前尝试在 WebLogic Server 12c 中运行 Docx4j。 WebLogic Server 12c 随 EclipseLink 2.3.2 一起提供。 有一个类似的Post描述不幸的
例如,在 EclipseLink 中使用 @AdditionalCriteria 很容易过滤掉软删除的实体,但是有什么方法可以在执行特定查询之前暂时禁用它? 最佳答案 是的,这是可能的,有一个简单的解
我们正在考虑从 Oracle Kodo JDO 迁移到 TopLink 11g JPA。但我发现 EclipseLink 确实存在,而且似乎更应该感谢 Toplink。目前关于它的维基文章指出 Ecl
我正在使用 h2 为使用 Eclipselink、Arquillian 和 Weblogic 12.1.1 的应用程序设置集成测试 这是我的实体: @Entity @Table(name = "AFI
我正在创建一个简单的应用程序,我将在其中使用对象关系映射。我听说过 eclipselink JPA 并做了一个 POC。看起来就像在我本地工作。 我脑子里有两个问题。 eclipselink 与环境有
加载有什么区别: 对比 我可以看到在 maven“EclipseLink”中命名的 Eclipselink 比另一个有更多的类和实用程序......例如目标数据库: org.eclipse.per
我的目标是学习 JavaEE,还有什么比参与项目更好的方法呢?因此,我开始创建一个股票市场模拟 Web 应用程序。当然,一个人拥有一些由公司代码 (company_id) 标识的股票以及所拥有的相关股
Bundle org.eclipse.persistence.extension_2.7.0.qualifier.jar(我安装到 osgi 框架)包含类 org.eclipse.persistenc
我正在尝试向我的 Spring 数据 jpa 存储库添加 Multi-Tenancy 支持。我想为每个请求动态设置租户 ID,但它不适用于自定义查找器 查找* 存储库上的方法。 我已遵循此指南:htt
我使用 Spring Data JPA 和 EclipseLink 2.5.2 作为我的 JPA 提供程序。我使用的数据库是 PostgreSQL。我有一个具有自动递增序列号的表,如下所示: CREA
我无法在单元测试中找到 ecbDB JTA 数据源。 对于 RESOURCE_LOCAL,相同的 persistence.xml 工作。只有在 EJB 容器内,它才无法定位 JTA 数据源。 执行单元
我收到一条错误消息: 异常[EclipseLink-6004] ...对象bla不是来自这个UnitOfWork对象空间,而是来自父 session 的对象空间。该对象从未在此UnitOfWork中注
在将我的 jpa 项目部署到 Wildfly 服务器时,我收到以下警告: The collection of metamodel types is empty. Model classes may n
我定义了一些实体,现在想生成表。 我使用Eclipselink 2.5(JPA 2.1)和Glassfish 4.0,我的程序使用JKD7。 当我构建应用程序时,会显示以下消息: warning: S
我使用的是最新的 EclipseLink 版本和 MySQL 5.5(表类型 InnoDB)。我一次插入大约 30900 条记录(也可能更多)。问题是,插入性能很差:插入所有记录大约需要 22 秒(与
我在持久化实体并在持久化发生后获取 id 时遇到了问题。我可以看到数据是在数据库中创建的,具有正确的 id,但对象处的 id 仍然为 null。 这是我的实体: @Entity public clas
我使用 eclipselink 2.6.3,我需要确切地知道连接池是否由 Eclipselink 创建和使用。 如果persistence.xml我有如下设置 但是,这两种情况的日志是相同的
我正在使用 EclipseLink,并将“eclipselink.ddl-generation”属性设置为“create-tables”。创建的表中列的顺序似乎是随机的。我想要特定顺序的列 - 字段在
我是一名优秀的程序员,十分优秀!