Oracle 数据库日常巡检(3)

SELECT P.PID PID,
      S.SID SID,
      P.SPID SPID,
      S.USERNAME USERNAME,
      S.OSUSER OSNAME,
      P.SERIAL# S_#,
      P.TERMINAL,
      P.PROGRAM PROGRAM,
      P.BACKGROUND,
      S.STATUS,
      RTRIM(SUBSTR(A.SQL_TEXT, 1, 80)) SQLFROM V$PROCESS P,
      V$SESSION S,
      V$SQLAREA A WHERE P.ADDR = S.PADDR AND S.SQL_ADDRESS = A.ADDRESS(+) AND P.SPID LIKE '%&1%';

4.7. 检查碎片程度高的表

SELECT segment_name table_name, COUNT(*) extents
  FROM dba_segments
 WHERE owner NOT IN ('SYS', 'SYSTEM')
 GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
                    FROM dba_segments
                    GROUP BY segment_name);

4.8. 检查表空间的I/O比例

SELECT DF.TABLESPACE_NAME NAME,
      DF.FILE_NAME      "FILE",
      F.PHYRDS          PYR,
      F.PHYBLKRD        PBR,
      F.PHYWRTS          PYW,
      F.PHYBLKWRT        PBW
  FROM V$FILESTAT F, DBA_DATA_FILES DF
 WHERE F.FILE# = DF.FILE_ID
 ORDER BY DF.TABLESPACE_NAME;

4.9. 检查文件系统的I/O比例

SELECT SUBSTR(A.FILE#, 1, 2) "#",
      SUBSTR(A.NAME, 1, 30) "NAME",
      A.STATUS,
      A.BYTES,
      B.PHYRDS,
      B.PHYWRTS
  FROM V$DATAFILE A, V$FILESTAT B
 WHERE A.FILE# = B.FILE#;

4.10.检查死锁及处理

查询目前锁对象信息:

select sid,
      serial#,
      username,
      SCHEMANAME,
      osuser,
      MACHINE,   
      terminal,
      PROGRAM,
      owner,
      object_name,
      object_type,
      o.object_id
  from dba_objects o, v$locked_object l, v$session s
 where o.object_id = l.object_id
  and s.sid = l.session_id;

oracle级kill掉该session:

alter system kill session '&sid,&serial#';

操作系统级kill掉session:

#>kill -9 pid

5. 检查数据库cpu、I/O、内存性能

记录数据库的cpu使用、IO、内存等使用情况,使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。

5.1 CPU使用情况:

[root@sale8 ~]# top

top - 10:29:35 up 73 days, 19:54, 1 user, load average: 0.37, 0.38, 0.29

Tasks: 353 total, 2 running, 351 sleeping, 0 stopped, 0 zombie

Cpu(s): 1.2% us, 0.1% sy, 0.0% ni,98.8% id, 0.0% wa, 0.0% hi, 0.0% si

Mem: 16404472k total, 12887428k used, 3517044k free, 60796k buffers

Swap: 8385920k total, 665576k used, 7720344k free, 10358384k cached


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

30495 oracle 15 0 8329m 866m 861m R 10 5.4 7:53.90 oracle

32501 oracle 15 0 8328m 1.7g 1.7g S 2 10.6 1:58.38 oracle

32503 oracle 15 0 8329m 1.6g 1.6g S 2 10.2 2:06.62 oracle

注意上面的蓝色字体部分,此部分内容表示系统剩余的cpu,当其平均值下降至10%以下的时视为CPU使用率异常,需记录下该数值,并将状态记为异常。

5.2 内存使用情况:

# free -m

total used free shared buffers cached

Mem: 2026 1958 67 0 76 1556

-/+ buffers/cache: 326 1700

Swap: 5992 92 5900

如上所示,蓝色部分表示系统总内存,红色部分表示系统使用的内存,黄色部分表示系统剩余内存,当剩余内存低于总内存的10%时视为异常。

5.3 系统I/O情况:

# iostat -k 1 3

Linux 2.6.9-22.ELsmp (AS14) 07/29/2009


avg-cpu: %user %nice %sys%iowait %idle

0.16 0.00 0.05 0.36 99.43


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 3.33 13.16 50.25 94483478 360665804


avg-cpu: %user %nice %sys%iowait %idle

0.00 0.00 0.00 0.00 100.00


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 0.00 0.00 0.00 0 0

如上所示,蓝色字体部分表示磁盘读写情况,红色字体部分为cpu IO等待情况。

5.4 系统负载情况:

#uptime

12:08:37 up 162 days, 23:33, 15 users, load average: 0.01, 0.15, 0.10

如上所示,蓝体字部分表示系统负载,后面的3个数值如果有高于2.5的时候就表明系统在超负荷运转了,并将此值记录到巡检表,视为异常。

5.5.查看是否有僵死进程

select spid from v$process where addr not in (select paddr from v$session);

有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程。

5.6.检查行链接/迁移

select table_name, num_rows, chain_cnt
  From dba_tables
 Where owner = 'CTAIS2'
  And chain_cnt <> 0;

注:含有long raw列的表有行链接是正常的,找到迁移行保存到chained_rows表中,如没有该表执行../rdbms/admin/utlchain.sql

analyze table tablename list chained rows;

可通过表chained_rows中table_name,head_rowid看出哪些行是迁移行

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5fc5caf4df1dea8054a2d4d9d75145d4.html