目录

Oracle数据库运行越来越慢,应该怎么优化

Oracle数据库运行越来越慢的优化方法:1、应用层优化;2、数据库层优化;3、内存层优化;4、存储层优化。应用层优化是指减少应用请求,数据库层优化是指降低数据库内部资源争用,内存层优化是指降低IO数量和规模。

一、Oracle数据库运行越来越慢的优化方法

1、应用层优化

应用程序的设计和开发中,可以采用合理的数据查询语句来减少数据库的 I/O 操作次数,例如通过合并多个 SQL 语句或使用批量操作等方式来优化查询效率。同时,在应用程序中适当使用缓存技术,减轻数据库负载。

2、数据库层优化

Oracle 数据库在运维过程中可以通过优化数据表结构、调整索引、升级数据库版本、重新启动数据库实例等方式来提高性能。具体而言,例如在设计表结构时尽量避免多表关联查询,优化查询语句,减少锁定等待时间。

3、内存层优化

调整数据库的缓存和内存设置是提高 Oracle 数据库性能的关键,例如增加共享池和高速缓存的大小,以及启用自动 PGA(程序全局区)管理功能等。优化这些参数,可以减少数据库的磁盘 I/O 操作,提高访问速度。

4、存储层优化

除了进行数据库、应用和内存层面的优化外,还可以通过在存储设备上进行调整,在存储层面上提高 Oracle 数据库的性能。例如使用 RAID 磁盘阵列来提高磁盘 I/O 效率,使用快速的存储介质如 SSD 来强化存储性能等。

二、Oracle数据库性能检查方法

1、检查数据库的等待事件

select sid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAIT from v$session_wait where event not like 'SQL%' and event not like 'rdbms%';

如果数据库长时间持续出现大量像 latch free,enqueue,buffer busy waits, db file sequential read,db file scattered read 等等待事件时,需要对其进行分析,可能存在问题的语句。

2、Disk Read较高的SQL语句的获取

SELECT SQL_TEXT FROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS) WHERE ROWNUM<=5 desc;

3、查找前十条性能差的sql

SELECT * FROM (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS, SQL_TEXT FROM V$SQLAREA ORDER BY DISK_READS DESC) WHERE ROWNUM<10 ;

4、等待时间非常多的 5 个系统等待事件的获取

SELECT * FROM (SELECT * FROM V$SYSTEM_EVENT WHERE EVENT NOT LIKE 'SQL%' ORDER BY TOTAL_WAITS DESC) WHERE ROWNUM<=5;

5、检查运行很久的SQL

COLUMN USERNAME FORMAT A12 COLUMN OPNAME FORMAT A16 COLUMN PROGRESS FORMAT A8
SELECT USERNAME,SID,OPNAME,ROUND(SOFAR*100 / TOTALWORK,0) || '%' AS PROGRESS,TIME_REMAINING,SQL_TEXT FROM V$SESSION_LONGOPS , V$SQL WHERE
TIME_REMAINING <> 0 AND SQL_ADDRESS=ADDRESS AND SQL_HASH_VALUE = HASH_VALUE;

6、检查消耗CPU较高的进程

SET LINE 240 SET VERIFY OFF
COLUMN SID FORMAT 999 COLUMN PID FORMAT 999 COLUMN S_# FORMAT 999
COLUMN USERNAME FORMAT A9 HEADING "ORA USER"
COLUMN PROGRAM FORMAT A29 COLUMN SQL FORMAT A60
COLUMN OSNAME FORMAT A9 HEADING "OS USER"
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%';

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);

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;

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#;

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;

延伸阅读1:数据库系统的数据模型

  • 层次模型:是数据库系统中较早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。它采用树形结构来表示各类实体以及实体间的联系。
  • 网状数据模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
  • 关系型数据模型:关系型数据模型对应的数据库自然就是关系型数据库了,这是目前应用非常多的数据库,使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。