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

2024-06-09 08:20

本文主要是介绍达梦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后再执行上面的查询语句不再报错。

这篇关于达梦8 探寻达梦排序原理:新排序机制(SORT_FLAG=1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Spring中事务的传播机制

一、前言 首先事务传播机制解决了什么问题 Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY; 不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

七种排序方式总结

/*2018.01.23*A:YUAN*T:其中排序算法:冒泡排序,简单排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序*/#include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10000#define FALSE 0#define TRUE 1typedef struct {i

计算机组成原理——RECORD

第一章 概论 1.固件  将部分操作系统固化——即把软件永恒存于只读存储器中。 2.多级层次结构的计算机系统 3.冯*诺依曼计算机的特点 4.现代计算机的组成:CPU、I/O设备、主存储器(MM) 5.细化的计算机组成框图 6.指令操作的三个阶段:取指、分析、执行 第二章 计算机的发展 1.第一台由电子管组成的电子数字积分和计算机(ENIAC) 第三章 系统总线

GaussDB关键技术原理:高性能(二)

GaussDB关键技术原理:高性能(一)从数据库性能优化系统概述对GaussDB的高性能技术进行了解读,本篇将从查询处理综述方面继续分享GaussDB的高性能技术的精彩内容。 2 查询处理综述 内容概要:本章节介绍查询端到端处理的执行流程,首先让读者对查询在数据库内部如何执行有一个初步的认识,充分理解查询处理各阶段主要瓶颈点以及对应的解决方案,本章以GaussDB为例讲解查询执行的几个主要阶段

拓扑排序——C语言

拓扑排序(Topological Sorting)是一种用于有向无环图(DAG)的排序算法,其输出是图中所有顶点的线性排序,使得对于每条有向边 (u, v),顶点 u 在 v 之前出现。拓扑排序确定了项目网络图中的起始事件和终止事件,也就是顶点的执行顺序。         因为是有向无环图,所以拓扑排序的作用其实就是把先发生的排序在前面,后发生的排序到后面。 例如现在我们有一个

【计算机组成原理】部分题目汇总

计算机组成原理 部分题目汇总 一. 简答题 RISC和CICS 简要说明,比较异同 RISC(精简指令集)注重简单快速的指令执行,使用少量通用寄存器,固定长度指令,优化硬件性能,依赖软件(如编译器)来提升效率。 CISC(复杂指令集)包含多样复杂的指令,能一条指令完成多步操作,采用变长指令,减少指令数但可能增加执行时间,倾向于硬件直接支持复杂功能减轻软件负担。 两者均追求高性能,但RISC

MySQL数据库锁的实现原理

MySQL数据库的锁实现原理主要涉及到如何确保在多用户并发访问数据库时,保证数据的完整性和一致性。以下是MySQL数据库锁实现原理的详细解释: 锁的基本概念和目的 锁的概念:在数据库中,锁是用于管理对公共资源的并发控制的机制。当多个用户或事务试图同时访问或修改同一数据时,数据库系统通过加锁来确保数据的一致性和完整性。 锁的目的:解决多用户环境下保证数据库完整性和一致性的问题。在并发的情况下,会