java获取达梦数据库_记一次对达梦数据库的优化过程
某年某月某日的一个下午,接收到监控服务器的一条告警短信:
尊敬的运维工程师 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获取达梦数据库_记一次对达梦数据库的优化过程相关推荐
- java获取数组穷举_被BAT疯抢的Java工程师,都是怎么拿到年薪50W的offer
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...
- java 获取所有及假日_电子商务网站所有者假日销售指南
java 获取所有及假日 If this is the first time you've thought seriously about holiday sales, you're already ...
- java获取vm运行参数_如何获取在Java中运行Java VM的版本?
java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...
- java 获取文件扩展名_如何在Java中获取文件扩展名
java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...
- java获取时间的网站_如何获取网站服务器的时间
原理是提取网站http应答报文中的时间信息. (但是请不要用此方法来获取www.bjtime.cn的时间,原因见后) 1. 以下是javascript获取服务器时间的测试代码: var xhr = n ...
- java 获取时区的时间_如何使用Java获取时区的当前日期和时间?
如何使用Java获取时区的当前日期和时间? 我的应用托管在伦敦服务器中. 我在西班牙马德里. 因此,时区为-2小时. 如何获取带有时区的当前日期/时间. Date curr_date = new Da ...
- java获取vm运行参数_如何获取在Java中运行Java VM的名称?
java获取vm运行参数 To get the name of running VM (Virtual Machine) in Java, we use the getProperties() met ...
- java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
好程序员 Java 学习路线之 MySQL 的执行计划.什么是执行计划? 执行计划通常是开发者优化 SQL 语句的第一步. MySQL 在解析 SQL 语句时,会生成多套执行方案,然后内部会进行一个成 ...
- 2压缩备份数据库_为什么您的企业需要备份数据库
数据是开展业务的重要组成部分.如果任何企业意外丢失数据,则可能导致巨大的损失.因此,为了保护有价值的信息,企业需要备份其数据库. 本文提供了有关数据库备份的重要性以及如何进行备份的所有信息. 什么是数 ...
最新文章
- 华为服务器修改SN,服务器渠道货SN配置
- 业界丨一文看懂AI人才百万美元年薪因何而来?
- hdu 2069 Coin Change(改)-dp
- CVS的使用教程(转)
- json解析对应的value为null_徒手撸一个JSON解析器
- linux python安装教程_Linux系统如何安装Python?新手教程
- 怎么读取matlab程序包,Nifti程序包,用于写入,读取和处理医学影像,适用于MATLAB
- c mysql使用场景_Mysql 场景
- Python 判断字符串是否为IP(字符串中是否包含IP)
- 艾宾浩斯记忆表格excel_考研干货 | 如何使用艾宾浩斯曲线帮助记忆知识
- 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
- HTML5中Head内标签详解(一):meta标签
- jvm学习--类加载器
- 五月花计算机cD专业,成都五月花计算机专业学校的学费是多少?
- WEB打印插件Lodop
- 一次PHP网站木马查杀记录
- 微商公社新兵连第四天
- centos下配置修改hosts文件以及生效命令详解
- pdf和图像文字识别提取工具
- RTL8762 开发板试用
热门文章
- python3 zip函数
- [bug解决] Ubantu打不开Typora:typora error while loading shared libraries libXss.so.1
- tf.get_variable与tf.variable_scope
- linux python mysqldb安装包,linux环境下python中MySQLdb模块的安装方法
- 洛谷P1134阶乘问题(数论,末尾0的个数变形,思维转换)
- 使用 grep 查找所有包含指定文本的文件
- c#动态编译并动态生成dll
- KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
- Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置
- [转载] python classmethod存在的意义_@classmethod和@staticmethod对初学者的意义?