问题标签 [query-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1271 浏览

caching - 执行 Doctrine 查询需要 4 秒以上

我们正处于项目的最后阶段并开始对其进行优化。

经过几次测试,我们意识到加载页面的大部分(如果不是全部)时间都花在了 Doctrine 上。

在 5 秒的页面加载中,3 - 4 秒仅用于 2 个 Doctrine 查询。

我们已经在 mysql 服务器和 Doctrine 以及结果缓存上启用了查询缓存,但这似乎只会使加载时间变得更糟。

据我所知,mysql 查询缓存处于活动状态:

[编辑]由于某种原因,我的其余问题已经消失,所以我再次发布[/编辑]

Qcache_free_blocks | 57
Qcache_free_memory | 22300072
Qcache_hits | 第7117
章 第3308
章 0
Qcache_not_cached | 第4537
章 第1225
章 2609

问题是缓存似乎没有被命中,大部分时间(平均 3 秒)的查询永远不会改变。

有没有人对为什么启用查询/结果缓存不会提高加载时间有任何提示?

0 投票
3 回答
4449 浏览

hibernate - 如何仅在会话级别启用休眠查询缓存?

如果我有一个在单个线程中被多次调用的查询,而我只想为该线程(或该会话,因为我每个线程使用一个会话)缓存该查询(及其结果),怎么办?我这样做?

注意:我的二级缓存已打开,但主要用于 session.get(...)。但我不想将它用于我的查询缓存,因为我只需要它在我的线程( / session )期间存在。

谢谢

0 投票
1 回答
1363 浏览

wcf - NHibernate 查询缓存和 WCF

我已经为我的一个查询启用了查询缓存,当我运行测试或控制台应用程序时,它工作正常(查询结果来自查询缓存和来自二级缓存的实体)。但是,如果我通过 WCF 服务运行相同的查询,则永远不会命中缓存。

我还检查了这两种情况下的日志,在缓存未命中之前它们实际上是相同的。

这是显示缓存放置的 NH 日志:

这是显示缓存未命中的 NH 日志:

这是 NH 的日志显示缓存命中,当不在 WCF 服务中时:

这是我用来进行查询的代码:

为什么缓存没有被命中?

0 投票
3 回答
4205 浏览

java - Hibernate 二级查询缓存不起作用急切获取

在 NHibernate Profiler 中,我观察到,当我对关联使用渴望获取时,在 HQL 查询中使用“左连接获取”或在条件查询中使用 .SetFetchMode(),查询不再缓存在查询缓存中。

事实上,据我所知,只有非常基本的查询被缓存。如果有人可以让我了解哪些查询会被缓存,哪些不会被缓存,我会标记答案。

如果有任何区别,我正在使用 Memcached.... 对于查询密集型系统,L2 缓存有更好的选择吗?

我发现这相当具有挑战性——如果我不使用急切加载,我会遇到 N+1 问题(但使用缓存),如果我进行急切加载,我会从数据库中获取所有实体,但没有缓存。

似乎有一条很粗的分界线,两种策略都有性能改进,但两种策略都从另一个策略中抢走了性能。

如果有人可以深入了解这条“粗线”的位置,我应该获得最佳性能,或者如何“使线更细”......我会非常关注并标记答案。

0 投票
3 回答
6644 浏览

hibernate - 休眠查询缓存 - 对于不在二级缓存中的对象 - 有风险吗?有用?不好的做法?

与这个问题有关

前提:

这些是我的假设,基于我的阅读、经验和理解,它们可能是错误的,如果是,请发表评论,我将编辑问题。

  • 查询缓存主要与二级缓存一起使用
  • 查询缓存缓存查询+参数的标识符结果
  • 如果数据库被更改并且它没有反映到缓存中,查询缓存是有风险的

问题:

我有一个不在二级缓存中的对象。由于一些糟糕的编程或其他限制,加载对象的代码在同一个休眠会话中被多次调用。检索使用 HQL 查找查询,例如

在添加查询缓存之前,如果上面的代码在同一个Hibernate Session中被调用N次,那么数据库有N次命中

然后我想看看如果我添加查询缓存会发生什么:

当我添加查询缓存时,我注意到在同一个会话期间,休眠不再访问数据库 N 次,每个会话只有一次。

  1. 所以我的第一个假设是 Hibernate 首先在 Session Cache 中搜索,然后在 2nd Level Cache 中搜索。这个假设正确吗?
  2. 我还假设如果Foo不在二级缓存中的对象 () 在数据库中被更改,那么跨会话范围的查询缓存将返回错误的标识符,从而返回错误的对象。那是对的吗?
  3. 是否可以肯定地说,即使对于非 2L 缓存对象,对包含不可变信息的查询使用查询缓存是一种好习惯?(例如一个查询,它的 where 子句包含一个总是返回相同结果的条件,例如“select p.ser_num where p.id = ?” 当 ser_num 和 id 对一旦创建就不会改变)

顺便说一句,在相关问题中声称查询缓存不适用于会话缓存范围。我是否误解了该声明或其他任何内容?

0 投票
1 回答
892 浏览

hibernate - Hibernate - 查询缓存/二级缓存不适用于包含子项的值对象

我一直在努力解决以下问题:
我有一个包含不同面板的值对象。每个面板都有一个字段列表。

映射:

我使用以下标准来获取值对象:

正如我所见,查询缓存仅包含主要选择,例如

RACountryPanels 和 RAFieldVO 都是二级缓存。如果我检查二级缓存内容,我可以看到它也包含 RAFields 和 RACountryPanels,并且我可以在查询缓存区域中看到 select .. from CTRY where ctry_cd_id=... 。

当我调用 servlet 时,它似乎正在使用缓存,但第二次没有。 如果我使用 JMX 检查缓存的内容,似乎一切正常,但是当我测量对象访问时间时,它似乎并不总是使用缓存。

干杯佐尔坦

0 投票
2 回答
609 浏览

ruby-on-rails - 在 ActiveRecord 单元测试中处理查询缓存是否重要?

在 Hibernate 世界中,您通常可以让单元测试看起来通过,但实际上有一些错误没有出现,因为您正在处理缓存数据。例如,您可以保存一个父级及其子级,认为它正在级联保存。如果你在保存后重新查询父集合并测试子集合的大小,它看起来没问题。但实际上 Hibernate 并没有保存孩子,而是缓存了父母,所以你正在查看未保存的孩子。解决此问题的一种方法是清除保存和查询之间的会话缓存,以便您知道数据直接来自数据库。

这是 ActiveRecord 的问题吗?如果我保存一个模型然后在同一个测试中查询它,我是否可能实际上不是从数据库中获取数据,而是从查询缓存中获取数据?我还没有看到任何试图解决这个问题的样本测试,所以我想知道是否有什么东西使它成为非问题?

0 投票
3 回答
929 浏览

nhibernate - 查询缓存如何提高 nHibernate 的性能?

查询缓存如何工作以及它如何提高 nHibernate 的性能?

0 投票
2 回答
211 浏览

sql-server - 如何跟踪查询缓存的改进?

我正在参数化我的网络应用程序的临时 sql。因此,我预计查询计划缓存的大小会减小并具有更高的命中率。也许甚至其他重要的指标也会得到改进。

我可以使用 perfmon 来跟踪它吗?如果是这样,我应该使用什么计数器?如果不是 perfmon,我如何报告此更改的影响?

0 投票
2 回答
1715 浏览

php - MySQL query cache vs caching result-sets in the application layer

I'm running a php/mysql-driven website with a lot of visits and I'm considering the possibility of caching result-sets in shared memory in order to reduce database load.
However, right now MySQL's query cache is enabled and it seems to be doing a pretty good job since if I disable query caching, the use of CPU jumps to 100% immediately.
Given that situation, I dont know if caching result-sets (or even the generated HTML code) locally in shared memory with PHP will result in any noticeable performace improvement.

Does anyone out there have any experience on this matter?

PS: Please avoid suggesting heavy-artillery solutions like memcached. Right now I'm looking for simple solutions that dont require too much time to implement, deploy and maintain.

Edit:
I see my comment about memcached deviated answers from the actual point, which is whether caching DB queries in the application layer would result in a noticeable performace impact considering that the result of those queries are already being cached at the DB level.