标签: hibernate

添加子查询时,PostgreSQL 查询速度非常慢

我对一个有 1.5M 行的表有一个相对简单的查询:

SELECT mtid FROM publication
WHERE mtid IN (9762715) OR last_modifier=21321
LIMIT 5000;
Run Code Online (Sandbox Code Playgroud)

EXPLAIN ANALYZE 输出:

Limit  (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1)
  ->  Bitmap Heap Scan on publication  (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1)
        Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321))
        ->  BitmapOr  (cost=8.84..8.84 rows=1 width=0) (actual time=0.971..0.971 rows=0 loops=1)
              ->  Bitmap Index Scan on publication_pkey  (cost=0.00..4.42 rows=1 width=0) (actual time=0.295..0.295 rows=1 loops=1)
                    Index Cond: (mtid = 9762715)
              ->  Bitmap Index Scan on …
Run Code Online (Sandbox Code Playgroud)

postgresql performance subquery hibernate query-performance

13
推荐指数
2
解决办法
1万
查看次数

在 Postgresql 中获取 CLOB OID 的 TEXT 值

我有一个数据库表,看起来像:

创建表格答案(
   id int 不为空,
   question_id int 不为空,
   回答文本空
)

该表最初是由 Hibernate 使用 @Lob 属性为“answer”列构建的。我当时没有意识到,但是当以这种方式设置时,Hibernate 在列中存储一个 OID 而不是实际文本。当我使用 Hibernate 检索值时一切正常,因为它会自动将 OID 转换为 CLOB 字符串,但是它正在成为一个性能问题,我想摆脱 OID。

从答案中选择 *
ID QUESTION_ID 回答
================================
1 123 55123
2 234 51614
3 345 56127
应该
ID QUESTION_ID 回答
================================
1 123 男
2 234 203-555-1212
3 345 555 Main St. New York, NY

我的愿望是在表“ANSWER_VALUE TEXT”中添加一个额外的列并执行如下操作以将实际值放入表中,然后更改 Hibernate 以不使用 @Lob 指示符

更新答案集 ANSWER_VALUE= getValueFromOID(ANSWER)

那个“getValueFromOID”函数存在吗?如果没有,我能否得到一些关于如何创建一个或至少如何获取 OID 的实际值的指示?

谢谢

postgresql hibernate

9
推荐指数
1
解决办法
1万
查看次数

生产环境中是否使用了 OPTION (RECOMPILE)?

是否OPTION (RECOMPILE)用于生产?

这个选项似乎受到了很多负面报道。值得吗?

我有一个 DBA,到目前为止,他不喜欢OPTION (RECOMPILE)Report ETL ssis 代理查询的核心思想。这些查询(据我所知)按计划的时间间隔按顺序执行。

回溯历史:

  • SQL Server 2016
  • 通过 ssis 代理运行时导致聚集索引扫描的 ETL 查询。这些查询需要几分钟才能完成并造成严重影响。
  • 通过本地存储过程运行的相同查询和参数在不到一秒的时间内执行。

等等,你确定 OPTION (RECOMPILE) 是答案吗?

  • 未知。
  • 但是在我尝试之前,我需要知道这是否是一个非常糟糕的主意。

我所知道的风险:

因此,鉴于上述情况 - 该选项是否在现实世界中实际使用?我推荐(并测试)它作为生产环境的一个选项是否可以接受?


我被要求提供更多细节。我提到我确实有其他与此主题相关的帖子。让我提供更多信息:

  • 根本问题是来自应用服务器的查询花费的时间超过 60 秒。通常这些查询需要 4 到 10 秒。经过很多痛苦,我确定超时与 ETL 查询一致。15 个查询中有 4 个是具体的。
  • 在应用程序服务器中发现了问题的根源。具体来说,隔离级别设置serializable在休眠层内;我了解到,这对于大批量生产环境来说并不是最佳选择。

让我分享其他问题:

SQL Server - 我可以手术删除一个错误的缓存查询计划还是我追求错误的想法?

为什么通过 SSIS 在 ETL 中查询很慢,但通过本地存储过程查询很快?

sql-server ssis hibernate sql-server-2016 performance-tuning

6
推荐指数
3
解决办法
1948
查看次数

为什么这个快速的 postgres 查询会出现在慢查询日志中?

在调查 Postgres 日志中的一个条目时,我注意到报告的持续时间和查询速度之间存在很大差异。

2015-07-28 17:27:26 UTC [dms_segment_3] LOG:  duration: 2924.763 ms  bind <unnamed>: SELECT  prospect.id AS prospect_id,  0,  am.id, am.customer_id, 0 FROM xxxxx.audience_member am LEFT OUTER JOIN xxxxx.campaign campaign     ON campaign.id = $1 LEFT OUTER JOIN xxxxx.end_user prospect     ON campaign.id=prospect.campaign_id        AND prospect.email_id=am.customer_id        AND prospect.end_user_type != 1 WHERE am.audience_id = $2  ORDER BY am.id limit $3
2015-07-28 17:27:26 UTC [dms_segment_3] DETAIL:  parameters: $1 = '4000013578869', $2 = '4000013744916', $3 = '500'
Run Code Online (Sandbox Code Playgroud)

在该查询上运行解释会产生更快的速度:

explain analyze
SELECT  prospect.id AS prospect_id
,  0,  am.id, …
Run Code Online (Sandbox Code Playgroud)

postgresql hibernate

5
推荐指数
1
解决办法
823
查看次数