SQL Server 高速缓存依赖分析

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

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

在SQL Server 2000中使用高速缓存禁用功能(在2005中也可以进行如下设置)
要在SQL 2000中使用高速缓存禁用功能,必须执行如下两步:
第一步是使相应的数据库支持该功能。
第二步是使要使用的表支持该功能。
例:
aspnet_regsql -S localhost -U sa -P sa -d Northwind -ed
注:将本机上的Northwind数据库开启高速缓存依赖功能。
aspnet_regsql -S localhost -U sa -P sa -d Northwind -dd
注:禁用本机上的Northwind数据库的高速缓存依赖功能。使用次命令后,数据库中的所有表的高速缓存禁用功能都自动关闭,AspNet_SqlCacheTablesForChangeNotification表也会自动删除。
开启表的高速缓存依赖功能。
例:
aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -et
注:为Northwind数据库中的Products表开启高速缓存依赖功能。
aspnet_regsql -S localhost -U sa -P sa -d Northwind -t Products -dt
注:为 Northwind数据库中的Products表关闭高速缓存依赖功能。通过这个方法可以为一个数据库中的一个或多个表开启高速缓存依赖功能。为数据库和表开启高速缓存依赖功能后,可以发现Northwind数据库中添加了一个 AspNet_SqlCacheTablesForChangeNotification表,表示配置成功了。
aspnet_regsql -S localhost -U sa -P sa -d Northwind -lt
使用-lt参数可以查看该数据库中哪些表开启了高速缓存依赖功能。如果数据库关闭了高速缓存依赖或者没有启用高速缓存依赖功能,使用此命令将会得到错误提示。

关于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连接它。
如:
    <connectionStrings>
         <add name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=sa"
             providerName="System.Data.SqlClient" />
     </connectionStrings>
     <system.web>
      <caching>
         <sqlCacheDependency enabled="true" pollTime="500">
           <databases>
             <clear/>
             <add name="Northwind" connectionStringName ="NorthwindConnectionString" pollTime="500"/>
           </databases>
         </sqlCacheDependency>
       </caching>
     </system.web>
注:首先使用web.config文件中的<connectionStrings>元素,建立了与数据库的连接字符串。然后通过<caching>元素为SQL Server高速缓存功能进行配置。要是使用SQL Server高速缓存依赖性,所以必须使用<sqlCacheDependency enabled="true">节点,并启用该功能。在<databases>节点中引用数据库。
<add>元素中的属性说明:
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高速缓存禁用功能后,这些执行得非常快。

为页面添加多个表,如下(用分号隔开):
<%@ OutputCache Duration="3600" VaryByParam="none" SqlDependency="Northwind:Employees;Northwind:Customers" %>

(0)

相关推荐

  • 优化SQL Server的内存占用之执行缓存

    首先说明一下SQL Server内存占用由哪几部分组成.SQL Server占用的内存主要由三部分组成:数据缓存(Data Buffer).执行缓存(Procedure Cache).以及SQL Server引擎程序.SQL Server引擎程序所占用缓存一般相对变化不大,则我们进行内存调优的主要着眼点在数据缓存和执行缓存的控制上.本文主要介绍一下执行缓存的调优.数据缓存的调优将在另外的文章中介绍. 对于减少执行缓存的占用,主要可以通过使用参数化查询减少内存占用. 1.使用参数化查询减少执行缓存

  • 浅析SQL Server中的执行计划缓存(下)

    在上篇文章给大家介绍了SQL Server中的执行计划缓存(上),本文继续给大家介绍sqlserver执行计划缓存相关知识,小伙伴们一起学习吧. 简介 在上篇文章中我们谈到了查询优化器和执行计划缓存的关系,以及其二者之间的冲突.本篇文章中,我们会主要阐述执行计划缓存常见的问题以及一些解决办法. 将执行缓存考虑在内时的流程 上篇文章中提到了查询优化器解析语句的过程,当将计划缓存考虑在内时,首先需要查看计划缓存中是否已经有语句的缓存,如果没有,才会执行编译过程,如果存在则直接利用编译好的执行计划.因

  • sqlserver 中一些常看的指标和清除缓存的方法

    如何查看磁盘I/O操作信息 SET STATISTICS IO ON 命令是一个 使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息. 我们在分析索引性能的时候,会非常有用. 启用了这个属性后,我们在执行 SQL 语句后,会收到类似如下的信息,这有利于我们分析SQL的性能: (3999 row(s) affected) 表 'ChargeCL'.扫描计数 1,逻辑读取 9547 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取

  • 浅析SQL Server中的执行计划缓存(上)

    简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询优化(Optimization,有时候也被称为简化).执行(Execution).除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果.但查询优化器不是本篇的重点,本篇文章主要讲述查询优化器在生成执行计划之

  • 开启SQLSERVER数据库缓存依赖优化网站性能

    很多时候,我们服务器的性能瓶颈会是在查询数据库的时候,所以对数据库的缓存非常重要,那么有没有一种方法,可以实现SQL SERVER数据库的缓存,当数据表没有更新时,就从缓存中读取,当有更新的时候,才从数据表中读取呢,答案是肯定的,这样的话我们对一些常用的基础数据表就可以缓存起来,比如做新闻系统的新闻类别等,每次就不需要从数据库中读取了,加快网站的访问速度. 那么如何开启SQLSERVER数据库缓存依赖,方法如下: 第一步:修改Web.Config的<system.web>节的配置,代码如下,让

  • SqlServer 执行计划及Sql查询优化初探

    网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出仅几S甚至几MS的时间差的例子来证明着什么(有点可笑),让许多人不知道其是对还是错.而SQL优化又是每个要与数据库打交道的程序员的必修课,所以写了此文,与朋友们共勉. 谈到优化就必然要涉及索引,就像要讲锁必然要说事务一样,所以你需要了解一下索引,仅仅是索引,就能讲半天了,所以索引我就不说了(打很多字是很累的,况且我也知之甚少),可以去参考相关的文章,这个网上

  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能

    通过观察执行计划,发现之前的执行计划在很多大表连接的部分使用了Hash Join,由于涉及的表中数据众多,因此查询优化器选择使用并行执行,速度较快.而我们优化完的执行计划由于索引的存在,且表内数据非常大,过滤条件的值在一个很宽的统计信息步长范围内,导致估计行数出现较大偏差(过滤条件实际为15000行,步长内估计的平均行数为800行左右),因此查询优化器选择了Loop Join,且没有选择并行执行,因此执行时间不降反升. 由于语句是在存储过程中实现,因此我们直接对该语句使用一个undocument

  • SQLSERVER中得到执行计划的两种方式

    得到执行计划的方式有两种: 1.一种是在指令的前面打开一些开关,让执行计划信息打在结果集里,这种方法比较适合在一个测试环境里对单个语句调优. 这些开关最常用的有 复制代码 代码如下: SET SHOWPLAN_ALL ON SET SHOWPLAN_ALL ON --(是不是reuse了一个执行计划,SQSERVERL有没有觉得缺少索引),只能在XML的输出里看到 SET STATISTICS PROFILE ON 还有如果使用SSMS的话,可以用快捷键:Ctrl+L 小写L 他会执行你的语句并

  • SQL Server 高速缓存依赖分析

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

  • jdbc连接sql server数据库问题分析

    SQL Server连接中问题还真多.不进行设置还真连接不上,这里小记一下!(部分资料来源于互联网) JDBC连接MySQL出现的问题 (例子里面自带JDBC2005的驱动,在lib文件夹下,右键点击Build Path--->add to build build path 即可) 运行connectionSqlServer2005包下的JavaConnectionSQL类即可! 1. 驱动问题: JDBC2005与JDBC2008一定要对号入座,否则会报错!(本人用的是2008) 2. 服务启

  • PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】

    本文实例讲述了PHP连接SQL Server的方法.分享给大家供大家参考,具体如下: 之前我们实现了用thinkPHP5.1框架搭配的项目,实现了thinkPHP5.1与本机sql server 2008 R2的连接,并且把数据内容显示在页面上. 本机的使用工具:1.编译工具PhpStorm 2.WampServer 集成工具(Apache 2.4.33:PHP 7.0.29) 在连接过程中,有两种方法可以连接. 第一种(用到ThinkPHP框架的,配置微软自带的驱动): 先把tp5的项目放在w

  • 一文分析SQL Server中事务使用的锁

    目录 序 SQL Server使用的锁及锁对象 SQL Server执行Select时使用的锁 SQL Server执行insert时使用的锁 SQL Server执行update时使用的锁 总结 序 本文属于基础知识的回顾,在日常技术交流和日常工作中经常发现有些同事了解关于数据库事务的基本知识,会看SQL语句的执行计划,也知道数据库有X锁.U锁和S锁等各种锁,但是对于这些锁在数据库事务执行期间是如何工作?为何这样配合才能完成数据库事务?数据库是如何对于各种资源加锁的?等等这类的问题不太了解,那

  • SQL Server ltrim(rtrim()) 去不掉空格的原因分析

    原因:中间存在回车符或者换行符,所以要先将此符号替换掉: LTRIM(RTRIM(REPLACE(REPLACE( A,char(13),''),char(10),'') )) LTRIM(A) ---去换左边空格 RTRIM(A) ---去换右边空格 REPLACE( A,char(13),'')----将回车符替换为'' REPLACE( A,char(13),'')----将换行符替换为'' 总结 以上所述是小编给大家介绍的SQL Server ltrim(rtrim()) 去不掉空格的原

  • Sql Server 死锁的监控分析解决思路

    1 背景 1.1 报警情况 最近整理笔记,打算全部迁移到EVERNOTE.整理到锁这一部分,里边刚好有个自己记录下来的案例,重新整理分享下给大家. 某日中午,收到报警短信,DB死锁异常,单分钟死锁120个. 死锁的xml文件如下: <deadlock-list> <deadlock victim="process810b00cf8"> <process-list> <process id="process810b00cf8"

  • SQL Server内存遭遇操作系统进程压榨案例分析

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的顺序如下: 1.首先打开Cacti监控,发现最近CPU均值在某天之后骤然上升,并且可以看到System\Processor Queue Length 和 sqlservr\%ProcessorTime 也在显著的变化. 2.从最容易入手的低效SQL开始,考虑是不是最近业务做了什么修改?连接到该SQL

  • Sql Server 2012 分页方法分析(offset and fetch)

    其中 offset and fetch 最重要的新特性是 用来 分页,既然要分析 分页,就肯定要和之前的分页方式来比较了,特别是 Row_Number() 了,在比较过程中,发现了蛮多,不过最重要的,通过比较本质,得出了优劣,也和大家一起分享下. 准备工作,建立测试表:Article_Detail,主要是用来存放一些文章信息,测试的时间,都是从网易上面转载的新闻,同时,测试表数据字段类型是比较均匀的,为了更好的测试,表结构如下图: 内容: 数据量:129,991 条记录 语法分析 1. NTIL

  • 浅谈SQL Server中统计对于查询的影响分析

    而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息. 如何查看统计信息 查看SQL Server的统计信息非常简单,使用如下指令: DBCC SHOW_STATISTICS('表名','索引名') 所得到的结果如图1所示. 图1.统计信息 统计信息如何影响查询 下面我们通过一个简单的例子来看统计信息是如何影响查询分析器.我建立一个测试表,有两个INT值的列,其中id为自增,ref上建立非聚集索引

  • SQL Server 数据页缓冲区的内存瓶颈分析

    SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度.因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面. 当数据页缓存区出现内存不足,则会出现查询慢,磁盘忙等等问题. 分析方法:主要是用到性能计数器. 查看如下性能计数器: 1. SQL SERVER:Buffer Manager-Lazy Writes/sec:内存不足则会频繁调用Lazy Writer把数数据写入磁盘,此值会经常不为0. 2. SQL SERVER:Buffer

随机推荐