本文档详细介绍DM数据库参数调优的方法和技巧,包括参数调优概念、参数类型、参数调优原则、参数规划、参数管理、参数调优策略、实施方案等内容,风哥教程参考DM官方文档《DM8系统管理员手册》,适合DBA人员进行DM数据库参数的调优。
Part01-基础概念与理论知识
1.1 DM数据库参数调优概念
DM数据库参数调优是指通过调整数据库的各种参数,优化数据库的性能和稳定性,提高数据库的运行效率。
DM数据库参数调优的目的:
- 提高性能:优化数据库的响应速度和吞吐量
- 提高稳定性:减少数据库的故障和崩溃
- 合理利用资源:合理分配和利用系统资源
- 适应业务需求:根据业务需求调整数据库参数
1.2 DM数据库参数类型
DM数据库参数类型:
- 内存参数:控制数据库内存的分配和使用
- IO参数:控制数据库的IO操作
- 并发参数:控制数据库的并发处理能力
- 日志参数:控制数据库日志的写入和管理
- 查询参数:控制数据库查询的执行
- 安全参数:控制数据库的安全设置
1.3 DM数据库参数调优原则
DM数据库参数调优原则:
- 基于实际需求:根据实际业务需求调整参数
- 循序渐进:逐步调整参数,观察效果
- 监控与分析:监控数据库性能,分析参数调整效果
- 资源平衡:平衡系统资源的分配
- 稳定性优先:确保数据库的稳定性
- 文档化:记录参数调整的过程和效果
风哥提示:参数调优是数据库性能优化的重要组成部分,需要根据实际的硬件环境和业务需求进行合理调整。
Part02-生产环境规划与建议
2.1 DM数据库参数规划
生产环境DM数据库参数规划:
# DM数据库参数规划
#
# 规划步骤
1. 分析硬件环境:分析服务器的CPU、内存、存储等硬件配置
2. 分析业务需求:分析业务的并发量、数据量、查询模式等
3. 确定参数范围:根据硬件环境和业务需求,确定参数的合理范围
4. 制定调优计划:制定参数调优的计划和步骤
5. 实施调优:按照计划实施参数调优
6. 监控效果:监控参数调整后的效果 风哥提示:
#
# 参数规划示例
##
# 硬件环境
– CPU:8核16线程
– 内存:64GB
– 存储:SSD,1TB
– 网络:10Gbps
##
# 业务需求
– 并发用户:500
– 数据量:500GB
– 查询模式:OLTP
– 响应时间要求:< 100ms ## # 参数规划 - 内存参数: - BUFFER:32GB - SORT_BUF_SIZE:1024M - HJ_BUF_SIZE:2048M - IO参数: - DB_WRITER_COUNT:8 - LOG_BUFFER_SIZE:1024M - LOG_SEND_BUF_SIZE:256M - 并发参数: - MAX_SESSIONS:1000 - MAX_SESSION_STATEMENT:100 - SESS_POOL_SIZE:200
#
# 规划步骤
1. 分析硬件环境:分析服务器的CPU、内存、存储等硬件配置
2. 分析业务需求:分析业务的并发量、数据量、查询模式等
3. 确定参数范围:根据硬件环境和业务需求,确定参数的合理范围
4. 制定调优计划:制定参数调优的计划和步骤
5. 实施调优:按照计划实施参数调优
6. 监控效果:监控参数调整后的效果 风哥提示:
#
# 参数规划示例
##
# 硬件环境
– CPU:8核16线程
– 内存:64GB
– 存储:SSD,1TB
– 网络:10Gbps
##
# 业务需求
– 并发用户:500
– 数据量:500GB
– 查询模式:OLTP
– 响应时间要求:< 100ms ## # 参数规划 - 内存参数: - BUFFER:32GB - SORT_BUF_SIZE:1024M - HJ_BUF_SIZE:2048M - IO参数: - DB_WRITER_COUNT:8 - LOG_BUFFER_SIZE:1024M - LOG_SEND_BUF_SIZE:256M - 并发参数: - MAX_SESSIONS:1000 - MAX_SESSION_STATEMENT:100 - SESS_POOL_SIZE:200
2.2 DM数据库参数管理
DM数据库参数管理:
参数管理任务:
- 学习交流加群风哥微信: itpux-com
- 查看参数:查看数据库当前的参数设置
- 修改参数:修改数据库的参数设置
- 保存参数:将参数设置保存到配置文件
- 监控参数:监控参数的使用情况
- 分析参数:分析参数对性能的影响
2.3 DM数据库参数调优策略
DM数据库参数调优策略:
- 基准测试:在调优前进行基准测试,建立性能基线
- 逐步调整:逐步调整参数,观察效果
- 重点优化:重点优化影响性能的关键参数
- 综合考虑:综合考虑内存、IO、并发等参数
- 监控反馈:通过监控工具反馈调优效果
- 持续优化:根据业务变化持续优化参数
Part03-生产环境项目实施方案
3.1 DM数据库参数实施方案
3.1.1 参数查看与修改
# 参数查看与修改
#
# 查看参数
# 查看所有参数
SQL> select * from v$dm_ini;
# 查看指定参数
SQL> select * from v$dm_ini where para_name like ‘%BUFFER%’;
# 查看内存参数
SQL> select * from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’);
#
# 修改参数
# 修改静态参数(需要重启数据库)
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
# 修改动态参数(不需要重启数据库)
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
# 保存参数到配置文件
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
#
# 查看参数
# 查看所有参数
SQL> select * from v$dm_ini;
# 查看指定参数
SQL> select * from v$dm_ini where para_name like ‘%BUFFER%’;
# 查看内存参数
SQL> select * from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’);
#
# 修改参数
# 修改静态参数(需要重启数据库)
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
# 修改动态参数(不需要重启数据库)
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
# 保存参数到配置文件
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
3.1.2 参数调优流程
# 参数调优流程 学习交流加群风哥QQ113257174
#
# 步骤1:建立基准
# 运行基准测试
$ ./benchmark.sh
# 记录基准性能指标
– TPS: 1000
– QPS: 5000
– 响应时间: 50ms
#
# 步骤2:分析性能瓶颈
# 分析CPU使用情况
$ top
# 分析内存使用情况
$ free -h
# 分析IO使用情况
$ iostat -x
# 分析数据库等待事件
SQL> select * from v$wait_event;
#
# 步骤3:调整参数
# 根据分析结果调整参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
#
# 步骤4:验证调优效果
# 重启数据库(如果修改了静态参数)
$ systemctl restart DmServicefgedudb
# 运行基准测试
$ ./benchmark.sh
# 记录调优后的性能指标
– TPS: 1500
– QPS: 7500
– 响应时间: 30ms
#
# 步骤5:监控与调整
# 持续监控数据库性能
$ ./monitor.sh
# 根据监控结果进一步调整参数
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 2048);
#
# 步骤1:建立基准
# 运行基准测试
$ ./benchmark.sh
# 记录基准性能指标
– TPS: 1000
– QPS: 5000
– 响应时间: 50ms
#
# 步骤2:分析性能瓶颈
# 分析CPU使用情况
$ top
# 分析内存使用情况
$ free -h
# 分析IO使用情况
$ iostat -x
# 分析数据库等待事件
SQL> select * from v$wait_event;
#
# 步骤3:调整参数
# 根据分析结果调整参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
#
# 步骤4:验证调优效果
# 重启数据库(如果修改了静态参数)
$ systemctl restart DmServicefgedudb
# 运行基准测试
$ ./benchmark.sh
# 记录调优后的性能指标
– TPS: 1500
– QPS: 7500
– 响应时间: 30ms
#
# 步骤5:监控与调整
# 持续监控数据库性能
$ ./monitor.sh
# 根据监控结果进一步调整参数
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 2048);
3.2 DM数据库内存参数调优
DM数据库内存参数调优:
# 内存参数调优
#
# 关键内存参数 更多视频教程www.fgedu.net.cn
##
# BUFFER
– 描述:数据缓冲区大小
– 建议值:物理内存的50%-60%
– 调整命令:sp_set_para_value(1, ‘BUFFER’, 32768);
##
# SORT_BUF_SIZE
– 描述:排序缓冲区大小
– 建议值:1024M-2048M
– 调整命令:sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
##
# HJ_BUF_SIZE
– 描述:哈希连接缓冲区大小
– 建议值:2048M-4096M
– 调整命令:sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
##
# PGA_AGGREGATE_TARGET
– 描述:PGA聚合目标大小
– 建议值:物理内存的10%-20%
– 调整命令:sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
#
# 内存参数调优示例
##
# 硬件环境:64GB内存
# 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
SQL> sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
# 查看内存参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’, ‘PGA_AGGREGATE_TARGET’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 BUFFER 32768
2 SORT_BUF_SIZE 1024
3 HJ_BUF_SIZE 2048
4 PGA_AGGREGATE_TARGET 8192
#
# 关键内存参数 更多视频教程www.fgedu.net.cn
##
# BUFFER
– 描述:数据缓冲区大小
– 建议值:物理内存的50%-60%
– 调整命令:sp_set_para_value(1, ‘BUFFER’, 32768);
##
# SORT_BUF_SIZE
– 描述:排序缓冲区大小
– 建议值:1024M-2048M
– 调整命令:sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
##
# HJ_BUF_SIZE
– 描述:哈希连接缓冲区大小
– 建议值:2048M-4096M
– 调整命令:sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
##
# PGA_AGGREGATE_TARGET
– 描述:PGA聚合目标大小
– 建议值:物理内存的10%-20%
– 调整命令:sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
#
# 内存参数调优示例
##
# 硬件环境:64GB内存
# 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
SQL> sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
# 查看内存参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’, ‘PGA_AGGREGATE_TARGET’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 BUFFER 32768
2 SORT_BUF_SIZE 1024
3 HJ_BUF_SIZE 2048
4 PGA_AGGREGATE_TARGET 8192
3.3 DM数据库IO参数调优
DM数据库IO参数调优:
# IO参数调优
#
# 关键IO参数
##
# DB_WRITER_COUNT
– 描述:数据库写线程数 更多学习教程公众号风哥教程itpux_com
– 建议值:CPU核心数的1/4到1/2
– 调整命令:sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
##
# LOG_BUFFER_SIZE
– 描述:日志缓冲区大小
– 建议值:1024M-2048M
– 调整命令:sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
##
# LOG_SEND_BUF_SIZE
– 描述:日志发送缓冲区大小
– 建议值:256M-512M
– 调整命令:sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
##
# IO_THR_GROUPS
– 描述:IO线程组数量
– 建议值:存储设备数量
– 调整命令:sp_set_para_value(1, ‘IO_THR_GROUPS’, 2);
#
# IO参数调优示例
##
# 硬件环境:8核CPU,SSD存储
# 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
SQL> sp_set_para_value(1, ‘IO_THR_GROUPS’, 2);
# 查看IO参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’, ‘IO_THR_GROUPS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 DB_WRITER_COUNT 8
2 LOG_BUFFER_SIZE 1024
3 LOG_SEND_BUF_SIZE 256
4 IO_THR_GROUPS 2 from DB视频:www.itpux.com
#
# 关键IO参数
##
# DB_WRITER_COUNT
– 描述:数据库写线程数 更多学习教程公众号风哥教程itpux_com
– 建议值:CPU核心数的1/4到1/2
– 调整命令:sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
##
# LOG_BUFFER_SIZE
– 描述:日志缓冲区大小
– 建议值:1024M-2048M
– 调整命令:sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
##
# LOG_SEND_BUF_SIZE
– 描述:日志发送缓冲区大小
– 建议值:256M-512M
– 调整命令:sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
##
# IO_THR_GROUPS
– 描述:IO线程组数量
– 建议值:存储设备数量
– 调整命令:sp_set_para_value(1, ‘IO_THR_GROUPS’, 2);
#
# IO参数调优示例
##
# 硬件环境:8核CPU,SSD存储
# 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
SQL> sp_set_para_value(1, ‘IO_THR_GROUPS’, 2);
# 查看IO参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’, ‘IO_THR_GROUPS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 DB_WRITER_COUNT 8
2 LOG_BUFFER_SIZE 1024
3 LOG_SEND_BUF_SIZE 256
4 IO_THR_GROUPS 2 from DB视频:www.itpux.com
3.4 DM数据库并发参数调优
DM数据库并发参数调优:
# 并发参数调优
#
# 关键并发参数
##
# MAX_SESSIONS
– 描述:最大会话数
– 建议值:并发用户数的2-3倍
– 调整命令:sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
##
# MAX_SESSION_STATEMENT
– 描述:每个会话的最大语句数
– 建议值:100-200
– 调整命令:sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
##
# SESS_POOL_SIZE
– 描述:会话池大小
– 建议值:并发用户数的1/2到2/3
– 调整命令:sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
##
# WORKER_THREADS
– 描述:工作线程数
– 建议值:CPU核心数
– 调整命令:sp_set_para_value(1, ‘WORKER_THREADS’, 16);
#
# 并发参数调优示例
##
# 硬件环境:16核CPU,500并发用户
# 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 查看并发参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 MAX_SESSIONS 1000
2 MAX_SESSION_STATEMENT 100
3 SESS_POOL_SIZE 200
4 WORKER_THREADS 16
#
# 关键并发参数
##
# MAX_SESSIONS
– 描述:最大会话数
– 建议值:并发用户数的2-3倍
– 调整命令:sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
##
# MAX_SESSION_STATEMENT
– 描述:每个会话的最大语句数
– 建议值:100-200
– 调整命令:sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
##
# SESS_POOL_SIZE
– 描述:会话池大小
– 建议值:并发用户数的1/2到2/3
– 调整命令:sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
##
# WORKER_THREADS
– 描述:工作线程数
– 建议值:CPU核心数
– 调整命令:sp_set_para_value(1, ‘WORKER_THREADS’, 16);
#
# 并发参数调优示例
##
# 硬件环境:16核CPU,500并发用户
# 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 查看并发参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 MAX_SESSIONS 1000
2 MAX_SESSION_STATEMENT 100
3 SESS_POOL_SIZE 200
4 WORKER_THREADS 16
Part04-生产案例与实战讲解
4.1 DM数据库内存参数调优案例
以下是一个内存参数调优的案例:
#
# 内存参数调优案例
##
# 场景描述
数据库服务器内存为64GB,数据缓冲区设置为16GB,查询性能较慢
##
# 调优步骤
# 1. 分析当前内存参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’);
# 输出
行号 PARA_NAME PARA_VALUE
———- —————- ———-
1 BUFFER 16384
2 SORT_BUF_SIZE 512
3 HJ_BUF_SIZE 1024
# 2. 分析内存使用情况
$ free -h
# 输出
total used free shared buff/cache available
Mem: 62G 18G 44G 0.1G 0.1G 44G
# 3. 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行查询测试
SQL> select count(*) from fgedu.t_test where id > 1000000;
# 执行时间对比
– 调优前:5秒
– 调优后:2秒
# 查看内存使用情况
$ free -h
# 输出
total used free shared buff/cache available
Mem: 62G 40G 22G 0.1G 0.1G 22G
# 内存参数调优案例
##
# 场景描述
数据库服务器内存为64GB,数据缓冲区设置为16GB,查询性能较慢
##
# 调优步骤
# 1. 分析当前内存参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’);
# 输出
行号 PARA_NAME PARA_VALUE
———- —————- ———-
1 BUFFER 16384
2 SORT_BUF_SIZE 512
3 HJ_BUF_SIZE 1024
# 2. 分析内存使用情况
$ free -h
# 输出
total used free shared buff/cache available
Mem: 62G 18G 44G 0.1G 0.1G 44G
# 3. 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行查询测试
SQL> select count(*) from fgedu.t_test where id > 1000000;
# 执行时间对比
– 调优前:5秒
– 调优后:2秒
# 查看内存使用情况
$ free -h
# 输出
total used free shared buff/cache available
Mem: 62G 40G 22G 0.1G 0.1G 22G
4.2 DM数据库IO参数调优案例
以下是一个IO参数调优的案例:
#
# IO参数调优案例
##
# 场景描述
数据库服务器使用SSD存储,IO性能瓶颈明显
##
# 调优步骤
# 1. 分析当前IO参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 DB_WRITER_COUNT 4
2 LOG_BUFFER_SIZE 512
3 LOG_SEND_BUF_SIZE 128
# 2. 分析IO使用情况
$ iostat -x
# 输出
avg-cpu: %user %nice %system %iowait %steal %idle
20.00 0.00 10.00 30.00 0.00 40.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1000 100000 200000 10000000 200000000
# 3. 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行IO测试
$ dd if=/dev/zero of=/dm/fgdata/test bs=1M count=1000
# 执行时间对比
– 调优前:10秒
– 调优后:5秒
# 分析IO使用情况
$ iostat -x
# 输出
avg-cpu: %user %nice %system %iowait %steal %idle
25.00 0.00 15.00 10.00 0.00 50.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1500 150000 300000 15000000 300000000
# IO参数调优案例
##
# 场景描述
数据库服务器使用SSD存储,IO性能瓶颈明显
##
# 调优步骤
# 1. 分析当前IO参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 DB_WRITER_COUNT 4
2 LOG_BUFFER_SIZE 512
3 LOG_SEND_BUF_SIZE 128
# 2. 分析IO使用情况
$ iostat -x
# 输出
avg-cpu: %user %nice %system %iowait %steal %idle
20.00 0.00 10.00 30.00 0.00 40.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1000 100000 200000 10000000 200000000
# 3. 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行IO测试
$ dd if=/dev/zero of=/dm/fgdata/test bs=1M count=1000
# 执行时间对比
– 调优前:10秒
– 调优后:5秒
# 分析IO使用情况
$ iostat -x
# 输出
avg-cpu: %user %nice %system %iowait %steal %idle
25.00 0.00 15.00 10.00 0.00 50.00
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1500 150000 300000 15000000 300000000
4.3 DM数据库并发参数调优案例
以下是一个并发参数调优的案例:
#
# 并发参数调优案例
##
# 场景描述
数据库服务器有16核CPU,并发用户数为500,会话池大小设置为100,并发性能较差
##
# 调优步骤
# 1. 分析当前并发参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 MAX_SESSIONS 500
2 MAX_SESSION_STATEMENT 50
3 SESS_POOL_SIZE 100
4 WORKER_THREADS 8
# 2. 分析并发使用情况
SQL> select count(*) from v$session;
# 输出
行号 COUNT(*)
———- ———–
1 450
# 3. 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行并发测试
$ ./concurrency_test.sh
# 性能对比
– 调优前:TPS=500, 响应时间=200ms
– 调优后:TPS=1000, 响应时间=100ms
# 查看并发使用情况
SQL> select count(*) from v$session;
# 输出
行号 COUNT(*)
———- ———–
1 480
# 并发参数调优案例
##
# 场景描述
数据库服务器有16核CPU,并发用户数为500,会话池大小设置为100,并发性能较差
##
# 调优步骤
# 1. 分析当前并发参数
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’);
# 输出
行号 PARA_NAME PARA_VALUE
———- ——————– ———-
1 MAX_SESSIONS 500
2 MAX_SESSION_STATEMENT 50
3 SESS_POOL_SIZE 100
4 WORKER_THREADS 8
# 2. 分析并发使用情况
SQL> select count(*) from v$session;
# 输出
行号 COUNT(*)
———- ———–
1 450
# 3. 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 4. 重启数据库
$ systemctl restart DmServicefgedudb
# 5. 验证调优效果
# 运行并发测试
$ ./concurrency_test.sh
# 性能对比
– 调优前:TPS=500, 响应时间=200ms
– 调优后:TPS=1000, 响应时间=100ms
# 查看并发使用情况
SQL> select count(*) from v$session;
# 输出
行号 COUNT(*)
———- ———–
1 480
4.4 DM数据库综合参数调优案例
以下是一个综合参数调优的案例:
#
# 综合参数调优案例
##
# 场景描述
数据库服务器配置:16核CPU,64GB内存,SSD存储,500GB数据量,500并发用户
##
# 调优步骤
# 1. 分析当前参数
SQL> select para_name, para_value from v$dm_ini where para_name in (
‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’, ‘PGA_AGGREGATE_TARGET’,
‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’,
‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’
);
# 2. 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
SQL> sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
# 3. 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
# 4. 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 5. 重启数据库
$ systemctl restart DmServicefgedudb
# 6. 验证调优效果
# 运行综合测试
$ ./comprehensive_test.sh
# 性能对比
– 调优前:TPS=800, QPS=4000, 响应时间=150ms
– 调优后:TPS=1500, QPS=7500, 响应时间=80ms
# 查看系统资源使用情况
$ top
# 输出
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 dmdba 20 0 40.0g 32.0g 1.0g S 100% 50.0 1:00.00 dmserver
# 综合参数调优案例
##
# 场景描述
数据库服务器配置:16核CPU,64GB内存,SSD存储,500GB数据量,500并发用户
##
# 调优步骤
# 1. 分析当前参数
SQL> select para_name, para_value from v$dm_ini where para_name in (
‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HJ_BUF_SIZE’, ‘PGA_AGGREGATE_TARGET’,
‘DB_WRITER_COUNT’, ‘LOG_BUFFER_SIZE’, ‘LOG_SEND_BUF_SIZE’,
‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’, ‘SESS_POOL_SIZE’, ‘WORKER_THREADS’
);
# 2. 调整内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 32768);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 1024);
SQL> sp_set_para_value(0, ‘HJ_BUF_SIZE’, 2048);
SQL> sp_set_para_value(1, ‘PGA_AGGREGATE_TARGET’, 8192);
# 3. 调整IO参数
SQL> sp_set_para_value(0, ‘DB_WRITER_COUNT’, 8);
SQL> sp_set_para_value(1, ‘LOG_BUFFER_SIZE’, 1024);
SQL> sp_set_para_value(1, ‘LOG_SEND_BUF_SIZE’, 256);
# 4. 调整并发参数
SQL> sp_set_para_value(1, ‘MAX_SESSIONS’, 1000);
SQL> sp_set_para_value(1, ‘MAX_SESSION_STATEMENT’, 100);
SQL> sp_set_para_value(0, ‘SESS_POOL_SIZE’, 200);
SQL> sp_set_para_value(1, ‘WORKER_THREADS’, 16);
# 5. 重启数据库
$ systemctl restart DmServicefgedudb
# 6. 验证调优效果
# 运行综合测试
$ ./comprehensive_test.sh
# 性能对比
– 调优前:TPS=800, QPS=4000, 响应时间=150ms
– 调优后:TPS=1500, QPS=7500, 响应时间=80ms
# 查看系统资源使用情况
$ top
# 输出
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 dmdba 20 0 40.0g 32.0g 1.0g S 100% 50.0 1:00.00 dmserver
Part05-风哥经验总结与分享
5.1 DM数据库参数调优最佳实践
基于多年DM数据库运维经验,总结以下参数调优最佳实践:
- 基于硬件环境:根据服务器的硬件配置调整参数
- 基于业务需求:根据业务的并发量、数据量、查询模式调整参数
- 循序渐进:逐步调整参数,观察效果
- 监控与分析:持续监控数据库性能,分析参数调整效果
- 综合考虑:综合考虑内存、IO、并发等参数
- 稳定性优先:确保数据库的稳定性
- 文档化:记录参数调整的过程和效果
- 定期优化:根据业务变化定期优化参数
- 风哥教程参考官方文档:参考DM官方文档的参数建议
- 测试验证:在测试环境验证参数调整效果
生产环境建议:参数调优是一个持续的过程,需要根据业务变化和硬件升级不断调整和优化。
5.2 DM数据库常见参数问题
DM数据库常见参数问题及解决方案:
#
# 问题1:内存参数设置不合理
#
# 原因分析
– 数据缓冲区设置过大,导致系统内存不足
– 排序缓冲区设置过小,导致排序性能差
– PGA设置不合理,导致临时表空间使用过大
#
# 解决方案
– 根据物理内存大小合理设置数据缓冲区
– 根据排序操作的频率和大小设置排序缓冲区
– 根据并发用户数和查询复杂度设置PGA
#
# 问题2:IO参数设置不合理
#
# 原因分析
– 数据库写线程数设置不足,导致IO性能瓶颈
– 日志缓冲区设置过小,导致日志写入频繁
– IO线程组设置不合理,导致IO资源分配不均
#
# 解决方案
– 根据CPU核心数和存储性能设置写线程数
– 根据事务频率和大小设置日志缓冲区
– 根据存储设备数量设置IO线程组
#
# 问题3:并发参数设置不合理
#
# 原因分析
– 最大会话数设置不足,导致连接失败
– 会话池大小设置不合理,导致会话创建频繁
– 工作线程数设置不足,导致并发性能差
#
# 解决方案
– 根据并发用户数设置最大会话数
– 根据并发用户数设置会话池大小
– 根据CPU核心数设置工作线程数
#
# 问题4:参数调整后性能反而下降
#
# 原因分析
– 参数调整过于激进
– 参数之间不匹配
– 没有考虑系统整体资源
#
# 解决方案
– 逐步调整参数,观察效果
– 综合考虑各参数之间的关系
– 平衡系统资源的分配
# 问题1:内存参数设置不合理
#
# 原因分析
– 数据缓冲区设置过大,导致系统内存不足
– 排序缓冲区设置过小,导致排序性能差
– PGA设置不合理,导致临时表空间使用过大
#
# 解决方案
– 根据物理内存大小合理设置数据缓冲区
– 根据排序操作的频率和大小设置排序缓冲区
– 根据并发用户数和查询复杂度设置PGA
#
# 问题2:IO参数设置不合理
#
# 原因分析
– 数据库写线程数设置不足,导致IO性能瓶颈
– 日志缓冲区设置过小,导致日志写入频繁
– IO线程组设置不合理,导致IO资源分配不均
#
# 解决方案
– 根据CPU核心数和存储性能设置写线程数
– 根据事务频率和大小设置日志缓冲区
– 根据存储设备数量设置IO线程组
#
# 问题3:并发参数设置不合理
#
# 原因分析
– 最大会话数设置不足,导致连接失败
– 会话池大小设置不合理,导致会话创建频繁
– 工作线程数设置不足,导致并发性能差
#
# 解决方案
– 根据并发用户数设置最大会话数
– 根据并发用户数设置会话池大小
– 根据CPU核心数设置工作线程数
#
# 问题4:参数调整后性能反而下降
#
# 原因分析
– 参数调整过于激进
– 参数之间不匹配
– 没有考虑系统整体资源
#
# 解决方案
– 逐步调整参数,观察效果
– 综合考虑各参数之间的关系
– 平衡系统资源的分配
5.3 DM数据库参数调优建议
DM数据库参数调优建议:
- 建立基准:在调优前进行基准测试,建立性能基线
- 分析瓶颈:通过监控工具分析性能瓶颈
- 重点优化:重点优化影响性能的关键参数
- 逐步调整:逐步调整参数,观察效果
- 综合考虑:综合考虑内存、IO、并发等参数
- 监控反馈:通过监控工具反馈调优效果
- 持续优化:根据业务变化持续优化参数
- 文档化:记录参数调整的过程和效果
- 风哥教程参考官方文档:参考DM官方文档的参数建议
- 测试验证:在测试环境验证参数调整效果
风哥提示:参数调优是数据库性能优化的重要组成部分,DBA人员必须掌握参数调优的方法和技巧,根据实际的硬件环境和业务需求进行合理调整,提高数据库性能和稳定性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
