位置: 编程技术 - 正文

SQL Server性能调优之缓存(sqlserver数据库性能情况)

编辑:rootadmin

推荐整理分享SQL Server性能调优之缓存(sqlserver数据库性能情况),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sqlserver2019性能,sqlserver2019性能,sqlserver2019性能,sqlserver提高性能,sqlserver提高性能,sqlserver性能调优,sqlserver性能调优实战评分,SQL Server性能调优实战,内容如对您有帮助,希望把文章链接给更多的朋友!

在执行任何查询时,SQL Server都会将数据读取到内存,数据使用之后,不会立即释放,而是会缓存在内存Buffer中,当再次执行相同的查询时,如果所需数据全部缓存在内存中,那么SQL Server不会产生Disk IO操作,立即返回查询结果,这是SQL Server的性能优化机制。

一,主要的内存消费者(Memory Consumer)

1,数据缓存(Data Cache)

Data Cache是存储数据页(Data Page)的缓冲区,当SQL Server需要读取数据文件(File)中的数据页(Data Page)时,SQL Server会把整个Page都调入内存(内存中的一个Page叫做buffer),Page是数据访问的最小单元。

当用户修改了某个Page上的数据时,SQL Server 会先在内存中修改Buffer,但是不会立即将这个数据叶写回硬盘,而是等到CheckPoint或lazy Writer进程运行时集中处理。当用户读取某个Page后,如果SQL Server没有内存压力,它不会在内存中删除这个Page,因为内存中的数据页始终存放着数据的最新状态,如果有其他用户使用这个Page,SQL Server 不需要从硬盘中读取一次,节省语句执行的时间。理想情况是SQL Server将用户需要访问的所有数据都缓存在内存中,SQL Server 永远不需要去硬盘读取数据,只需要在CheckPoint 或 lazy Write运行时把修改过的页面写回硬盘即可

2,查询计划缓存(Query Plan Cache)

存储查询语句和存储过程的执行计划,以供重用,而不需要重新编译(Compile),因为编译查询语句产生执行计划是一个非常耗费资源的过程。

二,查看内存消耗

在SQL Server中,只有内存书记员(Memory Clerk)能够分配内存,Memory Clerk会记录已经分配内存的数量,任何一个需要使用内存的对象,必须创建自己的Memory Clerk,并使用该Memory clerk来分配内存。

1,查看Memory clerk分配的内存量

对于内存结点,只在DAC中使用。

2,统计Memory Clerk分配的内存总量

消耗内存较大的Clerk是:

MEMORYCLERK_SQLBUFFERPOOL:基本是Buffer Pool中page的大小 OBJECTSTORE_LOCK_MANAGER:锁结构使用的内存,当发生严重的锁阻塞时,这表明系统中,存储大量锁,造成锁管理占用大量的内存; CACHESTORE_OBJCP:触发器和存储过程等模块(Module)的执行计划占用的缓存空间; CACHESTORE_SQLCP:动态TSQL语句,即席(Adhoc)查询和预编译(Prepared) TSQL的执行计划缓存; CACHESTORE_COLUMNSTOREOBJECTPOOL:列存储索引(ColumnStore Index)占用的缓存

3,查看缓存中的数据页

当数据页从硬盘读取到内存之后,该数据页被复制到缓冲池(Buffer Pool),供SQL Server重用。每个缓存的数据页都有一个缓存描述器(Buffer Descriptor),用户唯一标识内存中的数据页,在SQL Server实例中缓存的每一个数据页,都能从 sys.dm_os_buffer_descriptors 查看缓存描述的信息。

4,查看计划缓存

产生执行计划是十分消耗CPU资源的,SQL Server会在内存的Plan Cache中存储每个查询计划(Query Plan),及其占用的内存空间,重用次数等信息。

三,清空缓存

在调优存储过程性能时,清空缓存是必需的,缓冲池(Buffer Pool)是SQL Server的缓存管理器,包含了SQL Server的绝大部分缓存数据(Cache),例如,执行计划缓存(Plan cache),数据缓存(Data cache)等。

清空缓存常用的命令有如下三个:

Checkpoint和DBCC DROPCLEANBUFFERS 用于清理数据缓存(Data Cache)中的脏页(dirty pages)和干净页(clean pages),而DBCC FREEPROCCACHE 用于清空所有的计划缓存(Plan Cache)。

SQL Server性能调优之缓存(sqlserver数据库性能情况)

1,清空数据缓存

checkpoint 用于将脏页(Dirty Pages)写入硬盘,脏页(Dirty Pages)是指数据页读入缓存后,被修改过,导致内存中数据页和硬盘中的数据页中的内容不同;干净页(Clean Pages)是指数据页被读入缓存后,没有被修改过,所以,内存中的数据页和硬盘中的数据页中的内容相同。不管是Dirty pages 还是 Clean pages 都是Data Cache,在性能调优时,都必须从内存中清理掉,否则,查询性能将忽略掉数据从硬盘加载到内存的IO消耗,影响查询语句的执行情况。

CHECKPOINT 命令用于产生冷缓存(Cold buffer Cache),该命令将当前数据库产生的所有脏页写入到硬盘,并清理内存buffer;在执行CHECKPOINT命令之后,执行 DBCC DROPCLEANBUFFERS 用于从缓冲池中清空所有的干净页。

在性能测试时,使用DBCC DROPCLEANBUFFERS从SQLSERVER的数据缓存池中清除所有的clean缓存数据,需要注意的是该命令只移走干净的缓存,不移走脏缓存。因此,在执行这个命令前,应该先执行CheckPoint,将所有脏页写入磁盘,这样在运行DBCC RROPCLEANBUFFERS 时,可以保证所有的数据缓存被清理,而不是其中的一部分。

2,清空计划缓存

计划缓存(Plan Cache)用于缓存查询语句的执行计划,每一条查询语句在执行之后,其查询计划都会缓存Plan Cache中。在产品环境中,不要轻易清理掉Plan Cache。如果检测到某个Plan Cache产生参数嗅探问题,导致性能十分低下,推荐修改查询语句,重新编译存储过程,以单独刷新该SP的计划缓存。

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle} ) ]

计划缓存,之前叫做过程缓存(procedure cache),执行DBCC FREEPROCCACHE 命令,释放所有的计划缓存,这回导致存储过程,AdHoc 查询等查询必须重新编译,产生新的计划缓存。

四,强制重新编译执行计划

修改存储过程,触发器等模块(Module)能够使其执行计划重新编译,除此之外,还有其他方法,能够强制重新编译执行计划

1,标记,下次重新编译

使用该存储过程,标记一个执行模块(SP,Trigger,User-Defined Function)在下次执行时,重新编译执行计划

sys.sp_recompile [ @objname = ] 'object'

2,不复用执行计划

在创建存储过程时,使用WITH RECOMPILE 选项,在每次执行SP时,都重新编译,使用新的执行计划。

3,执行时重新编译

在执行存储过程时,重新编译存储过程的执行计划

4,语句级别的重新编译

在SP中,使用查询选项 option(recompile),只重新编译该语句级别的执行计划

SQL Server在执行查询之后,查询提示(RECOMPILE)指示存储引擎将计划缓存抛弃,在下次执行存储过程时,强制查询优化器重新编译,生成新的执行计划。在重新编译时,SQL Server 优化器使用当前的变量值生成新的计划缓存。

附:

冷缓存,热缓存,脏缓存和干净缓存名词解释:

净缓存页(Clean Buffer) 是指内存中未被修改的数据页,DBCC DROPCLEANBUFFERS 用于从缓冲池(Buffer Pool)移除干净页,释放Buffer。 脏缓存页(Dirty Buffer)是指数据页在内存中被修改,但是还没有写入到硬盘中,导致硬盘中的数据不同于内存,通常情况下,脏页通过CHECKPOINT进程来自动同步,CHECKPOINT 将脏页数据写入到硬盘中,使内存和硬盘文件中的数据保持一致,能够减少数据还原的时间。 冷缓存页(Cold Buffer)是指,在数据处理阶段,最近没有被使用的缓存页。 热缓存页(Hot Buffer)是指,在数据处理阶段,最近经常被使用的缓存页。

参考文档:

Recompile a Stored Procedure

What is a COLD, DIRTY or CLEAN Buffer

标签: sqlserver数据库性能情况

本文链接地址:https://www.jiuchutong.com/biancheng/320297.html 转载请保留说明!

上一篇:SQLServer存储过程实现单条件分页(sqlserver存储过程加密)

下一篇:SQL Server中使用sp_password重置SA密码实例(SQL Server中使用的SQL是)

  • 唐朝的两税法是什么
  • 什一税是什么意思?
  • 中国电信的通信网络
  • 贴现怎么计算公式
  • 进口原料免税
  • 建筑公司可以开机械租赁发票吗
  • 外地办事处能交当地社保吗
  • 汇算清缴前取得暂估发票
  • 营改增之后有了利息收入核算税费?
  • 个体户核定征收超过了怎么办
  • 在建工程预付款项记入什么会计科目
  • 跨年度发票退回如何记账
  • 员工社保异地缴纳
  • 国税注销了地税没注销现在经营异常
  • 增值税专票给客户的是第几联
  • 税收编码选错了,发票已经开出去几个月了,还有影响吗
  • 保险代理公司做什么
  • 公司帐上欠了股东很多钱有何税务风险?
  • 打车进项可以抵扣吗
  • 取得高新技术企业
  • macbookair网页全屏
  • 电脑右下角弹窗广告怎么彻底清除
  • 民间非盈利组织会计要素组成
  • 事业基金的主要账务处理
  • win7如何打开管理员权限
  • 王者荣耀花木兰打法教学
  • 公司收入没有进项税额
  • apcu php
  • 车辆被盗
  • php如何实现
  • php功能实现
  • php注册功能的实现
  • 资金集中度指标公式
  • 关于企业财务会计的说法正确的是
  • 不得抵扣的增值税怎么处理
  • 担保合同印花税税率怎么算
  • yolov3实例
  • 人工智能怎么做出来的
  • php支付宝现实支付要收费吗
  • 国企无偿划转股权免印花税
  • 公积金会计分录怎么处理2019
  • 残疾人就业保障金计入什么科目
  • 没开票的工程可以结转成本吗
  • 企业所得税季初和季末怎么算
  • 基本户理财产品有哪些
  • 土地给人家种了几十年还能要回来吗
  • 管理费用明细账余额累加吗
  • 固定资产折旧的账务处理
  • 增值税进项税额加计抵减会计处理
  • 企业筹建期间可以上市吗
  • 开专用发票可以直接写加工费这个明细吗?
  • 删除mysql重复数据
  • 增值税专用发票有几联?
  • 专票信息技术服务费
  • 产权转移数据印花税子目
  • 计提个人经营所得税怎么算
  • 物料损耗率计算例题及答案
  • 怎么冲减多计提的增值税
  • 对会计人员继续教育的目的包括了保障
  • 应收账款如何记账
  • mysql 5.6.26 winx64安装配置图文教程(一)
  • 进入bios设置u盘启动
  • linux安装视频教程
  • win10系统开机后任务栏无响应怎么解决
  • jquery手机号码正则表达式
  • python hashcode
  • node.js如何运行
  • python怎么弄中文
  • jQuery Validation Plugin验证插件手动验证
  • python批量执行命令
  • jquery中获取元素的三种方法
  • 国家税务12366电子税务局重庆
  • 江苏税务网上办税服务厅服务提醒
  • 安庆税务局窗口电话
  • 广东税务数字化平台官网
  • 爱信诺开票系统怎么安装
  • 纳税申报表保管期限为几年
  • 代销手续费增值税会计处理
  • 公司买车购置税怎么做账
  • 地税局申报个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设