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

本文分享自微信公众号 - JAVA日知录(java_daily),作者:单一色调

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Prometheus监控MySQL性能指标

    这里使用--web.listen-address=":9200"修改默认启动端口,防止跟上文中启动的服务器监控冲突。

    JAVA日知录
  • 一条查询SQL的执行过程

    需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX 这样的SQL,那么当我们向数据库发送这...

    JAVA日知录
  • 微服务架构技术选型

    JAVA日知录
  • 工作记录二: 记录一次简单的SQL优化过程

    对应的controller方法如下,可以看到该方法将request的storeId设置为空, 下面又调用listCateByStoreId()方法, 我们可以通...

    时间静止不是简史
  • 生信分析42.肿瘤浸润免疫与乳腺癌

    摘要部分,言简意赅,尤其是数据库的介绍,穿插在结果的叙述之中。作者对乳腺癌的认识和理解还是蛮深刻的,这也是对肿瘤进行深入分析的基础。

    芒果先生聊生信
  • 【Flutter 实战】文件系统目录

    不同的平台对应的文件系统是不同的,比如文件路径,因此 Flutter 中获取文件路径需要原生支持,原生端通过 MethodChannel 传递文件路径到 Flu...

    老孟Flutter
  • 微服务下持久化观念转变

    过去当我们开发一个企业应用的时候,我们经常首先会考虑的是“我们怎么和数据库交互”?最近的一两年来,人们慢慢的开始转变了,可能要问“我应该用哪种类型的数据库?是用...

    ImportSource
  • VirtuablBox 出错: VERR_SUPLIB_OWNER_NOT_ROOT 解决方法

    刚刚把 VirtualBox 升级, 从 3.2 到 4.0.4 后,虚拟机上的系统无法运行, 提示:

    RainMark
  • MySQL的常用操作命令整理

    缘由:初次接触命令行操作MySQL数据库,使用还不熟练,故整理之,方便日后查阅。 备注: 用户登录MySQL后,对数据库操作的命令基本都以”;” 或 “g”结尾...

    企鹅号小编
  • 【学习笔记】MySQL的常用操作命令整理

    缘由:初次接触命令行操作MySQL数据库,使用还不熟练,故整理之,方便日后查阅。 备注: 用户登录MySQL后,对数据库操作的命令基本都以”;” 或 “g”结尾...

    小莹莹

扫码关注云+社区

领取腾讯云代金券