记一次对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 性能,较优化前还是有不少的提升的,又可以抽空去抽根烟了。

目录
相关文章
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
21 0
|
29天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
29天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
|
29天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
2天前
|
存储 SQL 缓存
构建高效的矢量数据库查询:查询语言与优化策略
【4月更文挑战第30天】本文探讨了构建高效矢量数据库查询的关键点,包括设计简洁、表达性强的查询语言,支持空间操作、函数及索引。查询优化策略涉及查询重写、索引优化、并行处理和缓存机制,以提升查询效率和准确性。这些方法对处理高维空间数据的应用至关重要,随着技术进步,矢量数据库查询系统将在更多领域得到应用。
|
2天前
|
存储 缓存 固态存储
优化矢量数据库性能:技巧与最佳实践
【4月更文挑战第30天】本文探讨了优化矢量数据库性能的技巧和最佳实践,包括硬件(如使用SSD、增加内存和利用多核处理器)、软件(索引优化、查询优化、数据分区和压缩)和架构(读写分离、分布式架构及缓存策略)方面的优化措施。通过这些方法,可以提升系统运行效率,应对大数据量和复杂查询的挑战。
|
4天前
|
关系型数据库 大数据 数据库
关系型数据库索引优化
关系型数据库索引优化是一个综合的过程,需要综合考虑数据的特点、查询的需求以及系统的性能要求。通过合理的索引策略和技术,可以显著提高数据库的查询性能和整体效率。
12 4
|
4天前
|
存储 缓存 关系型数据库
关系型数据库数据库表设计的优化
您可以优化关系型数据库的表设计,提高数据库的性能、可维护性和可扩展性。但请注意,每个数据库和应用程序都有其独特的需求和挑战,因此在实际应用中需要根据具体情况进行调整和优化。
10 4
|
4天前
|
缓存 监控 关系型数据库
关系型数据库优化查询语句
记住每个数据库和查询都是独特的,所以最好的优化策略通常是通过测试和分析来确定的。在进行任何大的更改之前,始终备份你的数据并在测试环境中验证更改的效果。
13 5
|
4天前
|
数据库 开发者 UED
优化数据库性能的六大策略
在当今数字化时代,数据库性能对于系统的稳定运行至关重要。本文将介绍六大策略,帮助开发者优化数据库性能,提升系统效率和用户体验。