某年某月某日的一个下午,接收到监控服务器的一条告警短信:

尊敬的运维工程师 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_SESSIONS1000

重启数据库服务

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获取达梦数据库_记一次对达梦数据库的优化过程相关推荐

  1. java获取数组穷举_被BAT疯抢的Java工程师,都是怎么拿到年薪50W的offer

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...

  2. java 获取所有及假日_电子商务网站所有者假日销售指南

    java 获取所有及假日 If this is the first time you've thought seriously about holiday sales, you're already ...

  3. java获取vm运行参数_如何获取在Java中运行Java VM的版本?

    java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...

  4. java 获取文件扩展名_如何在Java中获取文件扩展名

    java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...

  5. java获取时间的网站_如何获取网站服务器的时间

    原理是提取网站http应答报文中的时间信息. (但是请不要用此方法来获取www.bjtime.cn的时间,原因见后) 1. 以下是javascript获取服务器时间的测试代码: var xhr = n ...

  6. java 获取时区的时间_如何使用Java获取时区的当前日期和时间?

    如何使用Java获取时区的当前日期和时间? 我的应用托管在伦敦服务器中. 我在西班牙马德里. 因此,时区为-2小时. 如何获取带有时区的当前日期/时间. Date curr_date = new Da ...

  7. java获取vm运行参数_如何获取在Java中运行Java VM的名称?

    java获取vm运行参数 To get the name of running VM (Virtual Machine) in Java, we use the getProperties() met ...

  8. java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划

    好程序员 Java 学习路线之 MySQL 的执行计划.什么是执行计划? 执行计划通常是开发者优化 SQL 语句的第一步. MySQL 在解析 SQL 语句时,会生成多套执行方案,然后内部会进行一个成 ...

  9. 2压缩备份数据库_为什么您的企业需要备份数据库

    数据是开展业务的重要组成部分.如果任何企业意外丢失数据,则可能导致巨大的损失.因此,为了保护有价值的信息,企业需要备份其数据库. 本文提供了有关数据库备份的重要性以及如何进行备份的所有信息. 什么是数 ...

最新文章

  1. 华为服务器修改SN,服务器渠道货SN配置
  2. 业界丨一文看懂AI人才百万美元年薪因何而来?
  3. hdu 2069 Coin Change(改)-dp
  4. CVS的使用教程(转)
  5. json解析对应的value为null_徒手撸一个JSON解析器
  6. linux python安装教程_Linux系统如何安装Python?新手教程
  7. 怎么读取matlab程序包,Nifti程序包,用于写入,读取和处理医学影像,适用于MATLAB
  8. c mysql使用场景_Mysql 场景
  9. Python 判断字符串是否为IP(字符串中是否包含IP)
  10. 艾宾浩斯记忆表格excel_考研干货 | 如何使用艾宾浩斯曲线帮助记忆知识
  11. 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
  12. HTML5中Head内标签详解(一):meta标签
  13. jvm学习--类加载器
  14. 五月花计算机cD专业,成都五月花计算机专业学校的学费是多少?
  15. WEB打印插件Lodop
  16. 一次PHP网站木马查杀记录
  17. 微商公社新兵连第四天
  18. centos下配置修改hosts文件以及生效命令详解
  19. pdf和图像文字识别提取工具
  20. RTL8762 开发板试用

热门文章

  1. python3 zip函数
  2. [bug解决] Ubantu打不开Typora:typora error while loading shared libraries libXss.so.1
  3. tf.get_variable与tf.variable_scope
  4. linux python mysqldb安装包,linux环境下python中MySQLdb模块的安装方法
  5. 洛谷P1134阶乘问题(数论,末尾0的个数变形,思维转换)
  6. 使用 grep 查找所有包含指定文本的文件
  7. c#动态编译并动态生成dll
  8. KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
  9. Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置
  10. [转载] python classmethod存在的意义_@classmethod和@staticmethod对初学者的意义?