【达梦数据库】超出全局HASH JOIN空间,解决办法

首先我们讲一个故事:
?
你是上帝视角【1】,你给了小明100个棒槌【2】,这个时候来了10个叫做小花的人,小花可以去仓库里拿面粉做包子,但是做一次包子,需要借用小明的棒槌,假如每一个小花都借用掉了10个棒槌,如果同时来了11个小花,前10个小花都能接到棒槌,第11个小花去找小明借棒槌的时候,小明就告诉她;“超出我的棒槌个数了,小花做包子失败。”—— 这句话翻译一下就是:“数据库服务器报错超出全局hashjoin空间,应用请求在数据库执行失败。”
?
但是呢,故事其实复杂一点,就是每一个小花,根据自己的工作量,需要的棒槌个数,并不一定需要10个,所以也就是说,只有来的所有小花把棒槌都借用完了之后,小明才会报错。但是小明也不是一直会报错,只要有任何一个小花,做完了,把借用的棒槌还回来了,小明就又可以支撑新的小花了。
?
上面这个故事,对应的就是这两个参数:

(来源:达梦数据库dba手册2.1.1中dm.ini的介绍)
小明一共有多少个棒槌,就是 HJ_BUF_GLOBAL_SIZE 设置的,默认值是500;
一个小花最多可以借多少个棒槌,就是HJ_BUF_SIZE设置的,默认值是50;
?
但是呢,其实小花如果要借用10个棒槌,实际上还有一个参数控制小明一次给小花多少个棒槌(比如小明要给小花10个棒槌,可以一次给1个给10次,也可以一次给5个给两次——这两种代价其实会不一样的)。一次给多少个,就是这个参数:

(来源:达梦数据库dba手册2.1.1中dm.ini的介绍)
?
好了,我们回到问题,如果遇到小明报错了怎么办呢?
?
【解决方法一】
很多情况下,小花其实是个傻子,就是实际上只需要1跟棒槌、一分钟内就干完的事情,结果她却用了10跟棒槌,一天死活都干不完,占用的这10根棒槌也一直没有还给小明。
换句话说就是要优化语句,消除掉这些傻小花。遇到这个问题的优先核心方法是:找出傻小花,让她变聪明——找到慢语句,优化掉。
?
【解决方法二】
1) 扩大小明的棒槌个数——改大HJ_BUF_GLOBAL_SIZE
2) 减小单个小花可以借用的棒槌上限——改小HJ_BUF_SIZ (有人会问,小花要10个棒槌,现在你给她设置成5个,她还能干活么?其实一定可以,哪怕你限制她最多只能借用1个,她也可以干活,只是同样的或要干的久一点而已——同样的,也不是越多越好,如果本身只需要5个,设置成10个,也没有意义。)
如果确认系统中,预期的sql均是符合预期的计划,效率均没有问题,确实需要高并发,就必须提高 HJ_BUF_GLOBAL_SIZE/HJ_BUF_SIZ的比值。同时,又由于前一个参数是静态参数(修改该参数后,需要重启数据库服务后才可以生效),所以应急策略(不能重启数据)的处理方式,仅仅只有【调小HJ_BUF_SIZ——这个参数是动态参数,修改后立即生效】。等有机会重启数据库服务时,再在重启数据库服务前,适当调大HJ_BUF_SIZ的同时,也保持较高的HJ_BUF_GLOBAL_SIZE/HJ_BUF_SIZ的值。
?
备注:
修改数据库参数的方式:
Sp_set_para_value(1,’参数名字’,参数值);--当成sql执行;对于动态参数,直接修改后,立即生效;如果是静态参数,如此修改,会报错:无法修改静态配置参数
Sp_set_para_value(2,’参数名字’,参数值);--当成sql执行;对于动态参数或者静态参数都可以用,修改后,需要重启数据库服务后才生效。

原文地址:https://blog.51cto.com/12196785/2470680

时间: 2024-10-10 19:29:20

【达梦数据库】超出全局HASH JOIN空间,解决办法的相关文章

[转帖]达梦数据库(DM6)和ORACLE 10g的异同点

达梦数据库(DM6)和ORACLE 10g的异同点    https://bbs.aliyun.com/detail/351337.html 花花浪子 级别: 小白 发帖 0 云币 -41 加关注 写私信 只看楼主 更多操作楼主  发表于: 2017-03-24 比较惭愧,在当上本版版主后一直没有贡献一篇有营养的帖子,由于手上正好有达梦数据 DM6的版本,加上对ORACLE 10G比较熟悉,所以就这2种数据库的异同点做一个对比,也请大家不吝赐教. 对于达梦数据库,因为目前的工作是DBA,主要是对

Linux平台达梦数据库V7单实例安装方式之静默方式

一 前言 我们在学习任何一个应用时,了解它的最初步骤通常是学会如何进行安装配置,后序才去关心如何使用,学习达梦数据库也是如此,而达梦数据库的安装提供了多种方式,接下来会一一介绍每种安装方式,达梦数据库支持多个操作系统平台的安装,本篇主要介绍Linux平台下的静默方式安装. 二 安装需求 2.1 硬件需求 用户应根据 DM 及应用系统的需求来选择合适的硬件配置,如 CPU 的指标.内存及磁盘容量等.档次一般应尽可能高一些,尤其是作为数据库服务器的机器,基于 Java 的程序运行时最好有较大的内存.

达梦数据库的初始运用

用命令方式建立数据库 在达梦的bin目录下使用dminit ./dminit path=/dm7/data db_name=DM01 instance_name=EST port_num=5327 达梦数据库的状态 4种状态 shutdown mount open suspend 状态切换 shutdown -- mount shutdown -- open open -- mount 查看状态 select status$ from v$instance; 启动数据库 方式一 在达梦安装bin

DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库

DB 查询分析器 6.03 如何灵活.快捷地操作国产达梦数据库 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要       本文详细地介绍了"万能数据库查询分析器",中文版本<DB 查询分析器>.英文版本<DB Query Analyzer>6.03如何灵活.快捷地操作国产达梦数据库.除了创建基于不同数据库产品的ODBC数据源有所不同外,用"万能数据库查询分析器"操作任何数据库.EXCEL.TXT/CSV文件的方法跟本文

达梦数据库(第二部分)

1.达梦数据库创建表 达梦数据安装完成之后,打开DM管理工具,可以进行数据库的相关操作.可以通过新建查询,在SQL命令窗口输入sql语句,创建表,sql输入完成之后,选择sql进行执行,则会在表空间MAIN下的表路径下产生新建的表文件,如下图: 2.建立主键 Create table时通过primary key创建主键 如:create table person(ID int primary key,name varchar(10),address varchar(60)) 或者通过alter语

达梦数据库

安装准备: groupadd dinstall useradd dinstall -g dinstall passwd dinstall mkdir /u02/dm7 chown dinstall.dinstall /u02/dm7 -R ulimit -a vi /etc/profile ulimit -n 65536 vi .bash_profile export DM_HOME=/u02/dm7 export PATH=$PATH:$HOME:$DM_HOME/bin export DIS

达梦数据库部署

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM.本次将进行DM8的开发版本的部署 1  系统软硬件要求 1.1  硬件要求 达梦官方文档中给出的硬件要求如下:  1.2  软件要求 软件环境的要求如下 1.3  环境检查 本次是在centos6上安装DM8的开发版,系统检测信息如下 /** 操作系统版本*/ [[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) /

Linux平台达梦数据库V7单实例安装方式之图形方式

一 前言 我们在学习任何一个应用时,了解它的最初步骤通常是学会如何进行安装配置,后序才去关心如何使用,学习达梦数据库也是如此,而达梦数据库的安装提供了多种方式,接下来会一一介绍每种安装方式,达梦数据库支持多个操作系统平台的安装,本篇主要介绍Linux平台下的图形方式安装. 二 安装需求 2.1 硬件需求 用户应根据 DM 及应用系统的需求来选择合适的硬件配置,如 CPU 的指标.内存及磁盘容量等.档次一般应尽可能高一些,尤其是作为数据库服务器的机器,基于 Java 的程序运行时最好有较大的内存.

达梦数据库的用户管理

达梦数据库的用户管理 安装完达成梦数据库,系统默认会自带有一些系统级的用户:1.sys -----达梦数据库内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图sys.2.Sysdba -----数据库的管理员3.Sysauditor---审计用户4.Syssso---安全用户 在达梦数据库里每一个用户都有一个默认的表空间,对于 SYS.SYSSSO.SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有