达梦8 探寻达梦排序原理:传统排序机制(SORT_FLAG=0)

测试版本:--03134283938-20221019-172201-20018

达梦的排序机制由四个dm.ini参数控制:

#maximum sort buffer size in Megabytes ,有效值范围(1~2048)                
SORT_BUF_SIZE                   = 100    #maximum sort blk size in Megabytes,有效值范围(1~50)
SORT_BLK_SIZE                   = 1     #maximum global sort buffer size in Megabytes,有效值范围(10~4294967294)               
SORT_BUF_GLOBAL_SIZE            = 500   #choose method of sort
SORT_FLAG                       = 1   

SORT_FLAG,0代表传统排序机制,1代表新排序机制。

传统排序机制时,系统均为每一个进行排序操作的会话分配SORT_BUF_SIZE大小的本地排序区(RT_MEMOBJ_VPOOL)。如果排序的尺寸大于SORT_BUF_SIZE,则使用临时表空间协助完成排序,这时可以通过v$mtab_used_history查询。

  • 下面我们做一个实验

会话1:

提前准备包含20000000行数据的d表,读取d表数据排序后插入e表。

insert into e select * from d order by 2;

会话2:

查询内存池的使用情况

#查询内存池的使用情况
SQL> select a.name pool,total_size/1024/1024.0 Mbytes,FILE_NAME 
from v$mem_pool a
where a.name in ('VDTA POOL','RT_MEMOBJ_VPOOL') 
order by 2 desc limit 2#会话1执行中的查询结果:
LINEID     POOL            MBYTES FILE_NAME
---------- --------------- ------ ------------------------------------------------
1          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c
2          RT_MEMOBJ_VPOOL 10     /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;LINEID     MTAB_TYPE MTAB_USED_BY_M SQL_TEXT
---------- --------- -------------- -----------------------------------------
1          FLUSH     24             insert into e select * from d order by 2;
2          NSORT     289            insert into e select * from d order by 2;

下面是dmserver在OS中的内存占用

  • 调整参数不变,5个会话同时执行

查询会话:

#查询内存池的使用情况
SQL> select a.name pool,total_size/1024/1024.0 Mbytes,FILE_NAME 
from v$mem_pool a
where a.name in ('VDTA POOL','RT_MEMOBJ_VPOOL') 
order by 2 desc limit 5LINEID     POOL            MBYTES FILE_NAME
---------- --------------- ------ ------------------------------------------------
1          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c
2          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c
3          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c
4          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c
5          RT_MEMOBJ_VPOOL 115    /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;LINEID     MTAB_TYPE MTAB_USED_BY_M SQL_TEXT
---------- --------- -------------- -----------------------------------------
1          FLUSH     24             insert into e select * from d order by 2;
2          FLUSH     24             insert into e select * from d order by 2;
3          FLUSH     24             insert into e select * from d order by 2;
4          FLUSH     24             insert into e select * from d order by 2;
5          FLUSH     24             insert into e select * from d order by 2;
6          NSORT     289            insert into e select * from d order by 2;
7          NSORT     289            insert into e select * from d order by 2;
8          NSORT     289            insert into e select * from d order by 2;
9          NSORT     289            insert into e select * from d order by 2;
10         NSORT     289            insert into e select * from d order by 2;

下面是dmserver在OS中的内存占用

  • 调整参数SORT_BUF_SIZE=512

5个会话同时执行

查询会话:

#查询内存池的使用情况
SQL> select a.name pool,total_size/1024/1024.0 Mbytes,FILE_NAME 
from v$mem_pool a
where a.name in ('VDTA POOL','RT_MEMOBJ_VPOOL') 
order by 2 desc limit 5select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;
LINEID     POOL            MBYTES        FILE_NAME
---------- --------------- ------------- ------------------------------------------------
1          RT_MEMOBJ_VPOOL 714.509765625 /home/dmops/build/svns/1666183702277/op/xsort3.c
2          RT_MEMOBJ_VPOOL 712.509765625 /home/dmops/build/svns/1666183702277/op/xsort3.c
3          RT_MEMOBJ_VPOOL 712.509765625 /home/dmops/build/svns/1666183702277/op/xsort3.c
4          RT_MEMOBJ_VPOOL 712.509765625 /home/dmops/build/svns/1666183702277/op/xsort3.c
5          RT_MEMOBJ_VPOOL 712.509765625 /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;
no rows

由上可见,当排序区足够时将不启用临时表空间排序。

下面是dmserver在OS中的内存占用

  • 调整参数SORT_BUF_SIZE=1024

5个会话同时执行

查询会话:

#查询内存池的使用情况
SQL> select a.name pool,total_size/1024/1024.0 Mbytes,FILE_NAME 
from v$mem_pool a
where a.name in ('VDTA POOL','RT_MEMOBJ_VPOOL') 
order by 2 desc limit 5LINEID     POOL            MBYTES         FILE_NAME
---------- --------------- -------------- ------------------------------------------------
1          RT_MEMOBJ_VPOOL 1121.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
2          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
3          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
4          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
5          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;
no rows

下面是dmserver在OS中的内存占用

从本次测试中可见,当增加参数值后,每个会话占用的内存增加,dmserver占用的总内存也相应增加。

  • 调整参数SORT_BUF_SIZE=2048

5个会话同时执行

查询会话:

#查询内存池的使用情况
SQL> select a.name pool,total_size/1024/1024.0 Mbytes,FILE_NAME 
from v$mem_pool a
where a.name in ('VDTA POOL','RT_MEMOBJ_VPOOL') 
order by 2 desc limit 5LINEID     POOL            MBYTES         FILE_NAME
---------- --------------- -------------- ------------------------------------------------
1          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
2          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
3          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
4          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c
5          RT_MEMOBJ_VPOOL 1117.841796875 /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;
no rows

下面是dmserver在OS中的内存占用

从本次测试中可见,参数再增加,占用的内存不再同步增长。

结论

SORT_BUF_SIZE参数是系统为每一个会话分配的排序内存上限。参数设置过大时可能会造成一些内存浪费,但并不总跟随参数上涨,系统试图优化内存的使用。当会话实际需要超过SORT_BUF_SIZE时,系统使用临时表空间协助完成排序工作,可以通过v$mtab_used_history视图查询。

每一个会话的排序区相互独立。其中一个会话超出限额不会影响后续会话的执行。

新排序机制则有所不同,全局排序区耗光后,后续排序会话将报-544错误。以后的文章将详细介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot: 启动流程和类装载

前面我们学过Spring定制了自己的可执行jar,将真正执行时需要的类和依赖放到BOOT-INF/classes、BOOT-INF/lib来,为了能够识别这些为止的源文件,Spring定制了自己类加载器,本节我们来讲解这个类加载器。本节涉及的内容主要包括: Sp…

Linux部署调度工具xxl-job

背景: Pentaho Data Integration(kettle)作为用户规模最多的开源ETL工具,强大简洁的功能深受广大ETL从业者的欢迎。但kettle本身的调度监控功能却非常弱。Pentaho官方都建议采用crontab(Unix,linux平台)和计划任务(Win…

UFS(Universal Flash Storage)详解

标签: UFS; Universal Flash Storage; UFS(Universal Flash Storage)详解 背景 Universal Flash Storage(UFS)是一种基于闪存存储技术的高性能存储解决方案,由JEDEC(Solid State Technology Association)制定和标准化。UFS旨在为移动设备、数码相机、虚拟现实设备…

kaggle竞赛实战8——其他方案之XGBOOST及NLP特征优化

之前都用的集成算法,发现差异不大,考虑在特征优化上提升数据质量,用NLP算法优化id列 有两种方法,分别是countervector和TF-IDF,前者就是词频,后者由TF(词频)和IDF(反文档…

群体优化算法----树蛙优化算法介绍以及应用于资源分配示例

介绍 树蛙优化算法(Tree Frog Optimization Algorithm, TFO)是一种基于群体智能的优化算法,模拟了树蛙在自然环境中的跳跃和觅食行为。该算法通过模拟树蛙在树枝间的跳跃来寻找最优解,属于近年来发展起来的自然启发式算法的一种 …

抽象的java入门1.3.2

前言: 全新版本的函数(方法)定义,更简单 1.优化了验证过程,直击本质 2.新增目前一图流 正片: 函数的结构可以分为三部分:函数名,参数,函数体 一生二,二生…

6.9总结

Vue生命周期 生命周期:指一个对象从创建到销毁的整个过程生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期的方法(钩子) mounted:挂载完成,Vue初始化成功,HTML渲…

Linux 35.5 + JetPack v5.1.3@Fast-Planner编译安装

Linux 35.5 JetPack v5.1.3Fast-Planner安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:建立工程Step 3:编译工程Step 4:安装工程 3. 问题汇总3.1 Eigen3 组件问题3.2 pcl_conversions 组件问题3.3 cv_bridge组件问题3.4 …

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

智慧社区整体解决方案

1.智慧社区整体建设方案内容 2.整体功能介绍

linux动态调试 dev_dbg

动态调试使用方法 打开内核动态调试开关,make menuconfig选中CONFIG_DYNAMIC_DEBUG以及CONFIG_DEBUG_FS Linux启动后,使用命令行挂载上dbgfs 1. mkdir /mnt/dbg 2. mount -t debugfs none /mnt/dbg 1.控制某个文件所有dev_dbg(), echo -n &q…

sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 11 SQLI DUMB SERIES-11判断注入点 尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单…

电子阅览室有何作用

随着互联网的快速发展,电子阅览室逐渐成为人们获取知识的新方式。它为读者提供了便捷、高效的阅读体验,具有诸多作用。首先,电子阅览室拥有丰富的电子书籍资源,涵盖了各个领域的知识。无论是文学作品还是学术论文,读者…

解决Win10系统ping不通、无法远程的问题

1、概述 某天要使用微软的远程桌面程序mstsc.exe远程到旁边的一台测试电脑上,结果远程不了,ping都ping不通,于是详细研究了这个问题。在此大概地记录一下该问题排查的过程,以供参考。 2、ping不通 使用mstsc.exe远程到测试电脑,远程不了,没有反应。于是手动ping一…

英语学习笔记33——A fine day

A fine day 风和日丽 词汇 Vocabulary day n. 日子,白天 复数:days 常见节日:Mothers’ Day 母亲节      Fathers’ Day 父亲节      Teachers’ Day 教师节      Children’s Day 儿童节      Women’s Day 妇女节 c…

html--宇航员404

<!doctype html> <html> <head> <meta charset"utf-8"> <title>太空404</title><style> html {margin: 0;padding: 0;background-color: white; }body, html {width: 100%;height: 100%;overflow: hidden; }#svgContainer…

【数据库】SQL--DDL(初阶)

文章目录 DDL1. 数据库操作1.1. 表操作1.1.1 创建1.1.2. 查询 2. 数据类型及案例2.1 数值类型2.2 字符串类型2.3 日期时间类型2.4 案例练习 3. 表操作--修改3.1 添加字段3.2 修改字段3.3 修改表名 4. 表操作-删除4.1 删除字段4.2 删除表 5. DDL小结 更多数据库MySQL系统内容就在…

Pytorch 实现目标检测二(Pytorch 24)

一 实例操作目标检测 下面通过一个具体的例子来说明锚框标签。我们已经为加载图像中的狗和猫定义了真实边界框&#xff0c;其中第一个 元素是类别&#xff08;0代表狗&#xff0c;1代表猫&#xff09;&#xff0c;其余四个元素是左上角和右下角的(x, y)轴坐标&#xff08;范围…

Java数据结构与算法(盛水的容器)

前言 针对此类算法题&#xff0c;最基本是暴力算法求解&#xff0c;暴力算法基本是固定的套路。在暴力算法基础上寻求优化思路&#xff0c;是否可以单词遍历能否得到所要的结果。此时需要观察数据的特征&#xff0c;推演数据变化对结果的影响&#xff0c;从而找到合理的解题思…

Web前端Text:深入解析与实践应用

Web前端Text&#xff1a;深入解析与实践应用 在Web前端开发中&#xff0c;Text作为页面内容的重要组成部分&#xff0c;其处理和展示方式直接关系到用户体验和页面效果。本文将围绕Web前端Text的四个方面、五个方面、六个方面和七个方面进行详细解析&#xff0c;带您领略其奥秘…