不分操作系统,根据服务器软硬件性能,对应的优化数据库性能:
以下优化都会更改达梦数据库dm.ini 配置文件,重启数据库服务后生效
查询数据库当前参数:
--查询配置文件所有参数
SELECT * FROM V$DM_INI;
--指定参数名查询
SELECT * FROM V$DM_INI WHERE PARA_NAME = '实际的参数名';
--查询参数
SELECT 'MAX_SESSIONS' AS 参数名, SF_GET_PARA_VALUE(1,'MAX_SESSIONS') AS 参数值 UNION ALL
SELECT 'MAX_SESSION_STATEMENT',SF_GET_PARA_VALUE(1,'MAX_SESSION_STATEMENT') UNION ALL
SELECT 'MAX_OS_MEMORY',SF_GET_PARA_VALUE(1,'MAX_OS_MEMORY') UNION ALL
SELECT 'BUFFER',SF_GET_PARA_VALUE(1,'BUFFER') UNION ALL
SELECT 'BUFFER_POOLS',SF_GET_PARA_VALUE(1,'BUFFER_POOLS') UNION ALL
SELECT 'RECYCLE',SF_GET_PARA_VALUE(1,'RECYCLE') UNION ALL
SELECT 'RECYCLE_POOLS',SF_GET_PARA_VALUE(1,'RECYCLE_POOLS') UNION ALL
SELECT 'HJ_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HJ_BUF_SIZE',SF_GET_PARA_VALUE(1,'HJ_BUF_SIZE') UNION ALL
SELECT 'HAGR_BUF_GLOBAL_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE') UNION ALL
SELECT 'HAGR_BUF_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BUF_SIZE') UNION ALL
SELECT 'HAGR_BLK_SIZE',SF_GET_PARA_VALUE(1,'HAGR_BLK_SIZE') UNION ALL
SELECT 'DICT_BUF_SIZE',SF_GET_PARA_VALUE(1,'DICT_BUF_SIZE') UNION ALL
SELECT 'KEEP',SF_GET_PARA_VALUE(1,'KEEP') UNION ALL
SELECT 'TEMP_SIZE',SF_GET_PARA_VALUE(1,'TEMP_SIZE') UNION ALL
SELECT 'SESS_POOL_SIZE',SF_GET_PARA_VALUE(1,'SESS_POOL_SIZE') UNION ALL
SELECT 'CACHE_POOL_SIZE',SF_GET_PARA_VALUE(1,'CACHE_POOL_SIZE') UNION ALL
SELECT 'WORKER_THREADS',SF_GET_PARA_VALUE(1,'WORKER_THREADS') UNION ALL
SELECT 'TASK_THREADS',SF_GET_PARA_VALUE(1,'TASK_THREADS') UNION ALL
SELECT 'USE_PLN_POOL',SF_GET_PARA_VALUE(1,'USE_PLN_POOL') UNION ALL
SELECT 'OLAP_FLAG',SF_GET_PARA_VALUE(1,'OLAP_FLAG') UNION ALL
SELECT 'MEMORY_MAGIC_CHECK',SF_GET_PARA_VALUE(1,'MEMORY_MAGIC_CHECK') UNION ALL
SELECT 'PWD_POLICY',SF_GET_PARA_VALUE(1,'PWD_POLICY') UNION ALL
SELECT 'VM_STACK_SIZE',SF_GET_PARA_VALUE(1,'VM_STACK_SIZE') UNION ALL
SELECT 'VM_POOL_SIZE',SF_GET_PARA_VALUE(1,'VM_POOL_SIZE') UNION ALL
SELECT 'VM_POOL_TARGET',SF_GET_PARA_VALUE(1,'VM_POOL_TARGET') UNION ALL
SELECT 'COMM_TRACE',SF_GET_PARA_VALUE(1,'COMM_TRACE');
--SELECT SF_GET_PARA_VALUE(1,'PK_MAP_TO_DIS') UNION ALL--(旧版本无此参数)
--SELECT 'MAX_BUFFER',SF_GET_PARA_VALUE(1,'MAX_BUFFER') UNION ALL (新版本无此参数)
优化语句:
不含内存值得通用优化参数:
--call SF_SET_SYSTEM_PARA_VALUE ('参数名',参数值,1为后续生效,2修改ini文件参数);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSIONS',10000,1,2);
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSION_STATEMENT',20480,1,2);
call SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK',1);
call SP_SET_PARA_VALUE(2,'COMM_TRACE',1);
call SF_SET_SYSTEM_PARA_VALUE ('ENABLE_ENCRYPT',0,1,2); --关闭SSL加密
call SF_SET_SYSTEM_PARA_VALUE ('PWD_POLICY',0,1,2);--用户口令策略不限制
以下优化和服务器内存值有关系
集群优化,需要连接每个ip:端口 依次独立执行
1、
call SF_SET_SYSTEM_PARA_VALUE (‘参数名’,参数默认值,重启后生效,修改ini配置文件);–参考值
–根据实际环境修改 free -g
call SF_SET_SYSTEM_PARA_VALUE ('BUFFER',100,1,2);--占用内存总值的80%
call SF_SET_SYSTEM_PARA_VALUE ('MAX_BUFFER',100,1,2);--占用内存总值的80%
call SF_SET_SYSTEM_PARA_VALUE ('RECYCLE',64,1,2); --建议 512--4096
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_GLOBAL_SIZE',500,1,2);--建议 2048--5120
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_SIZE',50,1,2);--建议 256--512
call SF_SET_SYSTEM_PARA_VALUE ('DICT_BUF_SIZE',5,1,2);--建议 50--256
call SF_SET_SYSTEM_PARA_VALUE ('KEEP',8,1,2);--建议 50--512
call SF_SET_SYSTEM_PARA_VALUE ('VM_POOL_SIZE',64 ,1,2);--建议 128--1024
call SF_SET_SYSTEM_PARA_VALUE ('CACHE_POOL_SIZE',20,1,2);--建议 128--2048
call SF_SET_SYSTEM_PARA_VALUE ('PLN_DICT_HASH_THRESHOLD',20,1,2);--建议 128--2048
2、
根据实际环境修改 cpu core :grep -c processor /proc/cpuinfo
通用参数(参数名,参数默认值,重启后生效,修改ini配置文件)–参考值
call SF_SET_SYSTEM_PARA_VALUE ('WORKER_THREADS',4,1,2); --占用逻辑总核心数量的80%
call SF_SET_SYSTEM_PARA_VALUE ('TASK_THREADS',4,1,2); --占用逻辑总核心数量的80%
3、
通用参数(参数名,建议参数值,重启后生效,修改ini配置文件)–默认值
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSIONS',10000,1,2);--默认值 100
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSION_STATEMENT',20480,1,2);--默认值 100
call SF_SET_SYSTEM_PARA_VALUE('MEMORY_MAGIC_CHECK',1,1,2);--默认值 2 增强内存效验
call SF_SET_SYSTEM_PARA_VALUE ('ENABLE_ENCRYPT',0,1,2); --默认值 1 SSL加密
4、
以下语句根据需求执行(不是必须执行的)
/*
call SF_SET_SYSTEM_PARA_VALUE ('MAX_OS_MEMORY',90,1,2);--根据实际环境修改
call SF_SET_SYSTEM_PARA_VALUE ('PWD_POLICY',0,1,2);--用户口令策略不限制
*/
1、
call SF_SET_SYSTEM_PARA_VALUE (‘参数名’,参数默认值,重启后生效,修改ini配置文件);–参考值
–根据实际环境修改 free -g
call SF_SET_SYSTEM_PARA_VALUE ('BUFFER',2000,1,2);--占用内存总值的80%
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_GLOBAL_SIZE',5000,1,2);--建议 5000
call SF_SET_SYSTEM_PARA_VALUE ('HJ_BUF_SIZE',500,1,2);--建议 500
call SF_SET_SYSTEM_PARA_VALUE ('DICT_BUF_SIZE',50,1,2);--建议 50--500
call SF_SET_SYSTEM_PARA_VALUE ('KEEP',8,1,2);--建议 128--512
call SF_SET_SYSTEM_PARA_VALUE ('RECYCLE',1000,1,2);--建议 1000--2000
2、
根据实际环境修改 cpu core :grep -c processor /proc/cpuinfo
通用参数(参数名,参数默认值,重启后生效,修改ini配置文件)–参考值
call SF_SET_SYSTEM_PARA_VALUE ('WORKER_THREADS',4,1,2); --占用逻辑总核心数量的80%
call SF_SET_SYSTEM_PARA_VALUE ('TASK_THREADS',4,1,2); --占用逻辑总核心数量的80%
3、
通用参数(参数名,建议参数值,重启后生效,修改ini配置文件)–默认值
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSION_STATEMENT',20480,1,2);--默认值 10000
call SF_SET_SYSTEM_PARA_VALUE ('MAX_SESSIONS',10000,1,2);--默认值 10000
call SF_SET_SYSTEM_PARA_VALUE('MEMORY_MAGIC_CHECK',1,1,2);--默认值 2 增强内存效验
call SF_SET_SYSTEM_PARA_VALUE ('ENABLE_ENCRYPT',0,1,2);--默认值 1 SSL加密
DM数据库指定参数名查询dm.ini文件值:
第 20 章 问题跟踪和解决
P 173
20.5 调整配置参 调整配置参 数
在 DM 数据库中,很多参数都是动态的,会自动响应各种负载,但是 DBA 仍然可以调用
系统过程来改变 DM 实例的运行参数,从而获得更佳的性能体验。
DBA 可以在 DM 数据库运
行 过 程 中 执 行
SF_GET_PARA_VALUE 、
SF_GET_PARA_DOUBLE_VALUE 和
SF_GET_PARA_STRING_VALUE
这三个函数来获取系统的当前配置参数,
--------------------------------------------------------------------------
并且可以使用
SP_SET_PARA_VALUE 和
SP_SET_PARA_DOUBLE_VALUE 过程来修改静态/动态配置参数:
1. SF_GET_PARA_VALUE (scope int, paraname varchar(256))
配置参数的值类型为数值类型时使用该函数来获取当前值。
SCOPE 参数
为1 表示获取INI 文件中配置参数的值,
为 2 表示获取内存中配置参数的值。
2. SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187))
配置参数的值类型为浮点型时使用该函数来获取当前值。
SCOPE参数
为1表示获取INI文件中配置参数的值,
为 2 表示获取内存中配置参数的值。
3. SF_GET_PARA_STRING_VALUE (scope int, paraname varchar(8187))
配置参数的值为字符串类型时用该系统函数来获取当前值。
SCOPE 参数
为 1 表示获取INI 文件中配置参数的值,
为 2 表示获取内存中配置参数的值。
4. SP_SET_PARA_VALUE (scope int, paraname varchar(256), value
int64)
该过程用于修改整型静态配置参数和动态配置参数。
SCOPE参数
为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。
为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。
当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息。
只有具有 DBA 角色的用户才有权限调用 SP_SET_PARA_VALUE。
5. SP_SET_PARA_DOUBLE_VALUE (scope int, paraname varchar(8187),alue double)
该过程用于修改浮点型静态配置参数和动态配置参数。
SCOPE
参数为 1 表示在内存和INI 文件中都修改参数值,此时只能修改动态的配置参数。
参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。
当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息。
只有具有 DBA 角色的用户才有权限调用SP_SET_PARA_DOUBLE_VALUE。
6. SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value
int64\double\varchar(256), deferred int, scope int64)
该过程用于修改系统整型、double、varchar 的静态配置参数或动态配置参数。
DEFERRED 参数,
为 0 表示当前 session 修改的参数立即生效,
为 1 表示当前 session 不生效,后续再生效,
默认为 0。
SCOPE
参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数。
参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。
只有具有 DBA 角色的用户才有权限调用
SF_SET_SYSTEM_PARA_VALUE。
DM 的动态 INI 参数分为系统级和会话级两种级别。会话级参数在服务器运行过程中被
修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。
1. SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), valuebigint)
设置某个会话级 INI 参数的值,设置的参数值只对本会话有效。
2. SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))
重置某个会话级INI参数的值,使得这个INI参数的值和系统INI参数的值保持一致。
3. SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))
获得当前会话的某个会话级 INI 参数的值。
需要注意的是,在对参数进行调整前,DBA 应该深刻理解配置参数中每个参数的含义和
对系统的影响,避免由于错误的调整导致影响整个系统对外提供正常服务。对于一些关键业
务,在实际调整前,建议在测试系统上先进行试验,验证通过后再在生产系统上进行调整。
SP_SET_PARA_VALUE (scope int, paraname varchar(256), valueint64)
该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI
文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 INI 文件中修改
配置参数,此时可用来修改静态配置参数和动态配置参数。当 SCOPE 等于 1,试图修改静
态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用 SP_SET
_PARA_VALUE。
/*系统允许同时连接的最大数,同时还受到
LICENSE 的限制,取二者中较小的值,有效值
范围(1~65000)*/
--默认值:100 静态
SP_SET_PARA_VALUE(2,'MAX_SESSIONS',3000);
/* DM 服务器能使用的最大内存占操作系统物理
内存与虚拟内存总和的百分比,有效值范围
(40~100)。当取值 100 时,服务器不进行内
存的检查
注:对于 32 位版本的 DM 服务器,虚拟内存最
大为 2G*/
--默认值:100 静态
SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY',90);
/*系统缓冲区大小,以兆为单位。推荐值:系统
缓冲区大小为可用物理内存的 60%~80%。有
效值范围(8~1048576)*/
--默认值:100 静态
SP_SET_PARA_VALUE(2,'BUFFER',32000);
SP_SET_PARA_VALUE(2,'MAX_BUFFER',32000);
/*BUFFER 系统分区数,每个 BUFFER 分区的大
小为 BUFFER/BUFFER_POOLS。有效值范围
(1~512)*/
--默认值:19 静态
SP_SET_PARA_VALUE(2,'BUFFER_POOLS',61);
/*RECYCLE 缓冲区大小,以兆为单位。有效值范
围(8~1048576)*/
--默认值:64 静态
SP_SET_PARA_VALUE(2,'RECYCLE',4000);
/*RECYCLE 缓冲区分区数,每个 RECYCLE 分区
的大小为 RECYCLE/RECYCLE_POOLS。有效
值范围(1~512)*/
--默认值:19 静态
SP_SET_PARA_VALUE(2,'RECYCLE_POOLS',7);
/*HASH 连接操作符的数据总缓存大小(>=
HJ_BUF_SIZE),系统级参数,以兆为单位。
有效值范围(10~500000)*/
--默认值:500 动态,系统级
SP_SET_PARA_VALUE(2,'HJ_BUF_GLOBAL_SIZE',4096);
/*单个 HASH 连接操作符的数据总缓存大小,以
兆为单位。有效值范围(2~100000)*/
--默认值:50 动态,会话级
SP_SET_PARA_VALUE(2,'HJ_BUF_SIZE',256);
/*字典缓冲区大小,以兆为单位,有效值范围
(1~2048)。单位:MB*/
--默认值:5 静态
SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE',50);
/*默认创建的临时表空间大小,以兆为单位。有
效值范围(10~1048576)*/
--默认值:10 静态
SP_SET_PARA_VALUE(2,'TEMP_SIZE',1024);
/*系统执行时虚拟机内存池大小,在执行过程中
用到的内存大部分是从这里申请的,它的空间
是从操作系统中直接申请的,有效值范围
(32~1024*1024)*/
--默认值:64 静态
SP_SET_PARA_VALUE(2,'VM_POOL_SIZE',256);
/*会话缓冲区大小,以 KB 为单位,有效值范围
(16~1024*1024)。若所申请的内存超过实际
能申请的大小,则系统将按 16KB 大小重新申
请*/
--默认值:64 动态,系统级
SP_SET_PARA_VALUE(2,'SESS_POOL_SIZE',256);
/*SQL 缓冲池大小,以兆为单位。有效值范围:
32 位平台下为(1~2048);64 位平台下为
(1~67108864)。单位:MB*/
--默认值:20 静态
SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE',512);
/*工作线程的数目,有效值范围(1~64)*/
--默认值:4 静态
SP_SET_PARA_VALUE(2,'WORKER_THREADS',7);
/*任务线程个数,有效值范围(1~1000)*/
--默认值:4 静态
SP_SET_PARA_VALUE(2,'TASK_THREADS',7);
/*单个会话上允许同时打开的语句句柄最大数,
有效值范围(64~20480)*/
--默认值:100 动态,系统级
SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT',20480);
/*是否重用执行计划。0:禁止执行计划的重用;
1:启用执行计划的重用功能 ;2:对不包含显
式参数的语句进行常量参数化优化;3:即使包
含显式参数的语句,也进行常量参数化优化*/
--默认值:1 静态
SP_SET_PARA_VALUE(2,'USE_PLN_POOL',1);
/*启用联机分析处理,0:不启用;1:启用;2:
不启用,同时倾向于使用索引范围扫描*/
--默认值:2 动态,会话级
SP_SET_PARA_VALUE(2,'OLAP_FLAG',2);
/*MPP环境下执行默认哈希分布(旧版本无此参数)
专门用于 MPP 环境中,在建表语句中指定了 PK
列,没有指定分布方式时,是否自动将 PK 列作
为 HASH 分布列,将整个表转为 HASH 分布。1
是;0 否*/
--默认值 0 动态,系统级
--call SF_SET_SYSTEM_PARA_VALUE ('PK_MAP_TO_DIS',1,1,2);
SP_SET_PARA_VALUE(2,'PK_MAP_TO_DIS',1);
/*是否开启对所有内存池的校验。0:不开启;1:
开启校验,校验码基于分配出的块地址计算,
在被分配空间的头部和尾部写入校验码;2:增
强校验,在 1 的基础上,如果是内存池分配的,
则对尾部未使用空间也计算校验码,写入未使
用空间的头部*/
--默认值:2 静态
SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK',1);
以上优化都会更改达梦数据库dm.ini 配置文件,重启数据库服务后生效