dm8 什么时候视图中统计的内存会超过OS

2024-06-03 08:12
文章标签 统计 内存 视图 超过 os dm8

本文主要是介绍dm8 什么时候视图中统计的内存会超过OS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

v$bufferpool和v$mem_pool视图记录着DMSERVER各组件的内存占用量。理论上跟OS看到的保持一致。但实际大多数场景下,OS中看到的数据远大于视图中的统计。这里面可能有内存泄漏的原因。不过也有的时候视图中的统计数据超过OS。下面就是这种情况:

上图中红线是OS中看到的内存占用量,单位K。黄线是数据库中统计的数据,单位M。远远大于OS。原因是系统正在一组排序操作。

系统为每一个执行排序操作的会话分配了300M左右内存(RT_MEMOBJ_VPOOL)。

语句执行完毕后恢复正常

那为什么这部分内存在OS中没有得到体现呢?原因是DMSERVER为每一个涉及排序的会话分配了固定的内存量(SORT_BUF_SIZE参数定义),但本例中的这些SQL排序需要的内存量其实很少。大部分内存没有使用。

达梦的新排序机制可以消除以上现象。将SORT_FLAG参数设置为1。系统将根据实际需要为每个会话分配排序内存,总尺寸不超过SORT_BUF_GLOBAL_SIZE。但新排序机制在某些版本还待完善,比如本例的03134283938-20221019-172201-20018版本。虽然SORT_FLAG参数设置为1后使用新排序排序机制,但系统依旧为每个会话额外分配SORT_BUF_SIZE内存。为减少干扰,我们将SORT_BUF_SIZE参数设置为1。测试如下:

从视图中统计的数字明显下降。

每个会话占用29696KB,其中主要成分是23M VDTA POOL。

注:VDTA POOL是新机制下的排序区,RT_MEMOBJ_VPOOL是老机制时的排序区。

附件:

视图统计各组件内存占用量及总和

select 'MEM_POOL+BUFFERPOOL' MEM,a.VIRT+B.VIRT,A.RES+B.RES
from (select sum(page_size*n_pages)/1024/1024.0 VIRT,
sum(page_size*n_pages)/1024/1024.0-sum(free*n_pages)/1024/1024.0  RES from v$bufferpool ) a,
(select sum(total_size/1024/1024.0)  VIRT ,sum(reserved_size/1024/1024.0) RES from v$mem_pool ) b
union all
select name,total_size/1024/1024,reserved_size/1024/1024 from v$mem_pool
order by 2 desc

统计每个会话的内存占用量

SELECT "SESSID", MAX_MEM_USED||'KB',SQL_TXT FROM V$SQL_STAT order by MAX_MEM_USED DESC

统计每个会话内存占用量明细

SELECT
A.CREATOR , a.name,B.SQL_TEXT ,
A.TOTAL_SIZE/1024.0/1024.0 TOTAL_M, --当前总量(包括扩展)
A.DATA_SIZE /1024.0/1024.0 DATA_SIZE_M --实际使用量
FROM
V$MEM_POOL A, V$SESSIONS B
WHERE
A.CREATOR = B.THRD_ID
ORDER BY
TOTAL_M DESC;

这篇关于dm8 什么时候视图中统计的内存会超过OS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026437

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常