一个新上线数据库的调优记录

简介: 背景说明:一个供应链协同系统上线后的几天后,陆陆续续有用户反馈系统有些慢,这个时候项目的老大第一反映就是让DBA看下系统的瓶颈。一般情况系统上线前期都会有压力测试,但是压力测试并不能模拟出复杂的业务场景,经过了压力测试也并不代表在实际的运行中不会出现问题。

背景说明:一个供应链协同系统上线后的几天后,陆陆续续有用户反馈系统有些慢,这个时候项目的老大第一反映就是让DBA看下系统的瓶颈。一般情况系统上线前期都会有压力测试,但是压力测试并不能模拟出复杂的业务场景,经过了压力测试也并不代表在实际的运行中不会出现问题。

顺便跑题一下:系统上线前期如果系统有问题,那么正是DBA大展身手的机会,因为只有DBA才知道系统"为什么慢、慢在哪里、怎么调",这个时候你的价值就体现出来了,如果碰到一个不厚道的领导,还可以忽悠他一下,因为我遇到的领导很不错,所以我也是兢兢业业的。

 

以下是整个问题的解决过程:

1、当用户反馈很卡的时候,进入检查三部曲:cpu、内存、归档空间、锁等待信息,经过一番检查发现数据库的整体压力并不高,也没有发现锁等待信息;

2、查看数据库的awr报告,自从稍微看懂了awr报告后,为整个数据库的管理增加了不少便利。

 

2.1 以下是问题时间段的awr报告截图:

在top5的等待事件中发现了cursor:pin S wait on X的等待事件,这个等待事件跟数据库Library有关系,根据经验这个等待事件一般跟以下几个有关系:

  • sga自动管理,sga的频繁扩展和收缩;
  • 过渡硬解析,造成library cache中的cursor object被频繁的reload;
  • bug;

2.2 针对这个内存的问题,检查awr报告的内存大小,buffer cache和shared pool并未发生变化,所以可以排除sga的扩展和收缩导致的问题;

 

2.3 检查数据库的硬解析情况  

Time Model Statistics DB/Inst: SCMPRD/scmprd Snaps: 2045-2046

-> Total time in database user-calls (DB Time): 1576.1s

-> Statistics including the word "background" measure background process

time, and so do not contribute to the DB time statistic

-> Ordered by % or DB time desc, Statistic name

   

Statistic Name Time (s) % of DB Time

------------------------------------------ ------------------ ------------

DB CPU 1,426.7 90.5

sql execute elapsed time 1,404.8 89.1

parse time elapsed 717.7 45.5

hard parse elapsed time 645.2 40.9

hard parse (sharing criteria) elapsed time 480.5 30.5

PL/SQL execution elapsed time 52.8 3.3

sequence load elapsed time 2.3 .1

hard parse (bind mismatch) elapsed time 1.3 .1

connection management call elapsed time 0.8 .0

PL/SQL compilation elapsed time 0.1 .0

repeated bind elapsed time 0.1 .0

failed parse elapsed time 0.0 .0

DB time 1,576.1

background elapsed time 106.2

background cpu time 86.9

从上面的时间统计看出,数据库的硬解析占用了很大的一个占比,一般来说数据库硬解析产生的原因是由于未使用绑定变量导致的。(http://blog.itpub.net/12679300/viewspace-1217976/)

 

2.4 为了保险起见继续看AWR报告的其他部分

既然硬解析是由于SQL语句引起的,所以就很有必要看下这段时间里运行次数最多的语句,并针对这些语句和业务人员沟通;

 

2.5 解决方法,经过以上的分析,以短时间内保障系统的性能为目的,做了以下调整;

  • 查找数据库top5的未使用绑定变量的语句,进行调优;
  • 修改数据库的参数CURSOR_SHARING设置为SIMILAR
  • 一些后台会产生大量并发SQL语句的JOB转移到系统空闲期运行;

新系统上线前期一般会有一些的性能上的问题,但是这些问题往往并不是DBA调整几个参数就能解决的,见过好几个自开发的系统,应用层面都没有使用绑定变量的习惯,虽然可以通过CURSOR_SHARING参数暂时解决问题;便捷和稳定总是冲突的,虽然这样可以暂时的解决问题,但是从长期系统的稳定性来说还是有一定的风险的。

*********************************************************************************************************************

本文作者:JOHN QQ:1916066696 (请备注数据库)

ORACLE技术博客:ORACLE 猎人笔记 http://blog.itpub.net/12679300/

******************************************************************************************************

相关文章
|
3月前
|
SQL 关系型数据库 MySQL
Mysql高可用,索引,事务与调优:提高数据库性能的关键技术
在当今互联网时代,高可用性、稳定性和性能是数据库的三大关键要素。本文将深入探讨Mysql高可用、索引、事务和调优等方面的技术,为读者提供实用的解决方案和经验。
24 0
|
8月前
|
SQL 关系型数据库 MySQL
第11章 数据库的设计规范【2.索引及调优篇】【MySQL高级】4
第11章 数据库的设计规范【2.索引及调优篇】【MySQL高级】4
53 0
|
8月前
|
SQL 关系型数据库 MySQL
第11章 数据库的设计规范【2.索引及调优篇】【MySQL高级】3
第11章 数据库的设计规范【2.索引及调优篇】【MySQL高级】3
117 0
|
5月前
|
中间件 Java 应用服务中间件
重磅!基础+Spring+并发+调优+微服务+数据库+中间件已肝完
在金三银四时也参与过不少面试,2021都说工作不好找,也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题),同时也整理一些图文解析及笔记,今天在这免费分享给大家,希望大家在即将的十月面试做好复习,长期的积累和短期的突击让自己能找到一个满意的工作!
|
5月前
|
canal 中间件 关系型数据库
微服务轮子项目(30) -数据库分库分表、部署上线方式(下)
微服务轮子项目(30) -数据库分库分表、部署上线方式(下)
37 0
|
5月前
|
SQL 缓存 数据库
微服务轮子项目(30) -数据库分库分表、部署上线方式(上)
微服务轮子项目(30) -数据库分库分表、部署上线方式
55 0
|
5月前
|
NoSQL 测试技术 API
Eolink Apikit 版本更新:「数据字典」功能上线、支持 MongoDB 数据库操作...
Eolink Apikit 版本更新: 1. 搭建自定义接口协议架构,支持快速适配金融行业各类型私有协议的导入、编辑和展示。 2. 数据字典功能上线,支持以数据字典的形式管理参数枚举值。 3. 数据库连接支持 MongoDB 数据库操作。 4. 基于 Apikit 类型导入 API 数据支持增量更新。
33 0
|
8月前
|
SQL 关系型数据库 MySQL
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】4
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】4
54 0
|
8月前
|
存储 关系型数据库 MySQL
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】3
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】3
43 0
|
8月前
|
缓存 关系型数据库 MySQL
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】2
第12章 数据库其它调优策略【2.索引及调优篇】【MySQL高级】2
53 0

热门文章

最新文章