什么时候应该使用MySqlCommand.EnableCaching属性?

时间:2016-02-01 12:23:43

标签: c# mysql

EnableCaching财产的是什么?我无法在official documentation中找到有关此属性的任何文档。

MySqlCommand command = new MySqlCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.EnableCaching = [true | false];
// other codes...

任何有用的来源,评论,回答赞赏。非常感谢。

1 个答案:

答案 0 :(得分:1)

TLDR:根据需要使用它,但需要进行大量的客户端和服务器端调整才能掌握所需的结果。

摘自Mysql手册页Query Cache Configuration

  

设置GLOBAL query_cache_type值可确定查询缓存   进行更改后连接的所有客户端的行为。   各个客户端可以控制自己连接的缓存行为   通过设置SESSION query_cache_type值。例如,客户   可以禁用查询缓存用于自己的查询,如下所示:

     

mysql> SET SESSION query_cache_type = OFF;

当然,上述内容适用于命令行实用程序,但并不是说手册的概念介绍知道您使用的是哪个连接器(Java,.NET等)。这就是它运行的那个。 您的 连接器将.NET command.EnableCaching传递给mysql连接query_cache_type。这是在逐个连接的基础上,它决定了你是否希望你的结果由缓存服务,假设它们甚至被缓存。即使提出这个问题也是一个非常广泛的问题。

我试图尽可能缩小这个答案。你应该什么时候使用它?这取决于您的应用程序和您。根据您的特定测试尝试是否被缓存,它将根据具体情况而有所不同。

服务器侧

有几点需要注意,例如大小设置以及是否启用了缓存。此外,mysql守护程序是否具有发送给它的缓存的adhoc运行时设置以及在服务器重新启动时使用这些设置可以存活的内容。所以这不是一个简单的答案。

为此,我找到了一篇很好的" 第二篇"补充或超过上述参考文献中的那个。后者确实提供服务器信息。

第二条是Speed Up Your Web Site With MySQL Query Caching。我把它全部包括在内,因为经过半小时的搜索,它似乎是最好的信息,我希望它不会消失。

  

加速Web应用程序的最佳方法之一是启用   数据库中的查询缓存,缓存常用的SQL查询   在内存中,用于下一页的几乎即时访问   同样的要求。

     

这种方法如此强大的原因是你不必制作   对您的Web应用程序进行任何更改,您只需要牺牲一个   一点点记忆。这不会解决你所有的问题,   但它肯定不会受到伤害。

     

注意:如果您的应用程序经常更新表,那么查询   缓存将不断清除,你不会得到太多或任何好处   由此。这对于主要执行读取的应用程序来说非常理想   针对数据库,例如WordPress博客。这也行不通   如果你在共享主机上运行。

     

启用服务器运行时的缓存

     

您要做的第一件事就是确保您的安装   MySQL实际上有可用的查询缓存支持。最   分配确实如此,但无论如何你应该检查。

     

您需要从MySQL控制台运行此命令   告诉您查询缓存是否可用。

mysql> show variables like 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+
     

不要误以为这意味着实际启用了查询缓存,   因为大多数托管服务提供商不是   默认情况下启用此功能。奇怪的是,我的Ubuntu Feisty   安装已启用它......

     

接下来,我们需要检查并查看是否启用了查询缓存。好   需要检查多个变量,所以我们也可以这样做   一旦检查变量query%

mysql> show variables like 'query%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_alloc_block_size       | 8192    |
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 8388608 |
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
| query_prealloc_size          | 8192    |
+------------------------------+---------+
     

这是列表中的重要项目及其含义:

     

query_cache_size - 这是缓存的大小(以字节为单位)。设置   此值为0将有效禁用缓存。

     

query_cache_type - 默认情况下,此值必须为ON或1才能启用查询缓存。

     

query_cache_limit - 这是查询的最大大小(以字节为单位)   将被缓存。

     

如果query_cache_size值设置为0或您只是   想要改变它,你需要运行以下命令,保持   请记住,该值以字节为单位。例如,如果你想   分配8MB到缓存我们使用1024 * 1024 * 8 = 8388608作为   值。

SET GLOBAL query_cache_size = 8388608;
     

同样,其他选项可以使用相同的语法设置:

SET GLOBAL query_cache_limit = 1048576; 
SET GLOBAL query_cache_type = 1;
     

现在我们如何判断它是否真的有效?你可以使用SHOW STATUS   命令拉出所有以“Qc”开头的变量来查看   在幕后发生的事情。

mysql> SHOW STATUS LIKE 'Qc%';
+-------------------------+--------+
| Variable_name           | Value  |
+-------------------------+--------+
| Qcache_free_blocks      | 65     | 
| Qcache_free_memory      | 201440 | 
| Qcache_hits             | 18868  | 
| Qcache_inserts          | 2940   | 
| Qcache_lowmem_prunes    | 665    | 
| Qcache_not_cached       | 246    | 
| Qcache_queries_in_cache | 492    | 
| Qcache_total_blocks     | 1430   | 
+-------------------------+--------+
8 rows in set (0.00 sec)
     

你会在统计数据中注意到我有足够的空闲记忆。如果你的   服务器显示了很多lowmem梅子,你可能需要考虑   增加这个值,但我不会在查询上花费太多内存   缓存Web服务器...您需要保留内存   apache,php,ruby,或者你正在使用的任何东西。

     

在配置文件中启用

     

如果您希望这些更改能够在重新启动或重新启动mysql后继续存在   服务器,您需要将它们添加到/etc/mysql/my.cnf   MySQL的配置文件。请注意,它可能会有所不同   安装位置。

     

在sudo或root模式下使用文本编辑器打开文件,然后   如果文件中尚不存在这些值,请添加这些值。如果他们这样做   存在,只是取消它们。

query_cache_size = 268435456
query_cache_type=1
query_cache_limit=1048576
     

查询缓存可以显着改善   Web应用程序的速度,尤其是应用程序的速度   大多是读。使用上述方法监控状态,看看如何   它随着时间的推移而发挥作用。