千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Oracle数据库运行越来越慢,应该怎么优化?

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

来源:千锋教育
发布人:xqq
时间: 2023-10-13 13:27:44 1697174864

一、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:数据库系统的数据模型

层次模型:是数据库系统中较早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。它采用树形结构来表示各类实体以及实体间的联系。网状数据模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。关系型数据模型:关系型数据模型对应的数据库自然就是关系型数据库了,这是目前应用非常多的数据库,使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT