达梦8 探寻达梦排序原理:新排序机制(SORT_FLAG=1)

测试版本:--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代表新排序机制。

新排序机制时,系统均为每一个进行排序操作的会话在全局排序区至少分配1个内存分片。根据排序的尺寸需要,最多可扩展至SORT_BUF_GLOBAL_SIZE。当会话无法扩展时,则使用临时表空间协助完成排序,这时可以通过v$mtab_used_history查询。

排序操作至少需要抢占一个内存分片,当全局排序区耗尽时,后续会话的排序操作将报-544错误。

  • 下面我们做一个实验

会话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          VDTA POOL       432.75 /home/dmops/build/svns/1666183702277/nsort_dll/nsort.c
2          RT_MEMOBJ_VPOOL 168    /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
SQL> select  MTAB_TYPE,MTAB_USED_BY_M,SQL_TEXT from v$mtab_used_history;
无
  • 实验2

两个会话同时执行

insert into e select * from d order by 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#执行中的查询结果
第一次查报:
[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE.
used time: 13.077(ms)过一会儿查结果为:
LINEID     POOL            MBYTES FILE_NAME
---------- --------------- ------ ------------------------------------------------------
1          VDTA POOL       432.75 /home/dmops/build/svns/1666183702277/nsort_dll/nsort.c
2          RT_MEMOBJ_VPOOL 168    /home/dmops/build/svns/1666183702277/op/xsort3.c#查询临时表空间的使用情况
LINEID     MTAB_TYPE MTAB_USED_BY_M SQL_TEXT
---------- --------- -------------- -----------------------------------------
1          FLUSH     72             INSERT INTO E SELECT * FROM D ORDER by 2;
2          NSORT     109            INSERT INTO E SELECT * FROM D ORDER by 2;
3          NSORT     217            INSERT INTO E SELECT * FROM D ORDER by 2;
4          NSORT     289            INSERT INTO E SELECT * FROM D ORDER by 2;

由上可见,监控本身也包含排序操作。第一次执行时由于排序空间耗尽,所以报-544错误。过了一会儿排序空间释放了一部分,监控语句抢到一部分内存用于排序,所以查出结果。

  •  实验3

三个会话同时执行

insert into e select * from d order by 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 5#执行中的查询结果
第一次查报:
[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE.
used time: 13.077(ms)#调大SORT_BUF_GLOBAL_SIZE
sp_set_para_value(1,'SORT_BUF_GLOBAL_SIZE',2000);再查结果为:
LINEID     POOL            MBYTES         FILE_NAME
---------- --------------- -------------- ------------------------------------------------------
1          VDTA POOL       432.75         /home/dmops/build/svns/1666183702277/nsort_dll/nsort.c
2          VDTA POOL       229.5625       /home/dmops/build/svns/1666183702277/nsort_dll/nsort.c
3          VDTA POOL       225.9375       /home/dmops/build/svns/1666183702277/nsort_dll/nsort.c
4          RT_MEMOBJ_VPOOL 168.8076171875 /home/dmops/build/svns/1666183702277/op/xsort3.c
5          RT_MEMOBJ_VPOOL 168.5078125    /home/dmops/build/svns/1666183702277/op/xsort3.c

由上可见,监控本身也包含排序操作。第一次执行时由于排序空间耗尽,所以报-544错误。执行sp_set_para_value(1,'SORT_BUF_GLOBAL_SIZE',2000)将全局排序区扩大到2000M后再执行上面的查询语句不再报错。

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

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

相关文章

mysql数据库打开失败的问题

打不开mysql 1. my.ini未配置路径:找到basedir和datadir,改成如下路径。改完记得去掉井号 !! 复制路径粘贴,记得去掉井号 !! 启动!方式1 发生系统错误5:没有用管理员身…

Android Media Framework(三)OpenMAX API阅读与分析

这篇文章我们将聚焦Control API的功能与用法,为实现OMX Core、Component打下坚实的基础。 1、OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之间,OMX Core提供了两组API给IL Client使用,一组API用于管理OMX组件…

数据库 | 关系数据库设计

第七章 1.简述数据库的设计阶段?(简要回答数据库设计步骤?)((数据库设计有哪几个阶段?) 需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施、数据库的运行和维护…

如何用群晖当异地组网服务器?

在当今信息化时代,远程通信成为了企业和个人之间不可或缺的一部分。特别是对于跨地区的通信需求,一个可靠的异地组网服务器是必不可少的。而群晖(Synology)作为一款功能强大的网络存储设备,可以被用作办公室或家庭的异…

构建LangChain应用程序的示例代码:24、使用OpenAI工具进行文本提取教程(Extraction with OpenAI Tools)

使用OpenAI工具进行文本提取教程 执行提取任务从未如此简单!OpenAI的工具调用功能是完美的选择,因为它允许从文本中提取多种不同类型的元素。 使用支持工具的模型 1106版本之后的模型使用工具,并支持“并行函数调用”,这使得任…

ssm621大湾区旅游推荐系统的设计与实现+vue【已测试】

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

数染色体 算法 python源码

效果图如下: 原图: 完整代码: import cv2 import numpy as np from skimage import measure import randomimage cv2.imread(113.jpg, cv2.IMREAD_GRAYSCALE)blurred_img cv2.GaussianBlur(image, (5, 5), 0)_, binary_image cv2.thresho…

后端启动项目端口冲突问题解决

后端启动项目端口冲突 原因: Vindows Hyper-V虚拟化平台占用了端口。 解决方案一: 查看被占用的端口范围,然后选择一个没被占用的端口启动项目。netsh interface ipv4 show excludedportrange protocoltcp 解决方案二: 禁用H…

spring源码解析-(2)Bean的包扫描

包扫描的过程 测试代码: // 扫描指定包下的所有类 BeanDefinitionRegistry registry new SimpleBeanDefinitionRegistry(); // 扫描指定包下的所有类 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry); scanner.scan(&quo…

MyBatis中 set标签

1、set标签特点: set标签用于更新语句中set标签解析为set关键字set可以去除跟新语句中无用的逗号通常是和if标签一起使用 2、set标签的使用 编写接口方法编写sql语句 注意 当set标签中有条件成立时就会附加set关键字,字段为null时该列不会被更新。se…

域内攻击 ---> AS-REP Roasting

今天,我们就来讲一下另外一种Roasting攻击 AS-REP Roasting 1.AS-REP Roasting原理 其实和kerberoasting一样,这种攻击也是一种暴力破解的攻击,完全取决于攻击者的字典。 但是不同于Kerberoasting,他不需要用户进行注册SPN&…

M3ID和CD的区别

M3ID的公式: CD的公式(概率空间版本): CD的公式(logits空间版本): 为简单对比,主要比较概率空间版本。logits空间版本已有证明和概率空间版本等效,在此不做详细讨论&a…

Ceph入门到精通-ceph经典盘符飘逸问题处理步骤

在Ceph存储系统中,"盘符飘逸"通常指的是Ceph OSD(Object Storage Daemon)使用的磁盘在系统重启后没有被正确挂载或识别。这可能是由于多种原因造成的,例如磁盘连接问题、驱动问题或配置错误。以下是解决此问题的步骤: 确认磁盘状态: 使用lsblk或fdisk -l命令来…

C#编码中间语言IL,也称为 MSIL 或 CIL

C# 是一种编译型语言,它的源代码(.cs 文件)首先被编译成中间语言(IL,也称为 MSIL 或 CIL,即 Microsoft Intermediate Language),然后这个中间语言代码通常被封装在一个程序集&#x…

Linux网络 - json,网络计算服务器与客户端改进

文章目录 前言一、json1.引入库2. 使用步骤2.Calculator.hpp3.Task.hpp4.serverCal.hpp 新客户端 前言 本章内容主要对上一章的网络计算器客户端和服务器进行一些Bug修正与功能改进。 并学习如何使用json库和daemon函数。 一、json 在我们自己的电脑上一些软件的文件夹中&…

springboot003图书个性化推荐系统的设计与实现-手把手调试搭建

springboot003图书个性化推荐系统的设计与实现-手把手调试搭建 springboot003图书个性化推荐系统的设计与实现-手把手调试搭建

如何删除电脑端口映射?

在使用电脑进行网络连接时,有时需要进行端口映射以实现不同设备之间的信息远程通信。当这些端口映射不再需要时,我们需要及时删除它们以确保网络的安全和稳定。本文将介绍如何删除电脑端口映射的方法。 操作系统自带的工具 大多数操作系统都提供了自带…

电机控制系列模块解析(29)—— 逆变器带输出LC滤波器

一般长线驱动(港口和油矿)和超高速电机(高频)等驱动系统可能会要求加装输出LC滤波器。 此图片来源于会议PPT 一、逆变器带输出LC滤波器 逆变器输出端配置LC滤波器(电感L与电容C组成的无源滤波电路)旨在改…

pdf文件如何防篡改内容

PDF文件防篡改内容的方法有多种,以下是一些常见且有效的方法,它们可以帮助确保PDF文件的完整性和真实性: 加密PDF文档: 原理:通过设置密码来保护PDF文档,防止未经授权的访问和修改。注意事项:密…

创新实训2024.06.03日志:完善Baseline Test框架、加入对Qwen-14B的测试

1. Baseline Test框架重构与完善 在之前的一篇博客中(创新实训2024.05.29日志:评测数据集与baseline测试-CSDN博客),我介绍了我们对于大模型进行基线测试的一些基本想法和实现,包括一些基线测试的初步结果。 后来的一…