基于Linux平台Oracle 10g数据库性能调优
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Linux平台Oracle 10g数据库性能调优笔者单位对外业务网站为宣传、承揽主营业务的重要窗口。随着业务范围
的逐步扩大,网站数据库的数据量迅速增长。系统性能设计不足的问题逐步暴漏出来,如页面加载速度慢,执行数据库操作等待时间过长等。针对这一问题,笔者提出了对系统所采用的数据库的优化设计,最终实现了网页数据加载速度加快及数据库操作时间等待减少的调优目标。本文旨在结合此项实践分享基于Linux 操作系统平台的Oracle数据库服务器的调优实践,进而归纳几个调整和优化基于Linux操作系统平台的Oracle数据库服务器的方法。
标签:Linux Oracle 数据库性能调整优化
引言
笔者单位的对外业务网站为宣传、承揽主营业务的重要窗口。随着各项业务范围的逐步扩大,网站数据库的数据量迅速增长。系统性能设计不足的问题逐步暴露出来,出现了页面加载速度慢,执行数据库操作等待时间过长等问题。系统使用Oracle 10g数据库,笔者根据多年数据库管理和开发经验,以满足業务性能需求为出发点,对业务数据库进行了调整、优化。取得了预期的成效。
数据库性能优化技术主要包含以下几个方面[1]:查询优化;优化数据库内存配置;优化操作系统及网络配置。笔者将从各个不同角度考虑、分析数据库问题及解决之道。
本文将结合此项工作实践分享构建在Linux操作系统之上的Oracle 10g数据库的调优心得,总结调整、优化基于Linux操作系统平台的Oracle数据库服务器的几种方法。
一、Linux操作系统层面优化
1.Linux常用的调优工具
Linux系统性能监控命令可用于监控Oracle数据库性能,进而根据这些监控数据决定数据库的调优需求。这些命令可查看进程信息、服务器CPU使用信息以及操作系统内存交换情况。概述如下:
vmstat 查看Linux的进程、虚拟内存等情况。例如:vmstat 2 5可以查看系统每隔2秒钟共5次的系统负载采样情况;
iostat 显示磁盘活动。在平衡I/O负载时很有用;
free 查看内存及交换空间使用情况。如:free -m;
top 反映CPU运行情况。用来分析进程占用CPU情况;
2.CPU对于系统的影响
系统负荷高峰期CPU的使用率接近80%是比较好的情况。使用上述top命令查看CPU使用率,找到耗用服务器CPU比较多的会话。通过查看Oracle的V$SYSSTAT视图可以得到数据库CPU时间(CPU used by this session),操作系统的用户CPU时间(OS User level CPU time),以及Linux系统CPU时间(OS System call CPU time)。
通过如上视图发现耗用CPU较大的Oracle进程(包括占用CPU用户时间比例以及持续时长),这些进程很可能反映了数据库存在性能问题。通过这些进程的id反查到数据库中相应的服务器进程及会话。查看活动SQL情况,进而定位SQL问题(如:重解析、锁冲突等)或其他可能的问题(如:数据库内存不足、连续数据块读取等)。
同时还要考虑在多个系统共用一个实例的情况下不同应用交叉使用CPU带来的影响。本例业务网站曾遇到信息发布慢的问题,检查并且分析awr报告,发现数据库DB Time略高,且有明显row lock等待。
进而比对alert告警日志,发现警告日志里近期关于ORA-60错误,每个错误下面对应的trace文件。可以看到2个用户进程发生了死锁。在里面可以看到sql_id和sql脚本,发现3ptv952k9747,c5k5cpdnvjuy9这2条sql是数据库产生死锁的sql,对应的脚本可以通过下面的路径进去看见“当前的sql”,
ORA-00060:Deadlock detected. More info in file /oracle/diag/rdbms/zsdb/zsdb/trace/zsdb_ora_19387.trc.
Wed Jul 22 17:06:51 2015
通过查看trace文件,确定是上面2条sql脚本里包含如下两条类似的sql语句,且没有及时commit,造成死锁。通过ALTER SYSTEM KILL SESSION结束相应会话,在应用里添加commit语句解决。
UPDATE SP_EXTRACTION_RECORD
SET EXTRACTION_ID = :1,
EXTRACTION_APPLICATION_CODE = :2,
EXPERT_ID = :3,
EXTRACTION_COUNT = :4,
AFFIRM_FLAG = :5,
ABANDON_REASON = :6,
ABANDON_REASON_DETAIL = :7,
GROUP_NUMBER = :8,
CHOOSE_MODE = :9,
OCCUPATION_BEGIN_DATE = :10,
OCCUPATION_END_DATE = :11,
EXTRACTION_SPECIALITY_ID = :12,
BUSINESS_DOCUMENT_NO = :13,
ABANDON_TYPE = :14
WHERE ID = :15
3.对于基于虚拟化建立的数据库笔者也从事虚拟化方面的工作,鉴于虚拟机在硬件管理、资源调配、远程运维等方面相较传统物理机的巨大便利性,笔者尝试了将数据库服务器虚拟化的相关工作。为了弥补虚拟化磁盘I/O性能的下降,虚拟化数据库服务器应选择使用SAS盘组成的磁盘阵列。同时,通过一些措施尽量减少磁盘I/O,如:灵活增加虚拟服务器内存大小;给虚拟服务器分配更多的预留内存空间等。将数据库服务器虚拟化带来的另一大优势就是可用性的增加。传统的ORACLE数据库高可用通过物理服务器RAC集群来实现,以避免单节点硬件故障导致数据库不可用。在虚拟化集群中,借助虚拟软件的HA功能和虚机漂移技术,可实现对单节点数据库虚拟服务器的硬件保护,从而规避ORACLE RAC管理的复杂性及其他技术风险。笔者单位的一些业务系统数据库就从物理双节点RAC转变为了单节点虚拟服务器,业务性能未有明显影响,管理复杂性大幅度减少,数据库监控指标也大幅减少,提升了可运维程度及可控程度。
4.磁盘分区优化设计
4.1磁盘硬件考虑
随着Oracle数据库使用规模和数据量的不断增大,如何实时高效地处理存储实时数据,以及如何快速响应用户应用请求,对数据库系统的存储和设计提出了更高的要求[5]。