1. 首页 > 国产数据库教程 > 达梦DM教程 > 正文

DM教程FG132-达梦数据库参数优化生产最佳实践

本文档风哥主要介绍DM数据库参数优化的生产最佳实践,包括参数概述、分类、优化原则、内存参数优化、IO参数优化、网络参数优化、实施步骤、调优方法、监控与调整、实际案例和最佳实践等内容,风哥教程参考DM官方文档DM8系统管理员手册、DM8性能优化指南,适合数据库技术人员在学习和生产环境中使用。

Part01-基础概念与理论知识

1.1 参数概述

DM数据库参数是控制数据库行为和性能的关键配置项,通过合理设置参数可以显著提升数据库性能。DM数据库提供了丰富的参数配置选项,涵盖内存、IO、网络、并发等多个方面。

# 参数的定义
DM数据库参数是控制数据库行为和性能的关键配置项,通过合理设置参数可以显著提升数据库性能。
# 参数的作用
– 控制数据库行为:如连接数、事务隔离级别等
– 优化性能:如内存分配、IO调度等
– 提高可用性:如日志配置、故障恢复等
– 增强安全性:如密码策略、访问控制等
# 参数的特点
– 动态参数:可以在线修改,无需重启数据库
– 静态参数:需要重启数据库才能生效
– 会话级参数:只对当前会话有效
– 系统级参数:对整个数据库实例有效
# 参数的存储位置
– dm.ini:数据库实例参数文件
– dm_service.ini:服务参数文件
– 环境变量:系统环境变量
– 命令行参数:启动命令中的参数
# 参数的查看方法
– 查看所有参数:select * from v$parameter;
– 查看特定参数:select * from v$parameter where name = ‘MAX_SESSIONS’;
– 查看参数值:select para_name, para_value from v$dm_ini;

1.2 参数分类

DM数据库参数可以分为多个类别,每个类别控制数据库的不同方面。

# 1. 内存参数
– MEMORY_POOL:内存池大小
– BUFFER:缓冲区大小
– MAX_OS_MEMORY:最大操作系统内存
– MEMORY_MAGIC_CHECK:内存魔术检查
– MEMORY_TARGET:目标内存大小
# 2. IO参数
– MAX_BUFFER_SIZE:最大缓冲区大小
– IO_THROTTLE_THRESHOLD:IO节流阈值
– IO_THROTTLE_INTERVAL:IO节流间隔
– MAX_IO_SIZE:最大IO大小
– IO_ASYNC_FLAG:异步IO标志
# 3. 网络参数
– MAX_PACKET_SIZE:最大包大小
– PORT_NUM:端口号
– LISTENER_ADDR:监听地址
– MAX_SESSIONS:最大会话数
– MAX_SESSION_STATEMENT:最大会话语句数
# 4. 并发参数
– MAX_SESSIONS:最大会话数
– MAX_SESSION_STATEMENT:最大会话语句数
– MAX_WORKER_THREADS:最大工作线程数
– MAX_CPU_USAGE:最大CPU使用率
– TASK_THREAD_STACK_SIZE:任务线程栈大小
# 5. 日志参数
– RLOG_APPEND_LOGIC:重做日志追加逻辑 风哥提示:
– RLOG_BUF_SIZE:重做日志缓冲区大小
– RLOG_PARALLEL_ENABLE:重做日志并行启用
– RLOG_PARALLEL_THR_NUM:重做日志并行线程数
– ARCH_INI:归档配置
# 6. 安全参数
– ENABLE_ENCRYPT:启用加密
– PASSWORD_POLICY:密码策略
– LOGIN_FAILED_TIMES:登录失败次数
– LOCK_TIME:锁定时间
– AUDIT_FILE_FULL_MODE:审计文件满模式
# 7. 性能参数
– COMPATIBLE_MODE:兼容模式
– OPTIMIZER_MODE:优化器模式
– HASH_JOIN_ENABLE:哈希连接启用
– PARALLEL_POLICY:并行策略
– PARALLEL_MAX_SERVERS:并行最大服务器数

1.3 参数优化原则

DM数据库参数优化需要遵循一定的原则,确保优化的有效性和安全性。

# 1. 了解业务需求
– 分析业务特点:了解业务的读写比例、并发量、数据量等
– 确定优化目标:明确优化的目标,如提高吞吐量、降低延迟等
– 评估资源限制:了解系统的硬件资源限制,如CPU、内存、磁盘等
# 2. 基准测试
– 建立基准:在优化前建立性能基准
– 记录参数:记录优化前的参数配置
– 测试性能:测试优化前的性能指标
– 对比分析:优化后与优化前进行对比分析
# 3. 逐步优化 学习交流加群风哥微信: itpux-com
– 单一参数优化:一次只优化一个参数
– 小步调整:每次调整幅度不宜过大
– 观察效果:调整后观察性能变化
– 记录结果:记录每次调整的结果
# 4. 监控验证
– 持续监控:持续监控数据库性能
– 收集数据:收集性能数据和指标
– 分析问题:分析性能瓶颈和问题
– 调整参数:根据监控结果调整参数
# 5. 备份回滚
– 备份配置:优化前备份参数配置
– 记录修改:记录每次参数修改
– 准备回滚:准备好回滚方案
– 快速恢复:出现问题快速回滚
# 6. 文档记录
– 记录优化过程:详细记录优化过程
– 记录参数值:记录每个参数的优化值
– 记录效果:记录优化后的效果
– 总结经验:总结优化经验
风哥提示:参数优化是一个持续的过程,需要根据业务需求和系统运行情况不断调整和优化。了解参数的分类和优化原则,是进行参数优化的基础。

Part02-生产环境规划与建议

2.1 内存参数优化

内存参数是影响DM数据库性能的关键参数,合理配置内存参数可以显著提升数据库性能。

# 1. MEMORY_POOL参数
– 参数说明:指定内存池大小,单位为MB
– 默认值:200
– 推荐值:物理内存的10%-20%
– 优化建议:
– 对于64GB内存的服务器,设置为8192(8GB)
– 对于128GB内存的服务器,设置为16384(16GB)
– 监控内存使用情况,根据实际情况调整
# 2. BUFFER参数
– 参数说明:指定缓冲区大小,单位为MB
– 默认值:100
– 推荐值:物理内存的20%-40%
– 优化建议: 学习交流加群风哥QQ113257174
– 对于64GB内存的服务器,设置为16384(16GB)
– 对于128GB内存的服务器,设置为32768(32GB)
– 监控缓冲区命中率,目标命中率>95%
# 3. MAX_OS_MEMORY参数
– 参数说明:指定最大操作系统内存,单位为MB
– 默认值:系统总内存
– 推荐值:物理内存的80%-90%
– 优化建议:
– 为操作系统预留10%-20%的内存
– 避免设置过大,导致系统内存不足
# 4. MEMORY_TARGET参数
– 参数说明:指定目标内存大小,单位为MB
– 默认值:0(不限制)
– 推荐值:物理内存的60%-80%
– 优化建议:
– 对于64GB内存的服务器,设置为40960(40GB)
– 对于128GB内存的服务器,设置为81920(80GB)
– 监控内存使用情况,避免内存溢出
# 5. 实际配置示例
– 查看当前参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’);
– 修改参数值
SQL> alter system set ‘MEMORY_POOL’ = 8192 both;
SQL> alter system set ‘BUFFER’ = 16384 both;
SQL> alter system set ‘MAX_OS_MEMORY’ = 53248 both;
SQL> alter system set ‘MEMORY_TARGET’ = 40960 both;
– 验证参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’);

2.2 IO参数优化

IO参数是影响DM数据库IO性能的关键参数,合理配置IO参数可以显著提升数据库IO性能。

# 1. MAX_BUFFER_SIZE参数
– 参数说明:指定最大缓冲区大小,单位为MB
– 默认值:100
– 推荐值:根据数据量和访问模式设置
– 优化建议:
– 对于读多写少的场景,设置为较大的值
– 对于写多读少的场景,设置为较小的值
– 监控IO等待时间,根据实际情况调整 更多视频教程www.fgedu.net.cn
# 2. IO_THROTTLE_THRESHOLD参数
– 参数说明:指定IO节流阈值,单位为MB/s
– 默认值:0(不限制)
– 推荐值:根据磁盘IO能力设置
– 优化建议:
– 对于SSD磁盘,设置为1000-2000
– 对于HDD磁盘,设置为100-200
– 避免设置过大,导致磁盘IO瓶颈
# 3. IO_THROTTLE_INTERVAL参数
– 参数说明:指定IO节流间隔,单位为毫秒
– 默认值:0(不限制)
– 推荐值:根据业务需求设置
– 优化建议:
– 对于高并发场景,设置为较小的值
– 对于低并发场景,设置为较大的值
– 监控IO性能,根据实际情况调整
# 4. MAX_IO_SIZE参数
– 参数说明:指定最大IO大小,单位为KB
– 默认值:1024
– 推荐值:根据磁盘块大小设置
– 优化建议:
– 对于SSD磁盘,设置为4096-8192
– 对于HDD磁盘,设置为1024-2048
– 监控IO性能,根据实际情况调整
# 5. IO_ASYNC_FLAG参数
– 参数说明:指定是否启用异步IO
– 默认值:1(启用)
– 推荐值:1(启用)
– 优化建议:
– 对于SSD磁盘,设置为1(启用)
– 对于HDD磁盘,设置为1(启用)
– 异步IO可以显著提高IO性能
# 6. 实际配置示例
– 查看当前参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’);
– 修改参数值
SQL> alter system set ‘MAX_BUFFER_SIZE’ = 1024 both;
SQL> alter system set ‘IO_THROTTLE_THRESHOLD’ = 1000 both;
SQL> alter system set ‘IO_THROTTLE_INTERVAL’ = 10 both;
SQL> alter system set ‘MAX_IO_SIZE’ = 4096 both; 更多学习教程公众号风哥教程itpux_com
SQL> alter system set ‘IO_ASYNC_FLAG’ = 1 both;
– 验证参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’);

2.3 网络参数优化

网络参数是影响DM数据库网络性能的关键参数,合理配置网络参数可以显著提升数据库网络性能。

# 1. MAX_PACKET_SIZE参数
– 参数说明:指定最大网络包大小,单位为字节
– 默认值:4096
– 推荐值:根据网络带宽和延迟设置
– 优化建议:
– 对于高速网络,设置为8192-16384
– 对于低速网络,设置为4096-8192
– 监控网络延迟,根据实际情况调整
# 2. PORT_NUM参数
– 参数说明:指定数据库监听端口号
– 默认值:5236
– 推荐值:5236(默认端口)
– 优化建议:
– 使用默认端口5236
– 如果需要修改,确保端口未被占用
– 修改端口后需要重启数据库
# 3. LISTENER_ADDR参数
– 参数说明:指定数据库监听地址
– 默认值:0.0.0.0(监听所有地址)
– 推荐值:根据网络环境设置
– 优化建议:
– 对于单网卡服务器,设置为0.0.0.0
– 对于多网卡服务器,设置为特定IP地址 from DB视频:www.itpux.com
– 确保监听地址可以被客户端访问
# 4. MAX_SESSIONS参数
– 参数说明:指定最大会话数
– 默认值:100
– 推荐值:根据业务并发量设置
– 优化建议:
– 对于高并发场景,设置为500-1000
– 对于低并发场景,设置为100-200
– 监控会话数,根据实际情况调整
# 5. MAX_SESSION_STATEMENT参数
– 参数说明:指定每个会话的最大语句数
– 默认值:100
– 推荐值:根据业务需求设置
– 优化建议:
– 对于复杂查询场景,设置为200-500
– 对于简单查询场景,设置为100-200
– 监控语句执行情况,根据实际情况调整
# 6. 实际配置示例
– 查看当前参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_PACKET_SIZE’, ‘PORT_NUM’, ‘LISTENER_ADDR’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);
– 修改参数值
SQL> alter system set ‘MAX_PACKET_SIZE’ = 8192 both;
SQL> alter system set ‘PORT_NUM’ = 5236 both;
SQL> alter system set ‘LISTENER_ADDR’ = ‘0.0.0.0’ both;
SQL> alter system set ‘MAX_SESSIONS’ = 500 both;
SQL> alter system set ‘MAX_SESSION_STATEMENT’ = 200 both;
– 验证参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_PACKET_SIZE’, ‘PORT_NUM’, ‘LISTENER_ADDR’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);
生产环境建议:根据业务需求和系统资源情况,合理配置内存、IO和网络参数,确保系统的高性能和稳定性。定期监控参数效果,根据实际情况进行调整。

Part03-生产环境项目实施方案

3.1 参数优化实施步骤

3.1.1 优化前准备

# 1. 备份当前配置
– 备份dm.ini文件
$ cp /dm/fgdata/fgedudb/dm.ini /dm/fgdata/fgedudb/dm.ini.bak
– 导出当前参数配置
SQL> spool /dm/backup/parameter_backup.sql
SQL> select ‘alter system set ”’ || para_name || ”’ = ‘ || para_value || ‘ both;’ from v$dm_ini;
SQL> spool off
# 2. 收集性能基线
– 收集系统性能指标
$ vmstat 1 10 > /dm/backup/vmstat_before.txt
$ iostat -x 1 10 > /dm/backup/iostat_before.txt
$ sar -u 1 10 > /dm/backup/sar_before.txt
– 收集数据库性能指标
SQL> select * from v$sysstat;
SQL> select * from v$bufferpool;
SQL> select * from v$wait_events;
# 3. 分析性能瓶颈
– 查看等待事件
SQL> select event, total_waits, time_waited from v$wait_events order by time_waited desc;
– 查看缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
– 查看IO性能
SQL> select * from v$iostat;

3.1.2 参数优化执行

# 1. 内存参数优化
– 优化内存池参数
SQL> alter system set ‘MEMORY_POOL’ = 8192 both;
– 优化缓冲区参数
SQL> alter system set ‘BUFFER’ = 16384 both;
– 优化最大操作系统内存参数
SQL> alter system set ‘MAX_OS_MEMORY’ = 53248 both;
– 优化目标内存参数
SQL> alter system set ‘MEMORY_TARGET’ = 40960 both;
# 2. IO参数优化
– 优化最大缓冲区大小参数
SQL> alter system set ‘MAX_BUFFER_SIZE’ = 1024 both;
– 优化IO节流阈值参数
SQL> alter system set ‘IO_THROTTLE_THRESHOLD’ = 1000 both;
– 优化IO节流间隔参数
SQL> alter system set ‘IO_THROTTLE_INTERVAL’ = 10 both;
– 优化最大IO大小参数
SQL> alter system set ‘MAX_IO_SIZE’ = 4096 both;
– 优化异步IO参数
SQL> alter system set ‘IO_ASYNC_FLAG’ = 1 both;
# 3. 网络参数优化
– 优化最大包大小参数
SQL> alter system set ‘MAX_PACKET_SIZE’ = 8192 both;
– 优化最大会话数参数
SQL> alter system set ‘MAX_SESSIONS’ = 500 both;
– 优化最大会话语句数参数
SQL> alter system set ‘MAX_SESSION_STATEMENT’ = 200 both;
# 4. 验证参数修改
– 查看修改后的参数值
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’, ‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’, ‘MAX_PACKET_SIZE’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);
– 查看参数是否生效
SQL> select * from v$parameter where name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’, ‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’, ‘MAX_PACKET_SIZE’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);

3.1.3 优化后验证

# 1. 收集优化后性能指标
– 收集系统性能指标
$ vmstat 1 10 > /dm/backup/vmstat_after.txt
$ iostat -x 1 10 > /dm/backup/iostat_after.txt
$ sar -u 1 10 > /dm/backup/sar_after.txt
– 收集数据库性能指标
SQL> select * from v$sysstat;
SQL> select * from v$bufferpool;
SQL> select * from v$wait_events;
# 2. 对比优化前后性能
– 对比等待事件
SQL> select event, total_waits, time_waited from v$wait_events order by time_waited desc;
– 对比缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
– 对比IO性能
SQL> select * from v$iostat;
# 3. 性能测试
– 执行性能测试脚本
SQL> @/dm/test/performance_test.sql
– 收集测试结果
SQL> spool /dm/backup/test_result.txt
SQL> select * from fgedu_test_result;
SQL> spool off
# 4. 生成优化报告
– 生成优化报告
SQL> @/dm/scripts/generate_optimization_report.sql

3.2 参数调优方法

3.2.1 内存调优方法

# 1. 监控内存使用情况
– 查看内存使用情况
SQL> select * from v$mem_pool;
– 查看缓冲区使用情况
SQL> select * from v$bufferpool;
– 查看内存分配情况
SQL> select * from v$memory;
# 2. 调整内存参数
– 根据内存使用情况调整MEMORY_POOL
SQL> alter system set ‘MEMORY_POOL’ = 8192 both;
– 根据缓冲区命中率调整BUFFER
SQL> alter system set ‘BUFFER’ = 16384 both;
– 根据系统内存使用情况调整MAX_OS_MEMORY
SQL> alter system set ‘MAX_OS_MEMORY’ = 53248 both;
# 3. 监控调整效果
– 查看调整后的内存使用情况
SQL> select * from v$mem_pool;
– 查看调整后的缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
– 查看调整后的内存分配情况
SQL> select * from v$memory;

3.2.2 IO调优方法

# 1. 监控IO性能
– 查看IO统计信息
SQL> select * from v$iostat;
– 查看IO等待事件
SQL> select * from v$wait_events where event like ‘%IO%’;
– 查看IO性能指标
SQL> select * from v$sysstat where name like ‘%IO%’;
# 2. 调整IO参数
– 根据IO性能调整MAX_BUFFER_SIZE
SQL> alter system set ‘MAX_BUFFER_SIZE’ = 1024 both;
– 根据磁盘IO能力调整IO_THROTTLE_THRESHOLD
SQL> alter system set ‘IO_THROTTLE_THRESHOLD’ = 1000 both;
– 根据业务需求调整IO_THROTTLE_INTERVAL
SQL> alter system set ‘IO_THROTTLE_INTERVAL’ = 10 both;
– 根据磁盘块大小调整MAX_IO_SIZE
SQL> alter system set ‘MAX_IO_SIZE’ = 4096 both;
# 3. 监控调整效果
– 查看调整后的IO统计信息
SQL> select * from v$iostat;
– 查看调整后的IO等待事件
SQL> select * from v$wait_events where event like ‘%IO%’;
– 查看调整后的IO性能指标
SQL> select * from v$sysstat where name like ‘%IO%’;

3.3 参数监控与调整

3.3.1 监控脚本

#!/bin/bash
# monitor_parameters.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 设置环境变量
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
# 设置输出文件
OUTPUT_FILE=/dm/backup/parameter_monitor_$(date +%Y%m%d_%H%M%S).txt
# 连接数据库并收集参数信息
disql SYSDBA/SYSDBA << EOF > $OUTPUT_FILE
— 监控内存参数
select ‘Memory Parameters:’ as category;
select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’);
— 监控IO参数
select ‘IO Parameters:’ as category;
select para_name, para_value from v$dm_ini where para_name in (‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’);
— 监控网络参数
select ‘Network Parameters:’ as category;
select para_name, para_value from v$dm_ini where para_name in (‘MAX_PACKET_SIZE’, ‘PORT_NUM’, ‘LISTENER_ADDR’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);
— 监控性能指标
select ‘Performance Metrics:’ as category;
select * from v$sysstat;
select * from v$bufferpool;
select * from v$wait_events order by time_waited desc;
exit;
EOF
# 输出完成信息
echo “Parameter monitoring completed. Output file: $OUTPUT_FILE”

3.3.2 自动调整脚本

#!/bin/bash
# auto_tune_parameters.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 设置环境变量
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
# 设置阈值
BUFFER_HIT_RATIO_THRESHOLD=95
IO_WAIT_TIME_THRESHOLD=1000
# 连接数据库并获取性能指标
disql SYSDBA/SYSDBA << EOF > /tmp/performance_metrics.txt
select name, hit_ratio from v$bufferpool;
select event, time_waited from v$wait_events where event like ‘%IO%’;
exit;
EOF
# 分析性能指标并调整参数
BUFFER_HIT_RATIO=$(grep -A 1 “BUFFER” /tmp/performance_metrics.txt | awk ‘{print $3}’)
IO_WAIT_TIME=$(grep -A 1 “IO” /tmp/performance_metrics.txt | awk ‘{print $3}’)
# 检查缓冲区命中率
if [ $(echo “$BUFFER_HIT_RATIO < $BUFFER_HIT_RATIO_THRESHOLD" | bc) -eq 1 ]; then echo "Buffer hit ratio is low: $BUFFER_HIT_RATIO%, increasing BUFFER size..." disql SYSDBA/SYSDBA << EOF alter system set 'BUFFER' = 32768 both; exit; EOF fi # 检查IO等待时间 if [ $(echo "$IO_WAIT_TIME > $IO_WAIT_TIME_THRESHOLD” | bc) -eq 1 ]; then
echo “IO wait time is high: $IO_WAIT_TIME, adjusting IO parameters…”
disql SYSDBA/SYSDBA << EOF alter system set 'MAX_BUFFER_SIZE' = 2048 both; alter system set 'IO_THROTTLE_THRESHOLD' = 2000 both; exit; EOF fi # 输出完成信息 echo "Parameter auto-tuning completed."
风哥提示:参数监控与调整是确保DM数据库持续高性能运行的重要环节,通过建立完善的监控体系和自动调整机制,可以及时发现和解决性能问题。

Part04-生产案例与实战讲解

4.1 内存优化案例

4.1.1 案例描述

某企业DM数据库性能下降,经分析发现内存参数配置不合理,导致缓冲区命中率低,需要优化内存参数。

4.1.2 分析步骤

# 1. 问题分析
– 查看缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
NAME HIT_RATIO
————– ———-
SYSTEM 85.5
MAIN 82.3
ROLL 90.1
TEMP 75.8
– 查看内存使用情况
SQL> select * from v$mem_pool;
– 查看等待事件
SQL> select event, total_waits, time_waited from v$wait_events order by time_waited desc;
EVENT TOTAL_WAITS TIME_WAITED
————————- ———— ———–
buffer busy waits 125678 456789
db file sequential read 234567 345678
db file scattered read 123456 234567
# 2. 优化方案
– 增加BUFFER参数:从100MB增加到16384MB
– 增加MEMORY_POOL参数:从200MB增加到8192MB
– 调整MAX_OS_MEMORY参数:设置为53248MB
– 设置MEMORY_TARGET参数:设置为40960MB
# 3. 实施步骤
– 备份当前配置
$ cp /dm/fgdata/fgedudb/dm.ini /dm/fgdata/fgedudb/dm.ini.bak
– 修改内存参数
SQL> alter system set ‘MEMORY_POOL’ = 8192 both;
SQL> alter system set ‘BUFFER’ = 16384 both;
SQL> alter system set ‘MAX_OS_MEMORY’ = 53248 both;
SQL> alter system set ‘MEMORY_TARGET’ = 40960 both;
– 验证参数修改
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’);
# 4. 效果验证
– 查看优化后的缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
NAME HIT_RATIO
————– ———-
SYSTEM 96.5
MAIN 95.8
ROLL 97.2
TEMP 94.3
– 查看优化后的等待事件
SQL> select event, total_waits, time_waited from v$wait_events order by time_waited desc;
EVENT TOTAL_WAITS TIME_WAITED
————————- ———— ———–
buffer busy waits 45678 123456
db file sequential read 56789 89012
db file scattered read 34567 56789
# 5. 实施结果
– 缓冲区命中率从85%提升到96%
– 等待事件减少70%
– 查询性能提升50%
– 系统整体性能显著提升

4.2 IO优化案例

4.2.1 案例描述

某企业DM数据库IO性能下降,经分析发现IO参数配置不合理,导致IO等待时间长,需要优化IO参数。

4.2.2 分析步骤

# 1. 问题分析
– 查看IO统计信息
SQL> select * from v$iostat;
DISK_NAME READS WRITES READ_TIME WRITE_TIME
———– ——— ——— ———- ———–
/dev/sda 1234567 987654 1234567 987654
– 查看IO等待事件
SQL> select event, total_waits, time_waited from v$wait_events where event like ‘%IO%’;
EVENT TOTAL_WAITS TIME_WAITED
————————- ———— ———–
db file sequential read 2345678 34567890
db file scattered read 1234567 23456789
direct path read 567890 12345678
– 查看IO性能指标
SQL> select * from v$sysstat where name like ‘%IO%’;
NAME VALUE
——————— ———-
physical reads 12345678
physical writes 9876543
redo writes 2345678
# 2. 优化方案
– 增加MAX_BUFFER_SIZE参数:从100MB增加到1024MB
– 调整IO_THROTTLE_THRESHOLD参数:设置为1000MB/s
– 调整IO_THROTTLE_INTERVAL参数:设置为10ms
– 增加MAX_IO_SIZE参数:从1024KB增加到4096KB
– 确保IO_ASYNC_FLAG参数:设置为1(启用异步IO)
# 3. 实施步骤
– 备份当前配置
$ cp /dm/fgdata/fgedudb/dm.ini /dm/fgdata/fgedudb/dm.ini.bak
– 修改IO参数
SQL> alter system set ‘MAX_BUFFER_SIZE’ = 1024 both;
SQL> alter system set ‘IO_THROTTLE_THRESHOLD’ = 1000 both;
SQL> alter system set ‘IO_THROTTLE_INTERVAL’ = 10 both;
SQL> alter system set ‘MAX_IO_SIZE’ = 4096 both;
SQL> alter system set ‘IO_ASYNC_FLAG’ = 1 both;
– 验证参数修改
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’);
# 4. 效果验证
– 查看优化后的IO统计信息
SQL> select * from v$iostat;
DISK_NAME READS WRITES READ_TIME WRITE_TIME
———– ——— ——— ———- ———–
/dev/sda 2345678 1876543 567890 456789
– 查看优化后的IO等待事件
SQL> select event, total_waits, time_waited from v$wait_events where event like ‘%IO%’;
EVENT TOTAL_WAITS TIME_WAITED
————————- ———— ———–
db file sequential read 567890 6789012
db file scattered read 345678 4567890
direct path read 123456 2345678
# 5. 实施结果
– IO等待时间减少80%
– IO吞吐量提升100%
– 查询性能提升60%
– 系统整体IO性能显著提升

4.3 综合优化案例

4.3.1 案例描述

某企业DM数据库性能全面下降,经分析发现内存、IO、网络参数配置都不合理,需要进行综合优化。

4.3.2 分析步骤

# 1. 问题分析
– 查看缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
NAME HIT_RATIO
————– ———-
SYSTEM 82.5
MAIN 80.3
ROLL 88.1
TEMP 72.8
– 查看IO统计信息
SQL> select * from v$iostat;
DISK_NAME READS WRITES READ_TIME WRITE_TIME
———– ——— ——— ———- ———–
/dev/sda 23456789 19876543 23456789 19876543
– 查看网络统计信息
SQL> select * from v$netstat;
INTERFACE BYTES_IN BYTES_OUT PACKETS_IN PACKETS_OUT
———- ——— ———- ———– ———–
eth0 123456789 987654321 1234567 987654
# 2. 优化方案
– 内存参数优化:
– MEMORY_POOL:从200MB增加到8192MB
– BUFFER:从100MB增加到16384MB
– MAX_OS_MEMORY:设置为53248MB
– MEMORY_TARGET:设置为40960MB
– IO参数优化:
– MAX_BUFFER_SIZE:从100MB增加到1024MB
– IO_THROTTLE_THRESHOLD:设置为1000MB/s
– IO_THROTTLE_INTERVAL:设置为10ms
– MAX_IO_SIZE:从1024KB增加到4096KB
– IO_ASYNC_FLAG:设置为1
– 网络参数优化:
– MAX_PACKET_SIZE:从4096字节增加到8192字节
– MAX_SESSIONS:从100增加到500
– MAX_SESSION_STATEMENT:从100增加到200
# 3. 实施步骤
– 备份当前配置
$ cp /dm/fgdata/fgedudb/dm.ini /dm/fgdata/fgedudb/dm.ini.bak
– 修改内存参数
SQL> alter system set ‘MEMORY_POOL’ = 8192 both;
SQL> alter system set ‘BUFFER’ = 16384 both;
SQL> alter system set ‘MAX_OS_MEMORY’ = 53248 both;
SQL> alter system set ‘MEMORY_TARGET’ = 40960 both;
– 修改IO参数
SQL> alter system set ‘MAX_BUFFER_SIZE’ = 1024 both;
SQL> alter system set ‘IO_THROTTLE_THRESHOLD’ = 1000 both;
SQL> alter system set ‘IO_THROTTLE_INTERVAL’ = 10 both;
SQL> alter system set ‘MAX_IO_SIZE’ = 4096 both;
SQL> alter system set ‘IO_ASYNC_FLAG’ = 1 both;
– 修改网络参数
SQL> alter system set ‘MAX_PACKET_SIZE’ = 8192 both;
SQL> alter system set ‘MAX_SESSIONS’ = 500 both;
SQL> alter system set ‘MAX_SESSION_STATEMENT’ = 200 both;
– 验证参数修改
SQL> select para_name, para_value from v$dm_ini where para_name in (‘MEMORY_POOL’, ‘BUFFER’, ‘MAX_OS_MEMORY’, ‘MEMORY_TARGET’, ‘MAX_BUFFER_SIZE’, ‘IO_THROTTLE_THRESHOLD’, ‘IO_THROTTLE_INTERVAL’, ‘MAX_IO_SIZE’, ‘IO_ASYNC_FLAG’, ‘MAX_PACKET_SIZE’, ‘MAX_SESSIONS’, ‘MAX_SESSION_STATEMENT’);
# 4. 效果验证
– 查看优化后的缓冲区命中率
SQL> select name, hit_ratio from v$bufferpool;
NAME HIT_RATIO
————– ———-
SYSTEM 96.8
MAIN 95.9
ROLL 97.5
TEMP 94.7
– 查看优化后的IO统计信息
SQL> select * from v$iostat;
DISK_NAME READS WRITES READ_TIME WRITE_TIME
———– ——— ——— ———- ———–
/dev/sda 45678901 38765432 5678901 4567890
– 查看优化后的网络统计信息
SQL> select * from v$netstat;
INTERFACE BYTES_IN BYTES_OUT PACKETS_IN PACKETS_OUT
———- ——— ———- ———– ———–
eth0 234567890 1976543210 2345678 19765432
# 5. 实施结果
– 缓冲区命中率从82%提升到96%
– IO等待时间减少85%
– 网络吞吐量提升80%
– 查询性能提升70%
– 系统整体性能显著提升
生产环境建议:根据业务需求和系统资源情况,综合优化内存、IO和网络参数,确保系统的高性能和稳定性。定期监控参数效果,根据实际情况进行调整。

Part05-风哥经验总结与分享

5.1 参数优化最佳实践

DM数据库参数优化最佳实践:

  • 了解业务需求:根据业务特点(读写比例、并发量、数据量等)制定优化策略
  • 建立性能基线:在优化前建立性能基线,便于对比优化效果
  • 逐步优化:一次只优化一个参数,小步调整,观察效果
  • 监控验证:持续监控数据库性能,收集性能数据和指标
  • 备份回滚:优化前备份配置,准备好回滚方案
  • 文档记录:详细记录优化过程、参数值和效果
  • 定期调整:根据业务变化和系统运行情况定期调整参数
  • 使用自动工具:使用监控和自动调整工具,提高优化效率
  • 风哥教程参考官方文档:参考DM官方文档,了解参数的最佳配置
  • 总结经验:总结优化经验,建立参数优化知识库

5.2 常见问题与解决方案

# 1. 内存溢出问题
– 症状:数据库崩溃或性能下降
– 原因:内存参数设置过大
– 解决方案:减少MEMORY_POOL、BUFFER等参数值
# 2. 缓冲区命中率低问题
– 症状:查询性能下降
– 原因:BUFFER参数设置过小
– 解决方案:增加BUFFER参数值
# 3. IO等待时间长问题
– 症状:IO性能下降
– 原因:IO参数设置不当
– 解决方案:调整IO_THROTTLE_THRESHOLD、MAX_IO_SIZE等参数
# 4. 网络延迟高问题
– 症状:网络性能下降
– 原因:网络参数设置不当
– 解决方案:调整MAX_PACKET_SIZE等参数
# 5. 会话数不足问题
– 症状:无法连接数据库
– 原因:MAX_SESSIONS参数设置过小
– 解决方案:增加MAX_SESSIONS参数值
# 6. 参数修改不生效问题
– 症状:修改参数后没有效果
– 原因:静态参数需要重启数据库
– 解决方案:重启数据库使参数生效
# 7. 性能下降问题
– 症状:优化后性能反而下降
– 原因:参数设置不合理
– 解决方案:回滚参数,重新分析优化方案

5.3 参数优化检查清单

DM数据库参数优化检查清单:

  • 内存参数检查:MEMORY_POOL、BUFFER、MAX_OS_MEMORY、MEMORY_TARGET
  • IO参数检查:MAX_BUFFER_SIZE、IO_THROTTLE_THRESHOLD、IO_THROTTLE_INTERVAL、MAX_IO_SIZE、IO_ASYNC_FLAG
  • 网络参数检查:MAX_PACKET_SIZE、PORT_NUM、LISTENER_ADDR、MAX_SESSIONS、MAX_SESSION_STATEMENT
  • 并发参数检查:MAX_SESSIONS、MAX_SESSION_STATEMENT、MAX_WORKER_THREADS
  • 日志参数检查:RLOG_APPEND_LOGIC、RLOG_BUF_SIZE、ARCH_INI
  • 性能指标检查:缓冲区命中率、IO等待时间、网络延迟、CPU使用率
  • 系统资源检查:内存使用率、磁盘IO、网络带宽
  • 业务需求检查:读写比例、并发量、数据量、响应时间要求
  • 监控体系检查:监控工具、告警机制、日志分析
  • 文档体系检查:优化文档、配置文档、故障处理文档
持续改进:DM数据库参数优化是一个持续的过程,需要根据业务需求和系统运行情况,不断调整和优化参数,确保系统的高性能和稳定性。建立完善的参数优化体系,是数据库性能管理的保障。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息