`
xiangxingchina
  • 浏览: 523587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql 数据库缓存cache功能总结[转]

阅读更多

mysql cache功能分析:

1 mysql的cache功能的key的生成原理是:把select语句按照一定的hash规则生成唯一的key,select的结果生成value,即 key=>value。所以对于cache而言,select语句是区分大小写的,也区分空格的。两个select语句必须完完全 全一致,才能够获取到同一个cache。

2 生成cache之后,只要该select中涉及到的table有任何的数据变动(insert,update,delete操作等),相 关的所有cache都会被删除。 因此只有数据很少变动的table,引入mysql 的cache才较有意义。关于这方面的测试,可以参考:《Query Cache,看上去很美 》一文。

所以,mysql的cache功能只适用于下列场合:数据变动较少,select较多的table。

那么。在复杂的系统中,如何使用mysql的cache功能呢,基本方法如下:

配置query_cache_type,同时改写程序。

query_cache_type 0 代表不使用缓冲, 1 代表使用缓冲,2 代表根据需要使用。

设置 1 代表缓冲永远有效,如果不需要缓冲,就需要使用如下语句:

SELECT SQL_NO_CACHE * FROM my_table WHERE …

如果设置为 2 ,需要开启缓冲,可以用如下语句:

SELECT SQL_CACHE * FROM my_table WHERE …

So,最简单又可靠的做法是:把query_cache_type设置为2,然后在需要提高select速度的地方,使用:

SELECT SQL_CACHE * FROM…

的方式进行SELECT。

【mysql cache调试笔记】

1 可以使用下列命令开启mysql的select cache功能:

SET GLOBAL query_cache_size = 102400000;

因为当query_cache_size默认为0时,是不开启cache功能的。

2 调试:

查看cache的设置:

show variables like ‘%query_cache%’;

性能监控:

show status like ‘%Qcache%’;

3 mysql cache的清理:

可以使用FLUSH QUERY CACHE语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。

RESET QUERY CACHE语句从查询缓存中移出所有查询。FLUSH TABLES语句也执行同样的工作。

 

 

数据库缓存依赖配置

 

使用SQL Server高速缓存依赖性的步骤:
一,使数据库支持SQL高速缓存依赖性。
二,使表支持SQL高速缓存依赖性。
三,在ASP.NET应用程序的web.config文件中包含SQL连接字符串。
四,以如下方式利用SQL高速缓存依赖性:
1)在代码中编程创建一个SqlCacheDependency对象。
2)给OutputCache指令添加SqlCacheDependency属性。
3)通过Response.AddCacheDependency给Response对象添加一SqlCacheDependency实例。

开启高速缓存依赖性的参数简要说明
-d 用于SQL高速缓存依赖性的数据库名。数据库可以使用连接字符串和-c选项指定(必选)
-ed 允许数据库启用SQL高速缓存依赖性。
-dd 禁止数据库启用SQL高速缓存依赖性。
-et 允许表启用SQL高速缓存依赖性。需要-t选项。
-dt 禁止表启用SQL高速缓存依赖性。需要 -t 选项。
-t 支持或禁止SQL高速缓存依赖性的表名。需要 -et 或 -dt 选项。
-lt 列出所有启用SQL高速缓存依赖性的表。

 

具体执行命令步骤如下:

(1)开启数据库的Broker。

(2)aspnet_regsql -S localhost -U sa -P sa -d Northwind -ed

注:将本机上的Northwind数据库开启高速缓存依赖功能。

(3)aspnet_regsql -S localhost -U sa -P sa -d Northwind -dd
注:禁用本机上的Northwind数据库的高速缓存依赖功能。使用次命令后,数据库中的所有表的高速缓存禁用功能都自动关闭,AspNet_SqlCacheTablesForChangeNotification表也会自动删除。

(4)aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -et
注:为Northwind数据库中的Products表开启高速缓存依赖功能。

(5)aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -dt
注:为 Northwind数据库中的Products表关闭高速缓存依赖功能。通过这个方法可以为一个数据库中的一个或多个表开启高速缓存依赖功能。为数据库和 表开启高速缓存依赖功能后,可以发现Northwind数据库中添加了一个 AspNet_SqlCacheTablesForChangeNotification表,表示配置成功了。

(6)aspnet_regsql -S localhost -U sa -P sa -d Northwind -lt
使用-lt参数可以查看该数据库中哪些表开启了高速缓存依赖功能。如果数据库关闭了高速缓存依赖或者没有启用高速缓存依赖功能,使用此命令将会得到错误提示。  

 

说明: 我们在创建数据库的缓存依赖时,需要执行步骤(1)、(2)和(4),当要取消时,执行步骤(3)和(5)。

 

关于SQL 2005的高速缓存禁用功能
SQL Server 2005支持高速缓存的编程和声明技术。在OupputCache指令中使用CommandNotification字符串就可以给页面建立基于通知的高 速缓存。可以编程指定SQL高速缓存选项,或声明该选项,但不能同时使用这两种方法。SQL2005的缓存依赖无需web.config的配置,也不用为 数据库和表开启缓存依赖功能,由于05内置了一个通知传递服务,该服务可以实现检测数据的更改、实现更改通知传递等功能,因此不需要不断轮询数据库来检测 数据更新了。
注:虽然05中的缓存依赖使用很简单,但目前我还没有找到更多的相关资料,还没有亲自进行测试,主要原因还没搞清楚怎么才能开启Broker服务,以后有时间在进行测试吧。

配置ASP.NET应用程序
使用数据库和其中的几个表支持SQL Server高速缓存禁用功能后,就要为SQL Server高速缓存禁用功能配置应用程序。
要配置应用程序,以使用SQL Server高速缓存禁用功能,首先应修改web.config文件。在此文件中,指定要使用的数据库,并让ASP.NET连接它。
如:

name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=sa"
providerName="System.Data.SqlClient" />

注: 首先使用web.config文件中的元素,建立了与数据库的连接字符串。然后通 过元素为SQL Server高速缓存功能进行配置。要是使用SQL Server高速缓存依赖性,所以必须使用节点,并启用该功能。在节点中引用数据库。
元素中的属性说明:
name:为SQL Server数据库提供一个标识符。
connectionStringName:指定连接的名称。
pollTime:指定SQL Server轮流检测的时间间隔,默认为5秒或500毫秒。SQL 2005通知功能不需要这个属性。
web.config 文件配置正确后,就可以在页面上使用SQL Server高速缓存禁用功能了。ASP.NET会把SQL Server请求放在AspNet_SqlCacheTablesForChangeNotification表的一个完全不同的线程上,看看 changeId号是否递增了,如果该数字有变化,ASP.NET就知道对底层的SQL Server表进行了修改,应检索一个新的结果集。它确定是否应进行SQL Server调用时,对AspNet_SqlCacheTablesForChangeNotification表的请求会得到一个结果,启动了SQL Server高速缓存禁用功能后,这些执行得非常快。

为页面添加多个表,如下(用分号隔开):

分享到:
评论

相关推荐

    MysqL缓存的解决方案

    * Query Cache 优化:Query Cache 是 MySQL 的一个重要功能,合理设置 Query Cache 可以提高数据库的性能。 * 创建合理的索引:合理创建单列索引及组合索引,可以提高数据库的性能。 * 优化表结构:合理设计表结构,...

    MySQL数据库毕业论文.doc

    根据提供的文档信息,本文将对MySQL数据库的关键特性及其在Jsp/Servlet网上拍卖系统中的应用进行深入...通过对这些知识点的学习和实践,可以更好地理解和掌握MySQL数据库的核心功能,并能够有效地应用于实际项目中。

    Redis架构下的MySQL数据库性能提升浅析.pdf

    使用 Redis 作 MySQL 数据库缓存,需要确定用何种数据结构存储来自 MySQL 的数据。在确定数据结构之后,还要考虑用什么标识作为该数据结构的键。MySQL 中的数据都是按照表存储的,更微观地看,这些表都是按照行存储...

    mysql数据库优化(全)

    ### MySQL数据库优化全面解析 #### 一、查询优化概述 查询优化是提升MySQL数据库性能的关键环节之一。在数据库系统中,查询操作是最常见的用户交互形式。一个查询从客户端发起,到达数据库服务器,经过处理后返回...

    java之数据库缓存

    常见的数据库缓存机制包括MySQL的InnoDB Buffer Pool,Oracle的Shared Pool等。 在Java世界里,最常用的数据库缓存解决方案有以下几种: 1. **Redis**:一个开源的、支持网络、基于内存、可持久化的键值对数据库。...

    数据库与缓存深度学习完整版

    总结来说,数据库缓存是优化数据库性能的关键手段之一,理解和掌握其原理和使用技巧,对于提升系统的响应速度和用户体验具有重要意义。在实际应用中,需要根据具体业务场景选择合适的缓存策略,并进行持续监控和调整...

    Mysql数据库性能优化

    MySQL数据库性能优化是一个涵盖多个方面的主题,涉及到数据库配置、索引优化、查询优化、存储引擎选择、内存管理以及数据模型设计等多个环节。以下是对这些关键领域的详细解释: 1. **数据库配置**: - `my.cnf` ...

    solution-mysql-redis-cache-simple:使用Redis进行RDS MySQL数据库缓存的最简单解决方案。 此解决方案依赖于Redis中密钥的过期时间(TTL)。 更新MySQL时,不会主动更新Redis。 这种方法易于实现,但是不一致的持续时间可能会很长,尤其是在读取请求非常频繁且到期时间相对较长的情况下,会生成很多长期的脏数据

    本文将深入探讨一种基于Redis的简单RDS MySQL数据库缓存解决方案,标题为"solution-mysql-redis-cache-simple",主要关注Java开发环境下的实现。 首先,Redis作为一个内存数据结构存储系统,因其高速读写能力,常被...

    mySQL数据库性能优化pdf.pdf

    总结起来,MySQL数据库的性能优化需要从多个角度考虑,包括但不限于系统配置调整、数据库结构设计、编写高效的SQL语句、合理使用查询缓存、维护合理的索引策略等。在实际工作中,通过不断监控数据库的性能,结合具体...

    清空mysql 查询缓存的可行方法

    在MySQL数据库系统中,查询缓存是一个非常重要的性能优化机制,它允许服务器存储先前执行的SQL查询及其结果,以便在后续请求相同查询时快速返回结果,而无需再次解析和执行查询。然而,这也可能导致某些情况下优化...

    MySQL缓存研究

    此外,还会涉及如何通过调整MySQL的配置参数来优化缓存使用,例如`query_cache_size`、`innodb_buffer_pool_size`等。 5. MySQL缓存实验报告 实验报告会记录实施的缓存优化实践,包括修改配置、监控性能变化、对比...

    mysql数据库5.5

    MySQL数据库5.5版是MySQL关系型数据库管理系统的一个重要里程碑,它在5.x系列中提供了许多增强的功能和优化,旨在提高性能、可扩展性和安全性。MySQL是一个开源、免费的数据库解决方案,广泛应用于Web应用程序、数据...

    mysql MySQL数据库开发优化与管理维护

    ### MySQL数据库开发优化与管理维护 #### 概览 本文档深入探讨了MySQL数据库的各个方面,包括开发、优化以及管理维护等内容。文档分为两大部分:第一部分主要关注于数据库的开发,介绍了如何选择合适的存储引擎、...

    数据库缓存:释放性能瓶颈的金钥匙

    ### 数据库缓存:释放性能瓶颈的金钥匙 在当今高度数字化的世界中,数据库作为存储、检索和管理数据的核心工具,对于确保应用的稳定性和高效性至关重要。随着数据量的不断增长以及用户对响应时间要求的提高,如何...

    MySql数据库开发的36条军规

    1. MySQL数据库架构:这部分可能涉及了对MySQL内部架构的解释,包括不同存储引擎的使用,查询缓存(Query Cache)的概念和作用,以及MySQL可插拔存储引擎架构体系。 2. 缓存(BUFFER)与缓存(CACHE)的区别:这是...

    带有缓存功能的mysqli数据库操作类

    MySQLi(Improved MySQL)是PHP中的一个扩展,用于处理MySQL数据库。它提供了面向对象和面向过程两种接口,支持预处理语句,增强了安全性并提供了更好的性能。在本案例中,数据库操作类基于MySQLi构建,通过封装...

    浅谈MySQL数据库性能优化

    MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能是数据的持久化以及数据的管理工作。本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存,插入缓存,以及连接...

    Mysql 缓存

    MySQL数据库系统在处理查询时,为了提高性能,使用了多种缓存机制,其中最常见的是查询缓存(Query Cache)。本文将深入探讨MySQL的查询缓存功能,以及如何通过全局变量`global_query_cache_size`来调整其大小。 ...

Global site tag (gtag.js) - Google Analytics