记一次对DM数据库的优化过程[通俗易懂]

记一次对DM数据库的优化过程[通俗易懂]某年某月某日的一个下午,接收到监控服务器的一条告警短信: 尊敬的运维工程师 XX,你好: “192.168.136.200”数据库服务器 CPU 异常,CPU 使用率 98.7%,请尽快处理。 看到…

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

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

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

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

系统状况

  • 通过服务器性能监控大盘观察当前系统性能 image.png 通过上图我们看出 CPU 基本耗尽,IO 飙升。

  • 通过 sar 命令观察服务器实时状态
    sar 10 3 image.png 确认 CPU 被耗满,没有空闲。

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

参数优化

  • 查看 dm 配置文件
    cd /dm7/dmdbms/devdb cat dm.ini | grep -E "MEMORY_POOL|MEMORY_TARGET|BUFFER" image.png 发现数据库参数配置为安装时候的默认配置,参数不合理,需要优化参数配置。

  • 备份原配置文件
    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; image.png

  • 查看 AWR 报告内容
    SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
    查看 snapshot 的 id 在 1~2 范围内的 AWR 分析报告的带 html 格式的内容。 image.png 这个内容格式基本没办法看,我们需要将其转化成 html 页面查看。

  • 生成 HTML 文件(需要先对 awr 文件夹授权)

    chmod 777 /awr
    SYS.AWR_REPORT_HTML(1,2,"/awr","awr1.html");
    

    代码100分

  • 通过 AWR 报告找出慢 SQL
    image.png SQL Ordered by Elapsed Time 的内容就是慢查询语句。
    在拿到慢查询语句后我们需要联系开发人员修改查询语句,这次优化过程中我通过给相关字段添加索引,改写一部分 SQL 完成。

    但是数据表本身设计不合理这个没有优化,由于设计不合理导致查询没办法走索引;而有些查询则需要从业务角度进行优化,比如是否有必要对大表进行全表查询然后再排序?等等等等。。。(至于数据库 SQL 优化的具体策略我们下期再聊)

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

欢迎关注我的个人公众号:JAVA日知录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11185.html

(0)
上一篇 2022-12-15
下一篇 2022-12-15

相关推荐

  • 理解Python中的ndarray

    理解Python中的ndarray随着数据分析和机器学习的普及,Python的numpy模块中的ndarray逐渐成为Python中最常用的数据结构之一。Python的ndarray是一种多维数组对象,可以在Python中实现大规模数据和矩阵计算。

    2024-05-04
    64
  • Python中断言的使用方法及优势

    Python中断言的使用方法及优势在程序设计中,断言是一种可以在代码中嵌入的一个可以被检查的布尔表达式,用来表示程序员预计到时应该为真的条件。如果断言计算结果为假,就意味着当前的代码中存在缺陷。

    2023-12-19
    105
  • mysql安装教程-window操作系统

    mysql安装教程-window操作系统1、下载安装包(官网下载) 直达链接:https://dev.mysql.com/downloads/mysql/ 下载后放到指定目录下解压即可(给电脑新手忠告:注意不要放在C盘,养成好习惯,放C盘多

    2023-06-11
    150
  • 使用conda安装numpy

    使用conda安装numpy在进行Python开发时,常常需要使用一些科学计算的库,如numpy、scipy等。因此,在进行这类开发工作时,需要用到conda这个工具,来安装和管理这些库。本文将介绍如何使用conda来安装numpy。

    2024-04-17
    86
  • sql语言删除一个表的命令是_sql批量删除表

    sql语言删除一个表的命令是_sql批量删除表学习要点 使用 DROP TABLE 语句来删除表。 使用 ALTER TABLE 语句向表中添加列或者从表中删除列。 一、表的删除(DROP TABLE 语句) 此前介绍的都是关于 Product

    2023-04-26
    156
  • 以fillchar为中心写一个标题

    以fillchar为中心写一个标题随着数字化时代的到来,文本处理成为了人们生活中不可或缺的一部分。填充字符串是文本处理中常用的功能,用于在文本中添加一些特定字符(通常是空格)以对齐文本结构。fillchar作为填充字符串的一种常用方式,其使用广泛,使用fillchar在文本中添加一些特定字符(通常是空格),以对齐文本结构,提高文本的可读性和美观程度。本篇文章将从使用fillchar的基本方法、fillchar与字符串对齐、填充长整型、取反填充字符串四个方面进行详细的阐述。希望通过本文的讲解,能够帮助读者更灵活地使用fillchar,提高文本处理能力。

    2024-05-04
    58
  • [IM002]Navicat ODBC驱动器管理器 未发现数据源名称并且未指定默认驱动程序

    [IM002]Navicat ODBC驱动器管理器 未发现数据源名称并且未指定默认驱动程序数据库 SQL SERVER 2008,连接时报:[IM002]Navicat ODBC驱动器管理器 未发现数据源名称并且未指定默认驱动程序 到安装目录下找到 sqlncli_x64.mis&#160

    2023-06-04
    150
  • oracle 删除表空间与用户[亲测有效]

    oracle 删除表空间与用户[亲测有效]以system用户登录,查找需要删除的用户: –查找用户 select * from dba_users; –查找工作空间的路径select * from dba_data_files; –删除

    2023-03-03
    153

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注