易智造服务中心
  • 首页
  • 授权申请
  • 版本记录
  • 帮助文档
  • 关于
  • 帮助中心
    帮助首页
  • 环境准备
    操作系统
    数据库
    依赖项和运行时
  • 新手入门
    开始使用
    数据准备
    权限管控
    常见问题
  • 智能制造
    计划模块
    生产模块
  • 质量管理
    质量规范
    质检模块
  • 设备模具
    设备模块
    工装/模具模块
  • 供应链
    采购模块
    仓管模块
    销售模块
  • 数据挖掘
    系统对接
    数据分析
  • 工作流
    工作流实现
操作系统 更多
  • 检测Windows系统下的硬件性能 2024-12-27
  • 如何安装CentOS系统 2024-01-25
  • 如何安装Ubuntu Server系统 2024-01-25
  • 如何安装WIndows Server系统 2024-01-25
  • 客户端支持的操作系统环境 2024-01-25
数据库 更多
  • 数据库编程一些可优化的事项 2024-12-18
  • Microsoft SQL Server数据库备份 2024-03-05
  • 数据库连接异常的说明 2024-02-01
  • Sql Server中的日期与时间函数 2024-01-31
  • SQL Server 中WITH AS的使用 2024-01-31
依赖项和运行时 更多
  • Windows下基本环境与功能的选择(IIS) 2024-01-25
  • Linux下运行时ASP.NET Core的安装 2024-01-25
  • WIndows下运行时ASP.NET Core的安装 2024-01-25
  • Windows环境下依赖项VC++的安装与注意事项 2024-01-25
  • Windows下系统依赖项Redis的安装方式 2024-01-25
开始使用 更多
  • 系统打印模板设置说明 2025-02-17
  • 系统配置appsettings.json参数说明 2024-03-20
  • 授权步骤和常见问题 2024-01-25
  • 版本更新后引起的授权异常处理 2024-01-25
  • 授权过期了如何处理 2024-01-25
数据准备 更多
  • 模块菜单管理 2025-01-16
  • 批量导入物料缩略图 2024-12-19
  • 权限管理 2024-03-05
  • 如何批量上传物料文件 2024-02-01
权限管控 更多
  • 为什么我的账号看不到任务列表/派工列表/报工列表 2025-02-21
  • 如何控制产线看板报工记录界面按钮权限 2024-11-26
  • 打印组件支持数据编辑功能 2024-08-13
  • 角色用户设置 2024-03-05
常见问题 更多
  • 系统操作时的常见报错的解决方法 2024-08-05
  • 系统上传文件异常的处理方法 2024-04-12
  • 系统打印出来的标签模糊怎么处理 2024-03-26
  • HC-25系列安灯集成配置 2024-02-03
  • 多功能自定义键盘如何设置按键 2024-01-25
计划模块 更多
  • 库存返工生产订单 2025-01-18
  • 生产主流程构建操作手册 2025-01-18
生产模块 更多
  • 产品码装箱组托 2025-05-10
  • 计件工资结算 2025-05-10
  • 现场终端操作台生产流程说明 2025-01-21
  • 工序委外处理 2025-01-18
  • 生产称重打标 2025-01-11
质量规范 更多
  • 不同质检分类的质检模板定义 2025-02-07
质检模块 更多
  • 设备检功能配置 2025-02-07
  • 供应链单据质检如何定义并打开调用 2024-03-26
设备模块 更多
  • 远端设备控制器工具使用说明 2025-05-15
  • 设备视频采集接口功能说明 2024-05-22
工装/模具模块 更多
  • 工装/模具单据(改造/复制)单 2024-11-21
  • 设备/工装/模具保养流程 2024-11-19
  • 设备/工装/模具维修功能 2024-11-19
采购模块 更多
  • 到货入库流程 2025-02-07
  • 标准收货流程 2025-01-10
  • 采购退货流程 2025-01-10
  • 关于LRP运算后没有出现在待发布列表中的问题说明 2024-03-29
仓管模块 更多
  • 库存盘点作业 2025-01-17
  • WMS支持APP扫描方式(单据下推扫描、扫描条码抛单、源单扫描条码核销) 2025-01-17
  • APP出入库扫描功能(无源单) 2024-12-29
  • 库位管理操作说明 2024-12-18
  • 仓库管理操作说明 2024-12-04
销售模块 更多
  • 自助提货应用 2025-01-21
  • 销售退货流程 2025-01-10
  • 销售发货流程 2025-01-07
  • 客户管理操作说明 2024-12-18
系统对接 更多
  • 企业微信内部应用集成步骤说明 2025-02-20
  • 钉钉企业内部应用集成步骤说明 2025-02-12
  • 比亚迪库存数据同步 2025-01-06
  • 实施文档-数据同步实操案例-ERP基础资料同步至MES 2025-01-04
  • 实施文档-数据同步实操案例-使用ERP接口将数据同步至ERP 2025-01-04
数据分析 更多
  • APP端ESOP信息展示增强方案 2025-05-28
  • 如何让报表表格铺满全屏 2025-05-16
  • APP报表中如何新增自定义看板 2025-03-05
  • APP报表中SN履历查询的方法 2024-03-29
工作流实现 更多
首页
首页

既然sqlserver内存有那么多种,每种都可能有各自上限值,DBA也必须能够看到sqlserver每种内存到底使用了多少,究竟是哪一种接近了上限、是哪部分内存不足,才能更好地解决问题。

通常可以用两种方法看到各部分内存用量——内存相关计数器和DMV视图

一、 内存相关计数器

与sqlserver相关的计数器通常以SQLServer:或MSSQL&<InstanceName>开头,与内存相关的主要如下:

1.SQLServer:Memory Manager 总体内存使用情况

Total Server Memory(KB):sqlserver buffer pool当前大小

Target Server Memory(KB):SqlServer理论上能使用的最大内存数,min(AWE,"Max Server Memory",当前服务器可用内存数)

下面是sqlserver各部分内存使用情况:

Optimizer Memory(KB):正在用于查询优化的状态内存数

SQL Cache Memory(KB):正在用于动态sqlserver高速缓存的内存数

Lock Memory(KB):用于锁的内存总量

Connection Memory(KB):正在用于维护连接的内存数

Granted Workspace Memory(KB):正在用于哈希、排序、索引创建等操作的内存数

Memory Grants Pending:等待工作空间内存授权的进程总数,大于0说明用户内存由于内存压力而被延迟。一般来说,意味着有较严重的内存瓶颈

2.SQLServer:Buffer Manager 数据页读写情况

buffer pool是sqlserver内存使用最多也最容易出现瓶颈的部分,因此这部分计数器非常重要。

Buffer Cache Hit Ratio:缓存命中率,对于OLTP,如果低于95%,可能内存不足

Database pages:缓冲池中数据库页数,即database cache的大小

Free pages:总空闲页数,正常应该在降低到一定程度后维持稳定。如果这个值过低或反复降低,可能内存不足

Lazy writes/sec:Lazy writer每秒写出的缓冲区数,当sqlserver感觉到内存压力时,Lazy writer会将最久未用到的内存刷到磁盘以清理内存。如果这个值很大,或者Lazy writer经常被调用,可能内存不足

Page Life Expectancy:页若不被引用,将在缓冲池停留的秒数。当sqlserver感觉到内存压力,Lazy writer被触发,PLE的值也会突然下降。如果PLE的值很小或者总是高高低低,不能维持在稳定水平,可能内存不足

Page reads/sec:每秒发出的物理数据库页读取数

Stolen pages:用于非database pages(包括执行计划缓存)的页数,这就是stolen memory在buffer pool中的大小

Target  pages:缓存池目标页数,乘以8KB就是Target Server Memory的值

Total pages:缓存池当前页数,乘以8KB就是Total Server Memory的值

二、动态性能视图DMV

sqlserver使用Memory

Clerk方式统一管理内存分配和回收,而跟踪内存使用最常用的视图也就叫做。

1.sqlserver各部分内存使用情况 —— sys.dm_os_memory_clerks

select type
        , sum(virtual_memory_reserved_kb) VM_Reserved
        , sum(virtual_memory_committed_kb) VM_Commited
        , sum(awe_allocated_kb) AWE_Allocated
        , sum(shared_memory_reserved_kb) Shared_Reserved
        , sum(shared_memory_committed_kb) Shared_Commited
        --, sum(single_pages_kb)    --SQL2005、2008
        --, sum(multi_pages_kb)        --SQL2005、2008
from    sys.dm_os_memory_clerks
group by type
order by type;

字段含义如下:

type:Memory Clerk名称,根据名称可以大概知道用途

virtual_memory_reserved_kb:该Clerk reserve的虚拟内存量

virtual_memory_committed_kb:该Clerk commit的虚拟内存量,提交的内存应始终小于保留的内存

awe_allocated_kb:该Clerk使用AWE分配的内存量,主要用于2005、2008版本

shared_memory_reserved_kb:该Clerk reserve以供共享内存及文件映射使用的内存量

shared_memory_committed_kb:该Clerk commit以供共享内存及文件映射使用的内存量,这两个字段可以追踪shared memory的大小

single_pages_kb:通过stolen分配的单页内存量,主要用于2005、2008版本

multi_pages_kb:分配的多页内存量,主要用于2005、2008版本

主要type如下:

数据页面缓存

其他对象缓存

信息缓存

其他sqlserver功能组件(consumer)

2.sqlserver缓存了哪些对象 —— sys.dm_os_buffer_descriptors

Buffer Pool的内存主要是由那个数据库占了

SELECT count(*)*8 as cached_pages_kb,CASE database_id
        WHEN 32767 THEN 'ResourceDb'
        ELSE db_name(database_id)
        END AS Database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_kb DESC;

当前数据库的哪个表或者索引占用Pool缓冲空间最多

SELECT count(*)*8 AS
cached_pages_kb,obj.name ,obj.index_id,b.type_desc,b.name
FROM sys.dm_os_buffer_descriptors AS bd
    INNER JOIN
    (
        SELECT object_name(object_id) AS name, index_id ,allocation_unit_id,object_id
        FROM sys.allocation_units AS au
            INNER JOIN sys.partitions AS p
                ON au.container_id = p.hobt_id
                    AND (au.type = 1 OR au.type = 3)
        UNION ALL
        SELECT object_name(object_id) AS name, index_id, allocation_unit_id,object_id
        FROM sys.allocation_units AS au
            INNER JOIN sys.partitions AS p
                ON au.container_id = p.partition_id
                    AND au.type = 2
    ) AS obj
        ON bd.allocation_unit_id = obj.allocation_unit_id
        LEFT JOIN sys.indexes b on b.object_id = obj.object_id AND b.index_id = obj.index_id
WHERE database_id = db_id()
GROUP BY obj.name, obj.index_id ,b.name,b.type_desc
ORDER BY cached_pages_kb DESC;

Buffer Pool里面修改过的页总数大小

SELECT count(*)*8  as cached_pages_kb, convert(varchar(5),convert(decimal(5,2),(100-1.0*(select count(*) 
from sys.dm_os_buffer_descriptors b where b.database_id=a.database_id 
andis_modified=0)/count(*)*100.0)))+'%' modified_percentage
        ,CASE database_id
        WHEN 32767 THEN 'ResourceDb'
        ELSE db_name(database_id)
        END AS Database_name
FROM sys.dm_os_buffer_descriptors a
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_kb DESC;

3. 执行计划都缓存了什么 —— sys.dm_exec_cached_plans

查询执行计划中各种对象各占多少内存

-- 查询缓存的各类执行计划,及分别占了多少内存
-- 可以对比动态查询与参数化SQL(预定义语句)的缓存量
select    cacheobjtype
        , objtype
        , sum(cast(size_in_bytes as
bigint))/1024 as size_in_kb
        , count(bucketid) as cache_count
from    sys.dm_exec_cached_plans
group by cacheobjtype, objtype
order by cacheobjtype, objtype

查具体存储了哪些sql

查询结果会很大,注意将结果集输出到表或文件中,直接输出到DB服务器的SMSS可能导致资源争用

-- 查询缓存中具体的执行计划,及对应的SQL
-- 将此结果按照数据表或SQL进行统计,可以作为基线,调整索引时考虑
SELECT  usecounts ,
        refcounts ,
        size_in_bytes ,
        cacheobjtype ,
        objtype ,
        TEXT
FROM sys.dm_exec_cached_plans cp 
        CROSS APPLY
sys.dm_exec_sql_text(plan_handle)
ORDER BY objtype DESC ;


此文章解决您的问题了吗?
感谢您的反馈!

工翼信息技术有限公司

浙江省宁波市鄞州区金达路333号

dbhelp@163.com
公司
  • 联系我们公司
  • 申请系统授权
  • 产品版本记录
  • 帮助文档
服务
  • 专业顾问团队
  • 7*24 在线解答
  • 技术路线
  • 服务中心
订阅我们

我们会发送新闻和优惠信息。

工翼信息·服务中心 2025 © Indgo.cn All Rights Reserved. 浙ICP备2023009385号 Police 浙公网安备 33010602009975号