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

news2024/11/29 10:34:57

测试版本:--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.coloradmin.cn/o/1804462.html

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

相关文章

深圳中赢娱乐控股集团至江西省宜春市袁州区访问交流

2024年6月7日,深圳中赢娱乐控股集团受邀来到江西省宜春市袁州区就“短剧文旅”项目展开深度座谈,并与飞剑潭乡达成合作意向。 下午2:30,深圳中赢控股集团董事李平进带团队一行12人,访问宜春市袁州区,宜春市副市长谢萍、…

Java——数组排序和查找

一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类:内部排序和外部排序。 3、内部排序和外部排序 1)内部排序 内部排序是指数据在内存中进行排序,适用于数据量较小的情况…

【HTTP系列】HTTP1.0/1.1/2.0 的区别

文章目录 一、HTTP1.0二、HTTP1.1三、HTTP2.0# 多路复用二进制分帧首部压缩服务器推送 四、总结HTTP1.0:HTTP1.1:HTTP2.0: 参考文献 一、HTTP1.0 HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本 HTTP 1.0 浏览器…

OmniGlue: Generalizable Feature Matching with Foundation Model Guidance

【引用格式】:Jiang H, Karpur A, Cao B, et al. OmniGlue: Generalizable Feature Matching with Foundation Model Guidance[J]. arXiv preprint arXiv:2405.12979, 2024. 【网址】:https://arxiv.org/pdf/2405.12979 【开源代码】:https…

c++与c

命名空间的设置: 避免冲突 命名空间: 如果将变量全部定义在全局可能不安全,都可以进行修改。 如果将变量定义在局部,当出了大括号就不能使用。 所以说在定义一个命名空间的时候 定义函数,变量,命名空间…

适用于 Windows 的 8 大数据恢复软件

数据恢复软件可帮助您恢复因意外删除或由于某些技术故障(如硬盘损坏等)而丢失的数据。这些工具可帮助您从硬盘驱动器 (HDD) 中高效地恢复丢失的数据,因为这些工具不支持从 SSD 恢复数据。重要的是要了解,您删除的数据不会被系统永…

嵌入式系统如何尽可能避免存储数据丢失与损坏?

正文 大家好,我是bug菌~ 对于一些需要动态存储数据的嵌入式系统往往我们需要考虑系统在各种状态的数据可靠性问题。当然也不仅仅这些数据敏感的协议,最常见的就是你向存储系统写入数据的过程中给断电了,系统下一次上电跑飞了~ 掉电…

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

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

ICLR24大模型提示(8) | 退一步思考:在大型语言模型中通过抽象引发推理

【摘要】我们提出了一种简单的提示技术,即后退提示法,它使 LLM 能够进行抽象,从包含特定细节的实例中得出高级概念和第一原理。通过使用概念和原理来指导推理,LLM 显著提高了遵循正确推理路径解决问题的能力。我们使用 PaLM-2L、G…

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组件…

对Java中二维数组的深层认识

首先,在JAVA中,二维数组是一种数组的数组。它可以看作是一个矩阵,通常是由于表示二维数据节后,如表格和网格。 1.声明和初始化二维数组 声明 int[][] arr;初始化 int[][] arrnew int[3][4];或者用花括号嵌套 int[][] arr{{1,…

数据结构 -- 树状数组

前言 树状数组或二叉索引树(Binary Indexed Tree),又以其发明者命名为 Fenwick 树。其初衷是解决数据压缩里的累积频率的计算问题,现多用于高效计算数列的前缀和、区间和。它可以以 O(logn) 的时间得到任意前缀和。并同时支持在 …

Django更改超级用户密码

Django更改超级用户密码 1、打开shell 在工程文件目录下敲入: python manage.py shell再在python交互界面输入: from django.contrib.auth.models import User user User.objects.get(username root) user.set_password(123456) user.save()其中ro…

千行赏金:闲暇时间的价值创造者

在这个高速发展的信息时代,人们的生活节奏越来越快,闲暇时间似乎成为了一种奢侈品。然而,正是这些看似零散的闲暇时间,如果能够妥善利用,也能产生巨大的价值。今天,我要为大家介绍一款能够充分利用闲暇时间…

深度学习 - 梯度下降优化方法

梯度下降的基本概念 梯度下降(Gradient Descent)是一种用于优化机器学习模型参数的算法,其目的是最小化损失函数,从而提高模型的预测精度。梯度下降的核心思想是通过迭代地调整参数,沿着损失函数下降的方向前进&#…

金融领域的AI解决方案

AI可赋能金融营销、资管、风控等领域,面向金融消费者、金融机构和金融监管机构,改善金融 市场信息对称性并提升金融交易的效率和安全性。目前,金融行业各机构对于安全认证和客户身份识别的需求较为迫切,身份识别和智能客服应用和落…

深度解析:AI Prompt 提示词工程的兴起、争议与未来发展

PART1: 提示词工程的兴起 在人工智能领域中,一个新的领域——提示词工程(prompt engineering)——开始显露头角。 这个领域的核心在于精心设计输入,以引导AI模型产生特定的、期望的输出。 随着AI技术的飞速发展,特别…

值类型和引用类型在使用和存储上的区别

使用上的区别 //值类型 int a 10; //引用类型 int[] arr new int[] { 1, 2, 3, 4, 5 };//声明了一个b让其等于之前的a int b a; //声明了一个arr2让其等于之前的arr int[] arr2 arr; Console.WriteLine("a{0},b{1}", a, b); Console.WriteLine("arr[0]{0},…

【JavaEE】Spring Boot 配置文件详解

一.配置文件的相关概念. 配置文件主要用于配置应用程序的行为和属性. Spring Boot的配置文件提供了一种灵活且强大的方式,用于管理应用程序的配置信息。很多项目或框架的配置信息也放在配置文件中: 项目的启动端口.数据库的连接信息(用户名/密码/驱动等的信息).第三…

AI图书推荐:这就是ChatGPT

这本书《这就是ChatGPT》(What Is ChatGPT Doing ... and Why Does It Work )由Stephen Wolfram撰写 全书内容概要如下: **引言与预备知识** - 作者首先表达了对ChatGPT技术突破的兴奋之情,指出这不仅是技术的故事,也是…