数据库管理员岗位职责 目标、目的 职责分类(一) 职责分类(二) 确保数据库安全、稳定运行 1.数据库日常运行 维护和管理 1.1每日数据库健康巡检。 1.2数据库性能趋势分析,重点性能指标统计。 1.3数据库重要SQL变化情况跟踪,及趋势分析。 1.4定期(按周、
数据库管理员岗位职责
目标、目的 |
职责分类(一) |
职责分类(二) |
确保数据库安全、稳定运行 |
1.数据库日常运行 维护和管理 |
1.1每日数据库健康巡检。 1.2数据库性能趋势分析,重点性能指标统计。 1.3数据库重要SQL变化情况跟踪,及趋势分析。 1.4定期(按周、按月)分析数据库总体运行情况,编制运行周报、月报。 1.5分析数据增长情况,对存储使用情况进行审计。 1.6数据库故障处理。 1.7处理审计卸数等数据提取需求(每月、每季度、年结)、数据查询等需求。 |
为提高数据库性能而进行的调整或变更 |
2.数据库性能优化 |
2.1 针对OS资源消耗提出优化策略 2.2 根据日常采集的性能数据,结合厂商建议,对数据库参数提交优化方案 2.3 通过监控数据量变化趋势,跟踪重点SQL执行情况,对相关表、索引的重组、重建提出建议 2.4 根据日常趋势分析,就热点SQL的调整向开发方面提供建议 2.5 针对发现的异常等待进行专题分析,并提交优化方案 2.6 针对数据库各类负载的变化情况,提交性能改进建议 2.7 通过分析UNDO表空间、TEMP表空间的使用趋势,提出调整建议 2.8 针对监控的各类告警进行分析,并提出调优建议 |
不以数据库性能提高为目标的其他调整 |
3.数据库调整和变更 |
3.1 分析变更需求,沟通开发方面或相关工程师(主机、应用)进行确认 3.2 整理变更操作步骤,实施变更 3.3 对于变更中出现的错误、异常进行应急处理 3.5 就变更回退方案、应急策略进行确认,沟通厂商和行内专家予以审核 3.6 系统稳定运行后,对变更前后数据库运行情况进行对比分析,并补充完善变更方案 3.7 根据变更后系统变化情况,相应调整日常检查、性能数据收集、应急库同步和系统备份等策略,必要时另提变更进行处理 |
新增系统数据库安装 |
4.新系统数据库的 安装调试 |
4.1数据库规划 4.2数据库安装调试 4.3新增系统后需要纳入日常监控范围 |
数据库管理员岗位职责详细说明
一、数据库健康状态查询
检查项01:操作系统资源状况(cpu、内存、IO、网络、文件系统)
作用及意义:数据库运行过程中,操作系统的资源使用情况直接影响到数据库运行的稳定性及数据库的性能。通过对操作系统的资源使用情况进行监控,可以及时了解数据库服务器的压力状况,以便于进一步分析数据库运行过程中遇到的问题。
OS健康检测
将CPU、内存、磁盘I/O状况、网络状况等填到上午高峰期检查情况和下午高峰期检查情况栏里。对于CPU和内存、磁盘IO记录数值,对于网络状况,记录正常或不正常。
检测CPU情况
可以看到,1分钟,5分钟,15分钟的负载都为0,系统很健康的说
相应的指标: cpu、内存、磁盘io状况、网络状况
cpu使用率低于50%
内存使用率低于90%,如果高于90%,可以查看虚拟内存使用情况,如
果没有明显的内存换页情况出现,也视为正常。
磁盘IO状况,
网络状况:网络流量较为稳定。
文件系统使用:低于80%
检测内存状况
可以看到,内存虽然占用了90%以上,但是SWAP交换分区并没有被占用,所以属于业务正常情况
通过vmstat命令检测系统
Linux 内存监控vmstat命令输出分成六个部分:(参考资料:http://blog.csdn.net/lengyuhong/article/details/5855056)
1、进程procs:
r:在运行队列中等待的进程数 。
b:在等待io的进程数 。
2、Linux 内存监控内存memoy:
swpd:现时可用的交换内存(单位KB)。
free:空闲的内存(单位KB)。
buff: 缓冲去中的内存数(单位:KB)。
cache:被用来做为高速缓存的内存数(单位:KB)。
3、Linux 内存监控swap交换页面
si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
4、Linux 内存监控 io块设备:
bi: 发送到块设备的块数,单位:块/秒。
bo: 从块设备接收到的块数,单位:块/秒。
5、Linux 内存监控system系统:
in: 每秒的中断数,包括时钟中断。
cs: 每秒的环境(上下文)转换次数。
6、Linux 内存监控cpu中央处理器:
cs:用户进程使用的时间。以百分比表示。
sy:系统进程使用的时间。以百分比表示。
id:中央处理器的空闲时间。以百分比表示。
假如r经常大于4,且id经常小于40,表示中央处理器的负荷很重。假如bi,bo 长期不等于0,表示物理内存容量太小。
通过iostat命令检测系统
比较重要的参数(参考资料:http://blog.csdn.net/wyzxg/article/details/3985221 )
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的
svctm: 平均每次设备I/O操作的服务时间
await: 平均每次设备I/O操作的等待时间
avgqu-sz: 平均I/O队列长度
如果%util接近100%,表明i/o请求太多,i/o系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,i/o压力就比较大,读取速度有较多的wait.同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。
await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。
检查项02 :检查数据库后台进程(以oracle为例)
作用及意义:Oracle后台进程是oracle实例的重要组成部分,后台进程是否正常工作直
接决定了oracle运行的正常与否。如果oracle后台进程停止,将导致oracle实例的崩溃。
操作方法在操作系统下执行命令:
$ ps ‐ef|grep ora_
输出成果执行结果分析:
返回结果中至少应包括以下进程:
Oracle写数据文件的进程,输出显示为:“ora_dbw0_SID”
Oracle写日志文件的进程,输出显示为:“ora_lgwr_SID”
Oracle监听实例状态的进程,输出显示为:“ora_smon_SID”
Oracle监听客户端连接进程状态的进程,输出显示为:“ora_pmon_SID”
Oracle进行归档的进程,输出显示为:“ora_arc0_SID”
Oracle进行检查点的进程,输出显示为:“ora_ckpt_SID”
Oracle进行恢复的进程,输出显示为:“ora_reco_SID”
命令的输出中如果包含了上述的后台进程,则在日检查情况栏目中记录为进程正常,在检查结果中记录为正常。反之,如果缺少了某个进程,则记录为异常。
检查项03:检查数据库监听进程(以oracle为例)
作用及意义:Oracle监听进程侦听从客户端(如应用服务器)发来的对数据库的连接请求,然后为该请求建立一个连接。如果监听进程关闭,则无法建立起应用服务器与数据库服务器之间的连接。
操作方法执行命令:
$ lsnrctl status
输出成果执行结果分析:
返回结果中“Services Summary...”项表示Oracle监听进程正在监听哪些数据库实例,输出显示中至少应该有当前业务系统运行必需的实例(SID)项,如ebank、b2b、md等。在日检查情况中填写正在监听的数据库实例个数。
检查项04:检查oracle实例状态
作用及意义:正常情况下,oracle实例状态处于open状态,通过检查此项,可以确定oracle实例是否正常。
操作方法以sysdaba身份登录数据库,执行命令:
SQL> select instance_name,version,status,database_status from v$instance;
输出成果返回结果:
“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;
“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
检查项05: 检查oracle数据库状态
作用及意义:通过查看oracle数据库状态,可以检查数据库名称、数据库归档模式、数据库打开模式,从而确定数据库是否处于正常的状态。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select name,log_mode,open_mode from v$database;
输出成果执行结果分析:
返回结果中“NAME”表示数据库的名称;“LOG_MODE”表示Oracle当前归档方式,“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下;“OPEN_MODE”表示Oracle的打开模式,“READ WRITE”表示可读写,“READ ONLY”表示只读。在正常情况下,打开模式应为“READ WRITE”。
检查项06: 数据库会话状态
作用及意义:当前会话数是当前从应用服务器到数据库服务器之间建立的连接数量,这个数量与数据库的负载之间有密切的联系,一个稳定运行的数据库里,会话数量应保持平稳,如果出现会话数量大幅增加或大幅减少,就意味着可能出现了问题,需要进一步查找原因。
操作方法在sqlplus里执行如下命令:
SQL> select count(*) from v$session;
输出成果输出结果分析:
返回结果即当前数据库里会话数量。根据检查结果,与正常值进行比较。
检查项07: 当前处于锁等待会话的数量
作用及意义:通过查看会话的锁等待状况,可以了解数据库中是否有锁资源争用现
象,如果出现了时间较长的锁等待现象,可能会严重影响业务的正常运行。因此,如果在检查中发现数据库锁等待问题,需要进一步检查问题发生的原因。
操作方法在sqlplus下执行命令:
SQL> select count(*) from v$session where lockwait is not null;
输出成果执行结果分析:
返回结果中如果有记录返回,则说明当前会话中存在锁等待现象,数量值即返回结果。如果存在锁等待现象,说明有问题存在,然后进一步查找具体锁等待原因。
检查项08: 检查数据库基本状况--检查oracle预警文件
作用及意义:Oracle预警文件是由消息和一系列的错误信息组成,当数据库运行过程中发生问题时,将会在预警文件中记录相应的错误信息,通过检查预警文件,可以及时发现数据库运行中出现的问题。
输出成果执行结果分析:
用vi打开预警文件,从文件结尾处查找最近一次的错误信息查看的内容为是否有“ORA‐”,“Error”,“Failed”等出错信息出现记录.
检查项09: 检查数据库基本状况--检查oracle内核转储目录
作用及意义:核心转储(Core Dump)是UNIX操作系统的一个概念。当进程由于非法
的、不能修正的错误(如浮点溢出、内存段错误等)而导致进程异常终止后会形成一个日志文件,该文件包含了进程终止时所有的内存信息、堆栈信息、CPU寄存器信息等内容。如果该目录中的文件在短时间内增长很快,则说明Oracle进程在此期间经常发生核心转储,频繁的核心转储特别是数据库后台进程的核心转储
会导致数据库异常终止。
查看core_dump_dest
查看该目录下是否有新的文件产生。
输出成果:看是否有新的内核转储文件产生,如果有记录异常。
检查项10: 检查数据库基本状况--检查数据库对象状态
作用及意义:控制文件是数据库的重要组成部分,如果所有的控制文件发生损坏将导致数据库无法打开,通过检查控制文件状态,可以及时发现损坏的控制文件,及时采取补救措施。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select * from v$controlfile;
输出成果返回结果中:
“STATUS” 应该为空,状态为空表示控制文件状态正常。在日检查情况栏里填写正常。
检查项11: 检查数据库基本状况--检查oracle重做日志文件状态
作用及意义:重做日志文件是oracle数据库的重要组成部分,通过检查重做日志件可以及时发现重做日志文件出现的损坏等问题。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select * from v$logfile;
输出成果返回结果中:
在日常检查表的日检查情况中记录status的值,如果非“INVALID”、“DELETED”则正常,否则异常。
检查项12: 检查数据库基本状况--检查oracle表空间状态
作用及意义:正常情况下,表空间应处于online状态,如果表空间处于offline状态则用户将无法访问表空间,通过检查表空间状态,可以及时发现那些表空间处于非正常状态。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select tablespace_name,status from dba_tablespaces;
输出成果返回结果中:“STATUS” 应该为“ONLINE”,否则异常。
检查项13: 检查数据库基本状况--检查oracle回滚段状态
作用及意义:通过检查回滚段状态,可以了解回滚段被使用的情况
操作方法以sysdba身份登录数据库,执行命令:
SQL> select segment_name,status from dba_rollback_segs;
输出成果:
在回滚段处于自动管理的模式下,回滚段的状态是自动转换的,由oracle控制。因此,输出结果中有部分online和部分offline是正常的,其他状态则不正常。
检查项14: 检查数据库基本状况--检查oracle数据文件状态
作用及意义:通过检查oracle数据文件状态,可以及时发现发生数据损坏的数据文件。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select name,status from v$datafile;
输出成果返回结果中:
“STATUS”除系统表空间外均应为“ONLINE”(系统表空间为“SYSTEM”),其他状态为异常。
检查项15: 检查数据库基本状况--检查oracle所有对象状态
作用及意义:在正常情况下,数据库中所有对象状态都应该是VALID,如果出现了处
于INVALID状态的对象,则需要进一步检查,确定是否需要重新编译。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select owner,object_name,object_type from dba_objects where
status!='VALID' and owner!='SYS' and owner!='SYSTEM';
输出成果:
如果有状态为invalid的对象,要进行做进一步分析处理。
检查项16: 检查数据库基本状况--检查oracle相关资源使用情况
作用及意义:通过查看v$resource_limit视图,可以查看数据库初始化参数设置是否合理,如果有不合理或者超过参数设置范围的情况,就需要考虑进行适当的调整。
操作方法以sysdba身份登录数据库,执行命令:
SQL> select resource_name,max_utilization,initial_allocation,limit_value from v$resource_limit;
输出成果如果返回结果中:
“LIMIT_VALU”‐“MAX_UTILIZATION”>5正常,如果返回结果中
“LIMIT_VALU”‐“MAX_UTILIZATION””相关的Oracle初始化参数可能需要调整。
检查项17: 检查oracle表空间增长情况
作用及意义:Oracle数据库的数据是存放在表空间里,如果表空间剩余空间不足数据库无法继续写入数据,数据库将报错。因此,及时检查表空间使用情况,确保表空间剩余空间维持在20%以上,对数据库的正常稳定运行来说具有重要意义。
操作方法以sysdba身份登录数据库,执行如下脚本:
select a.tablespace_name,sum(a.tots) Tot_Size,
sum(a.sumb) Tot_Free,
sum(a.sumb)*100/sum(a.tots) Pct_Free,
sum(a.largest) Max_Free,sum(a.chunks) Chunks_Free
from
(
select tablespace_name,0 tots,sum(bytes) sumb,
max(bytes) largest,count(*) chunks
from dba_free_space a
group by tablespace_name
union
select tablespace_name,sum(bytes) tots,0,0,0 from
dba_data_files
group by tablespace_name) a
group by a.tablespace_name;
输出成果查看输出结果:
PCT_FREE一列,一般情况下,需要保持每个表空间的PCT_FREE>20%,
如果有表空间PCT_FREE则需要立即处理。
检查项18: 检查ORACLE扩展异常对象
作用及意义:数据库中每个segment是由extent组成,而每个segment所能容纳的extent数量是有限制的,dba_segments中的max_extents列就是每个segment所
能容纳的最大extent数量。如果segment中的extent数达到了这个数量的限制,则segment将无法继续扩展,数据库将报错。因此,通过检查每个segment中的extent数量,可以及时发现数据库中扩展异常的对象,以便于采取进一步参数,避免出现segment无法扩展的问题出现。
操作方法以sysdba身份登录数据库,执行如下命令:
SQL>select segment_name, segment_type, tablespace_name,
(extents/max_extents)*100 percent
from dba_segments
where max_extents != 0 and (extents/max_extents)*100>=95
order by percent;
输出成果返回结果:
如果有记录返回,则说明这些对象的扩展已经接近定义的最大扩展值,需要修改它的存储结构参数。
二、数据库性能分析部分
检查项19: 每日数据库性能分析(业务高峰期AWR报告分析)
作用及意义:AWR报告是oracle提供的一个重要的性能分析工具,通过查看业务高峰期的AWR报告,可以分析业务高峰期的数据库负载情况及数据库性能瓶颈等重要信息。从而及时发现并解决数据库运行过程中出现的性能问题
操作方法以SYS用户登录数据库,生成AWR报告
分析生成的AWR报告
查看数据库负载情况
查看数据库各性能指标命中率
查看数据库top5等待事件
如果AWR报告中top 5等待事件明显异常,如出现(latch free、enqueue、
buffer busy wait等)、缓冲区命中率明显下降、top sql中突然出现消耗大量逻辑读或物理读的sql等等等待事件,就需要记录,并做进一步分析。
对发现的性能问题进行测试、分析
例如:某一日发现statspack报告中top5等待事件,其中一个明显的等待事件是buffer busy waits,通过查询v$waitstat视图,可以看到这些等待大部分是对data block的等待。这意味着多个session尝试去从磁盘中读取同一个数据块到
缓冲区时,产生了竞争,其中的一个session执行读取的操作,另一个sessio就发生了buffer busy waits等待。这种等待事件通常是找到导致等待的sql,并尝试加以优化。
以sysdaba身份登录数据库,执行以下sql进行抓取:
select sql_text from v$sqlarea where hash_value in (select
sql_hash_value from v$session where sid in(select sid from
v$session_wait where event like '%buffer busy%'));
三、不定期操作--为表空间添加数据文件
1、表的重组
2、索引的重建
3、数据库打补丁
4、数据库升级
5、数据库变更前后性能的对比