记一次对DM数据库的优化过程

简介: 记一次对DM数据库的优化过程

某年某月某日的一个下午,接收到监控服务器的一条告警短信:尊敬的运维工程师 XX,你好:“192.168.136.200”数据库服务器 CPU 异常,CPU 使用率 98.7%,请尽快处理。看到这个消息浑身一紧,赶紧掐灭手中的烟,跑回办公室。

以上段子纯属捏造,如有雷同,我反正是不改。

言归正传,本文是记录一次对达梦数据库的优化过程。

处理问题的第一步,是需要了解当前服务器的状况,我们通过以下两种手段确认服务器瓶颈。


系统状况


  • 通过服务器性能监控大盘观察当前系统性能      
  • 上图我们看出 CPU 基本耗尽,IO 飙升。
  • 通过 sar 命令观察服务器实时状态
    sar 10 3
  • 确认 CPU 被耗满,没有空闲。

通过我的细致观察,发现服务器 CPU 被耗满。接下来需要查看数据库服务器的配置参数是否合理,是否有慢查询脚本。


参数优化


  • 查看 dm 配置文件
    cd /dm7/dmdbms/devdb cat dm.ini | grep -E "MEMORY_POOL|MEMORY_TARGET|BUFFER"
  • 发现数据库参数配置为安装时候的默认配置,参数不合理,需要优化参数配置。
  • 备份原配置文件
    cp dm.ini dm.ini.bak
  • 修改配置 修改如下几个关键参数,根据之前文章数据库优化-实例优化中的表格进行优化(ps:当前数据库内存 2G)
参数 优化建议 优化后的值,单位 M
MEMORY_POOL 建议为内存的 90% 1800
MEMORY_TARGET 建议为内存的 90% 1800
BUFFER 建议为内存的 60% 1200
MAX_BUFFER 建议为内存的 70% 1400
MAX_SESSIONS
1000
  • 重启数据库服务
    service DmServerdm restart

参数优化后我们尝试找出当前数据库存在的慢查询 SQL,看看是否可以优化。


慢 SQL 优化


达梦数据库不像 MySQL 可以直接将慢查询存放在指定位置,达梦需要通过 AWR 报告中找出慢查询。(AWR 报告大家自行百度)

启用 DM 快照需要调用 DBMS_WORKLOAD_REPOSITORY 包。

  • 使用 DBA 账户登录数据库
    disql SYSDBA/password
  • 创建 DBMS_WORKLOAD_REPOSITORY 系统包,开启 AWR 快照功能。
    SP_INIT_AWR_SYS(1);
  • 启用状态检测。
    SELECT SF_CHECK_AWR_SYS;
  • 设置 AWR 快照间隔时间(30 分钟)
    CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(30);
  • 手动创建快照:
    DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
    这里我们可以间隔几分钟多执行几遍创建几个不同的快照。
    查看创建的快照信息,包括快照 id:
    SELECT * FROM SYS.WRM$_SNAPSHOT;

  • 查看 AWR 报告内容
    SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
    查看 snapshot 的 id 在 1~2 范围内的 AWR 分析报告的带 html 格式的内容。
  • 这个内容格式基本没办法看,我们需要将其转化成 html 页面查看。
  • 生成 HTML 文件(需要先对 awr 文件夹授权)
chmod 777 /awr
SYS.AWR_REPORT_HTML(1,2,'/awr','awr1.html');
  • 通过 AWR 报告找出慢 SQL
    SQL Ordered by Elapsed Time 的内容就是慢查询语句。
    在拿到慢查询语句后我们需要联系开发人员修改查询语句,这次优化过程中我通过给相关字段添加索引,改写一部分 SQL 完成。
    但是数据表本身设计不合理这个没有优化,由于设计不合理导致查询没办法走索引;而有些查询则需要从业务角度进行优化,比如是否有必要对大表进行全表查询然后再排序?等等等等。。。(至于数据库 SQL 优化的具体策略我们下期再聊)

在完成优化后重启应用,再次通过sar 10 3观察 CPU 性能,较优化前还是有不少的提升的,又可以抽空去抽根烟了。

目录
相关文章
|
6月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
10月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
473 1
|
6月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
348 6
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1334 5
|
9月前
|
机器学习/深度学习 SQL 运维
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
410 4
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
427 11
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
2035 1
下一篇
开通oss服务