崖山从0到1系列07-崖山数据库参数自优化实现
在上一节的高可用场景中,简单提及了一下崖山数据库的自优化参数配置,但是没有深入说明,这一章专门一个章节给大家深入一下。这个功能应该说,对数据库的优化门槛降低了好多,我记得在ORACLE时代,对SGA,PGA设置有很大的讲究,很多小白由于设置的不正确导致最终安装失败。而崖山这点做的比较好,通过DBMS包的方式,直接可以根据当前数据库的运行情况给出一个最佳优化参数。
YashanDB 崖山数据库配置参数,修改方法通常使用2种方式:
方法一:
自适应配置–DBMS_PARAM.OPTIMIZE()
方法二:
使用SQL命令修改参数
ALTER SYSTEM/SESSION xxx
下面主要对方法一的实现做介绍
参数自适应配置
YashanDB为协助DBA快速决策和减少运维难度,崖山数据库提供参数自适应功能,依据环境信息给出调参配置推荐。
#基本原理
1.可在数据库NOMOUNT、MOUNT或OPEN状态下运行,区分HEAP/TAC/LSC不同表类型。
2.获取CPU核数、内存总数、空闲内存数等环境信息。
3.结合用户指定的CPU和内存限制,计算数据库可用的资源。
4.依据数据库可用资源计算内存相关参数。
5.测试数据文件和日志文件所在磁盘性能。
6.依据磁盘性能结果计算IO相关参数。
#操作步骤
1.生成推荐参数
EXEC DBMS_PARAM.OPTIMIZE();
2.查看推荐参数
SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM dual;
3.将推荐的参数写入配置文件
EXEC DBMS_PARAM.APPLY_RECOMMEND();
4.重启数据库,最终生效参数
$yasboot cluster restart -c yashandb -d
提示:
选择无业务运行的时间,并清理其他进程,避免干扰对资源的计算和测试。
运行参数配置推荐程序DBMS_PARAM.OPTIMIZE();介绍
--该程序存在可输入的参数,不写入配置文件。
-- 使用默认参数生成推荐参数。
EXEC DBMS_PARAM.OPTIMIZE();
-- 使用TAC表类型,分配80%的内存,100%的CPU,生成推荐参数后,写入配置文件。
EXEC DBMS_PARAM.OPTIMIZE(True, 'TAC', 7,10);
-- 使用默认的HEAP表类型,分配100%的内存,100%的CPU,生成推荐参数后,不写入配置文件。
EXEC DBMS_PARAM.OPTIMIZE(NULL, NULL, 100, 100);
-- 使用LSC表类型,分配100%的内存,100%的CPU,指定datafile和redofile的路径,生成推荐参数后,不写入配置文件。
EXEC DBMS_PARAM.OPTIMIZE(NULL, 'LSC', NULL, NULL, '/home/yashan/data', '/home/yashan/redo');
3.查看最新的推荐参数信息。
SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM dual;
4.将推荐的参数配置写入yasdb.ini文件,此过程并不会生效参数。
EXEC DBMS_PARAM.APPLY_RECOMMEND();
5.重启数据库,生效参数。
$yasboot cluster restart -c yashandb -d
包注释:
DBMS_PARAM.OPTIMIZE (
apply_parameter BOOL,
table_type VARCHAR,
os_memory_limit NUMBER,
os_cpu_limit NUMBER,
data_path VARCHAR,
redo_path VARCHAR
);
apply_parameter 生成推荐参数后,是否立刻写入配置文件,默认为FALSE
table_type 主要业务的表类型,可选[HEAP,TAC,LSC],默认为HEAP
os_memory_limit 内存限制百分比,默认为100,即分配所有内存
os_cpu_limit CPU限制百分比,默认为100,即分配所有CPU
data_path datafile所在路径,默认为’‘,系统会自动获取datafile路径
redo_path redofile所在路径,默认为’',系统会自动获取redofile路径
实战演示
[yashan@localhost conf]$ yasql / as sysdba
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.2.1.100 x86_64 - X86 64bit Linux
SQL> EXEC DBMS_PARAM.OPTIMIZE();
PL/SQL Succeed.
SQL> SELECT DBMS_PARAM.SHOW_RECOMMEND() FROM dual;
DBMS_PARAM.SHOW_RECO
----------------------------------------------------------------
********** Recommended Settings For HEAP Table ***********
+--------------------------------+-------------+-------------+-------- -+
| name | current | recommend | restart |
+--------------------------------+-------------+-------------+-------- -+
| DATA_BUFFER_SIZE | 11621M | 11621M | True |
| VM_BUFFER_SIZE | 1483M | 1483M | True |
| WORK_AREA_STACK_SIZE | 2M | 2M | True |
| WORK_AREA_POOL_SIZE | 64M | 64M | True |
| WORK_AREA_HEAP_SIZE | 512K | 512K | True |
| SHARE_POOL_SIZE | 1483M | 1483M | True |
| LARGE_POOL_SIZE | 224M | 224M | True |
| MAX_PARALLEL_WORKERS | 32 | 32 | True |
| SCOL_DATA_BUFFER_SIZE | 128M | 128M | True |
| SCOL_DATA_PRELOADERS | 2 | 2 | True |
| COLUMNAR_WORK_AREA_HEAP_SIZE | 32M | 32M | True |
| COLUMNAR_VM_BUFFER_SIZE | 128M | 128M | True |
| COLUMNAR_BULK_SIZE | 1024 | 1024 | True |
| COMPRESSION | LZ4 | LZ4 | True |
| PQ_POOL_SIZE | 128M | 128M | True |
| MAX_SESSIONS | 188 | 188 | True |
| MAX_WORKERS | 0 | 0 | True |
| TAB_QUEUE_WINDOW_SIZE | 4 | 4 | True |
| BLOOM_FILTER_FACTOR | .3 | .3 | True |
| DEGREE_OF_PARALLEL | 1 | 1 | True |
| MMS_DATA_LOADERS | 8 | 8 | True |
| CHECKPOINT_INTERVAL | 256M | 256M | False |
| CHECKPOINT_TIMEOUT | 60 | 60 | False |
| REDOFILE_IO_MODE | DSYNC | DIRECT | True |
| DATAFILE_IO_MODE | DEFAULT | DEFAULT | True |
| COMMIT_LOGGING | BATCH | IMMEDIATE | False |
| RECOVERY_PARALLELISM | 8 | 8 | True |
| REDO_BUFFER_SIZE | 32M | 32M | True |
+--------------------------------+-------------+-------------+-------- -+
| total memory | 15866M |
+--------------------------------+-------------+-------------+-------- -+
Note: You can execute 'DBMS_PARAM.APPLY_RECOMMEND()' to apply the reco mmend parameters.
After applying the parameters, you need to restart the database.
1 row fetched.
SQL> EXEC DBMS_PARAM.APPLY_RECOMMEND();
PL/SQL Succeed.
SQL> exit
[yashan@localhost conf]$ yasboot cluster restart -c yashandb -d
task completed, status: SUCCESS
[yashan@localhost conf]$
[yashan@localhost db-1-2]$ cd /data1/yashan/yasdb_data/db-1-2
[yashan@localhost db-1-2]$ cat config/yasdb.ini --发现后面增加了数据库缓存的很多设置。
_CLUSTER_ID=66f13556453b3b887702d237aba5f8a5
NODE_ID=1-2:2
CONTROL_FILES=('?/dbfiles/ctrl1', '?/dbfiles/ctrl2', '?/dbfiles/ctrl3')
DB_FILE_NAME_CONVERT='/data1/yashan/yasdb_data/db-1-1', '/data1/yashan/yasdb_data/db-1-2'
REDO_FILE_NAME_CONVERT='/data2/yashan/redo', '/data2/yashan/redo'
DB_BUCKET_NAME_CONVERT='/data1/yashan/yasdb_data/db-1-1', '/data1/yashan/yasdb_data/db-1-2'
ARCHIVE_DEST_1=SERVICE=192.168.127.39:1689 NODE_ID=1-1:1
LISTEN_ADDR=192.168.127.40:1688
REPLICATION_ADDR=192.168.127.40:1689
RUN_LOG_FILE_PATH=/data1/yashan/yasdb_home/yashandb/23.2.1.100/log/yashandb/db-1-2/run
RUN_LOG_LEVEL=INFO
SLOW_LOG_FILE_PATH=/data1/yashan/yasdb_home/yashandb/23.2.1.100/log/yashandb/db-1-2/slow
CHARACTER_SET=UTF8
CGROUP_ROOT_DIR=/sys/fs/cgroup
HA_HEARTBEAT_INTERVAL = 1
HA_ELECTION_TIMEOUT = 9
OM_ELECTION_ENABLE = TRUE
DATA_BUFFER_SIZE = 307M
VM_BUFFER_SIZE = 184M
WORK_AREA_STACK_SIZE = 1M
WORK_AREA_POOL_SIZE = 16M
WORK_AREA_HEAP_SIZE = 512K
SHARE_POOL_SIZE = 256M
LARGE_POOL_SIZE = 16M
MAX_PARALLEL_WORKERS = 4
MAX_SESSIONS = 150
SCOL_DATA_BUFFER_SIZE = 128M
SCOL_DATA_PRELOADERS = 2
COLUMNAR_WORK_AREA_HEAP_SIZE = 32M
COLUMNAR_VM_BUFFER_SIZE = 389M
COLUMNAR_BULK_SIZE = 8192
COMPRESSION = LZ4
PQ_POOL_SIZE = 128M
MAX_WORKERS = 0
TAB_QUEUE_WINDOW_SIZE = 4
BLOOM_FILTER_FACTOR = .3
DEGREE_OF_PARALLEL = 1
MMS_DATA_LOADERS = 1
CHECKPOINT_INTERVAL = 256M
CHECKPOINT_TIMEOUT = 60
REDOFILE_IO_MODE = DSYNC
DATAFILE_IO_MODE = DEFAULT
COMMIT_LOGGING = BATCH
RECOVERY_PARALLELISM = 0
REDO_BUFFER_SIZE = 16M
[yashan@localhost db-1-2]$