标签: query-cache

为什么插入查询偶尔需要很长时间才能完成?

这是一个非常简单的问题.将数据插入表中通常可以正常工作,除了插入查询需要几秒钟的几次.(我并不想批量插入数据).所以我设置了插入过程的模拟,找出为什么插入查询偶尔会超过2秒运行.约书亚建议可以调整索引文件; 我删除了id(主键字段),但延迟仍然发生.

我有一个MyISAM表:( daniel_test_insert这个表开始完全为空):

create table if not exists daniel_test_insert ( 
    id int unsigned auto_increment not null, 
    value_str varchar(255) not null default '', 
    value_int int unsigned default 0 not null, 
    primary key (id) 
)
Run Code Online (Sandbox Code Playgroud)

我将数据插入其中,有时插入查询需要> 2秒才能运行. 此表上没有读取 - 只能通过单线程程序串行写入.

我运行完全相同的查询100,000次,以查找查询时间为何需要很长时间.到目前为止,它似乎是随机发生的.

例如,此查询花了4.194秒(插入的时间很长):

Query: INSERT INTO daniel_test_insert SET value_int=12345, value_str='afjdaldjsf aljsdfl ajsdfljadfjalsdj fajd as f' - ran for 4.194 seconds
status               | duration | cpu_user  | cpu_system | context_voluntary | context_involuntary | page_faults_minor
starting             | 0.000042 …
Run Code Online (Sandbox Code Playgroud)

mysql sql performance query-cache

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

非常慢:ActiveRecord :: QueryCache#调用

我在heroku上有一个应用程序,在Puma上运行:

workers 2
threads_count 3
pool 5
Run Code Online (Sandbox Code Playgroud)

看起来有些请求卡在中间件中,它使应用程序非常慢(非常!).我见过其他人关于这个问题的线索,但到目前为止还没有解决方案.

如果您有任何提示,请告诉我.

aactiverecord_querycache_1 !

aactiverecord_querycache_2 !

activerecord rack heroku query-cache ruby-on-rails-4

12
推荐指数
2
解决办法
3873
查看次数

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

与此问题相关

前提:

这些是我的假设,根据我的阅读,经验和理解,他们可能是错的,如果他们是,请评论,我会编辑问题.

  • 查询缓存主要与二级缓存一起使用
  • 查询缓存缓存查询+参数的标识符结果
  • 如果数据库已更改,则查询缓存存在风险,并且未将其反映到缓存中

题:

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

 hibernateTemplate.find("from Foo f where f.bar > ?", bar);
Run Code Online (Sandbox Code Playgroud)

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

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

 Query query = session.createQuery("from Foo f where f.bar > ?");
 query.setCacheable(true);
 query.setParameter(bar);
 query.list();
Run Code Online (Sandbox Code Playgroud)

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

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

顺便说一下,在相关问题中声称查询缓存不适用于会话缓存范围.我想知道这个说法或其他什么吗?

hibernate second-level-cache session-cache query-cache

10
推荐指数
1
解决办法
6470
查看次数

Yii2:如何缓存ActiveRecord关系产生的查询

我有新闻表及其相关的news_comment表.我已经使用news_comment表定义了关系newsComment.

如果我执行此查询:

$result = News::getDb()->cache(function () use($id) {
    return News::find()->with('newsComment')->where(['news.id' => $id])->one();
});
Run Code Online (Sandbox Code Playgroud)

只缓存从新闻表中获取数据的查询.从相关表中选择的查询不是.

是否可以缓存执行的主查询和查询以从相关表中检索数据,而无需单独编写它们?

php activerecord caching query-cache yii2

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

如何在会话级别启用hibernate查询缓存?

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

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

谢谢

session multithreading hibernate session-cache query-cache

6
推荐指数
2
解决办法
4297
查看次数

Hibernate二级查询缓存无法正常工作

在NHibernate Profiler中,我观察到当我在关联上使用eager fetching时,在HQL Query中使用"left join fetch"或在Criteria Query中使用.SetFetchMode()时,查询不再缓存在查询缓存中.

事实上,从我所看到的只有非常基本的查询被缓存.如果有人能够让我深入了解哪些查询被缓存以及哪些查询没有,我将标记答案.

如果它有所不同,我正在使用Memcached ....对于查询密集系统,L2缓存是否有更好的选择?

我发现这很有挑战性 - 如果我不使用急切加载我有N + 1问题(但使用缓存),如果我急切加载,我从数据库中获取所有实体,但没有缓存.

似乎有相当厚的分界线,这两种策略都有性能改进,但这两种策略都会从其他策略中抢夺性能.

如果有人能够对这条"粗线"的位置有所了解,那么我应该保持最佳性能,或者如何"让线条变得更薄"......我会很满心并标记答案.

java nhibernate caching hql query-cache

6
推荐指数
1
解决办法
3693
查看次数

如何在自定义SQL中使用ActiveRecord查询缓存

在Rails应用程序的统计信息部分,我有一些自定义SQL调用,使用模型代码中的ActiveRecord :: Base.execute()调用.他们返回各种聚合.

其中一些(相同的)查询在控制器的循环中运行,似乎它们不会被ActiveRecord查询缓存缓存.

有没有办法在单个请求中缓存自定义SQL查询?

activerecord ruby-on-rails query-cache

6
推荐指数
1
解决办法
1330
查看次数

MySQL缓存和日期函数

我曾经在性能博客中读到,最好使用PHP的日期函数在MySQL查询中设置日期,而不是使用像curdate()这样的mysql日期函数,因为mysql可以缓存查询或结果或类似的东西.有没有人对此有任何见解?它有水还是无根据?

例:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\'';
Run Code Online (Sandbox Code Playgroud)

VS

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()';
Run Code Online (Sandbox Code Playgroud)

php mysql date query-cache

6
推荐指数
1
解决办法
1658
查看次数

与所有用户使用相同的MySQL查询,而无需重新连接到数据库

我会尝试简单,所以我需要的是,执行MySQL查询(从表中选择记录)让我们说使用cron作业生成查询或者每隔5分钟生成一次查询,并将此查询或结果保存到文件或一个全局变量,如果可能的话,然后将它提供给所有客户端(即对所有用户使用相同的查询,而不必重新连接到该数据库.)现在我知道有些人会告诉我使用缓存,但我搜索了它,如果表更改将有新的缓存,我的表不断变化,现在我不在乎表是否已更改,我只想为所有客户端提供相同的查询.那可能吗?请你的建议.谢谢.

当表被修改(插入,更新,删除等)时,缓存会自动过期.我的表不断变化,即使表已被修改,也可以保存缓存吗?或者我应该寻找不同的解决方案?

php mysql caching query-cache

6
推荐指数
1
解决办法
145
查看次数

在中型sql中,mysql 5.7比mysql 5.6慢得多

我们正在升级到mysql 5.7,并发现它比它的5.6计数器部分慢得多.虽然两者具有几乎相同的配置,但5.6版本以毫秒为单位执行大部分sqls,而另一个对于中间复杂sql(例如下面的那个)大约需要1秒或更长时间.

-- Getting most recent users that are email-verified and not banned 

SELECT
    `u`.*
FROM
    `user` AS `u`
INNER JOIN `user` user_table_alias ON user_table_alias.`id` = `u`.`id`
LEFT JOIN `user_suspend` user_suspend_table_alias ON user_suspend_table_alias.`userId` = `user_table_alias`.`id`
WHERE
    (
        `user_suspend_table_alias`.`id` IS NULL
    )
AND 
    `user_table_alias`.`emailVerify` = 1

ORDER BY
    `u`.`joinStamp` DESC
LIMIT 1, 18
Run Code Online (Sandbox Code Playgroud)

这两个表都很简单,索引很好:

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(128) NOT NULL …
Run Code Online (Sandbox Code Playgroud)

php mysql sql-server query-cache

6
推荐指数
1
解决办法
1643
查看次数