Oracle 9i 整体性能优化概述草稿之一:调整争用


2.1 优化维护 4
2.2 诊断LATCH竞争 4
2.2.1 概念 4
2.2.2 是否存在latch争用 5
2.2.3 检查Latch是否主要竞争 5
2.2.4 DBA关注的latch内容 5
2.3 诊断FREE LIST竞争 6
2.3.1 概念 6
2.3.2 是否存在free list争用 6
2.3.3 确定free list 争用的段 7
2.3.4 优化free list争用 7
2.4 诊断LOCK竞争 8
2.4.1 概念 8
2.4.2 可能引起lock contention的原因 8
2.4.3 锁解决办法 9
2.4.4 死锁 9


2 调整争用
争用:每当一个Oracle 进程试图访问一个Oracle结构,但由于该结构正由另一个进程结构使用而未能成功访问到它时,就发生对Oracle资源的争用。常见的有latch、 Free List 、lock争用。
主要维护的争用有:
 Latch(锁存器):可作为内存性能的指标,说明内存需要调整。
 Free List:会导致繁忙表上的DML操作性能很差。
 Lock:会遇到彻底的暂停,产生巨大的性能影响。

2.1优化维 护
维护时,主要通过检查,判断存在的latch和free list争用是否合理,不合理,则启动相应的优化工作。
而lock,在遇到问 题的时候,可作为维护参考,平时不进行太多的维护(或从应用上考虑优化)。(除了定期去$ORACLE_HOME/admin/$ORACLE_SID /udump查看死锁情况外)

2.2诊断latch竞争
2.2.1概念
Latch是简单的、低层次的序列化技术,用以保护 SGA中的共享数据结构,比如并发用户列表和buffer cache里的blocks信息。一个服务器进程或后台进程在开始操作或寻找一个共享数据结构之前必须获得对应的latch,在完成以后释放latch。 不必对latch本身进行优化,如果latch存在竞争,表明SGA的一部分正在经历不正常的资源使用。

1)Latch的作用:
A、 序列化访问:保护SGA中的共享数据结构;保护共享内存的分配。
B、序列化执行:避免同时执行某些关键代码;避免互相干扰。

2)Latch 请求的两种类型:
A、willing-to-wait:请求的进程经过短时间的等待后再次发出请求,直到获得latch
B、 immediate:如果没有获得latch,请求的进程不等待,而是继续处理其他指令。

2.2.2是否存在latch争用
select event,total_waits,time_waited
from v$system_event
where event = ‘latch free’;
如:
EVENT TOTAL_WAITS TIME_WAITED
---------- ----------- -----------
latch free 4320663 779167
自实例启动以来,发生过 4320663个latch争用,等候这些latch所 花费的时间为779167毫秒。

2.2.3 检查Latch是否主要竞争
检 查latch free是不是主要的wait event:
Select event,total_waits,time_waited from v$system_event order by time_waited desc;
2.2.4 DBA关注的latch内容
DBA 需要关注的latch有:
Select name,gets,misses,sleeps,wait_time,spin_gets,immediate_gets,immediate_misses from v$latch
where name like ‘%shared pool%’
or name like ‘%library cache’
or name like ‘%cache buffers lru chain%’
or name like ‘%cache buffers chains%’
or name like ‘%redo allocation%’
or name like ‘%redo copy%’;

与willing-to-wait请求有关的列:
Select name,gets,misses,sleeps,wait_time,spin_gets from v$latch;
与immediate请 求有关的列:
Select name,immediate_gets,immediate_misses from v$latch
Gets: number of successful willing-to-wait requests for a latch;
Misses: number of times an initial wiling-to-wait request was unsuccessful;
Sleeps: number of times a process waited after an initial willing-to-wait request;
Wait_time: number of milliseconds waited after willing-to-wait request;
Spin_gets: gets that misses first try but succeed after spinning.
Immediate_gets: number of successful immediate requests for each latch;
Immediate_misss: number of unsuccessful immediate requests for each latch;

 shared pool:需要优化shared pool。(在没有配置large pool情况下使用shared server选件,会导致很高的shared pool latch.)
 library cache:需要优化library cache。
 cache buffers LRU chain:管理database cache buffers上的LRU List上的块,自由缓冲区列表。此争用有两种可能:
- 导致严重的全部扫描的SQL语句或执行计划。SQL需要优化。
- 脏缓冲区写盘database writer未能跟上I/O请求。优化磁盘I/O。
 cache buffers chains:预示某些某些缓冲块被重复搜索,块大小比较大的比块大小小的更容易遇见此latch。优化块大小与I/O关系。
 redo allocation:许多用户同时放入redo log buffer,则产生该latch。优化redo log buffer。
 redo copy:用户server process复制信息到redo log buffer时发生。优化redo log buffer。

一 般无需调整latch(实际上在9i中,init.ora已经废弃了所有的latch调整参数),但是下列的措施是有用的(根据v$latch作为调整其 他性能指标的指示器,而不是调整latch本身):
A、对处于竞争中的latch做进一步的调查
B、如果竞争主要存在于shared pool和library cache中,可以考虑调整应用
C、如果进一步的调查显示需要调整shared pool和buffer cache,就进行调整

2.3诊断free list竞争
(使用management local的表空间不用调整,对表的insert和delete,update操作有重要指导意义)
判断表空间是否management local:
select tablespace_name,contents,extent_management,allocation_type,segment_space_management
from dba_tablespaces;

2.3.1概念
每个段保持一个free list来包含这个段中能接受新行的块。
比如如果应用程序有许多频繁插入行的用户,在试图访问该表的free list就可能会经历等待。

2.3.2 是否存在free list争用
select event,total_waits,time_waited from v$system_event
where event = ‘buffer busy waits’;
自数据库启动来,可能发生的 free list 争用。

还应经过以下查询确定:
select class,count,time from v$waitstat
where class in
(‘free list’,’segment header’);
count: 访问一个块的等待次数。
Time:等待访问块所花费的总时间。

例:
CLASS COUNT TIME
------------------ ---------- ----------
segment header 1869 1725
free list 0 0

说 明:针对段头部的free list相关等待发生了1896次,针对自由列表发生的free list为0次。

2.3.3确定free list 争用的段
select s.segment_name,s.segment_type,s.freelists
from dba_segments s,v$session_wait w
where w.p1 = s.header_file
and w.p2 = s.header_block
and w.event = 'buffer busy waits';
(确定当前的争用)

2.3.4 优化free list争用
1) 增加附加的free list
默认创建只有一个free list,若要增加更多的free list,可以使用
alter table hr.employee storage (freelists 5);
进行修改。
2) 把段转移到自动段管理表空间上(Oracle 9i新特性)
management local
使用自动段管理表空间,将不再利用 free list管理块,而是利用表空间数据文件头的位图来管理表空间中每个段的自由块分配(包括新建的任何附加段),此时该段在dba_segments视图中 的freelists的值将是NULL空值。
(create一个management local的表空间,使用
alter table hr.employee move tablespace app1_data;
的方法把表从一个表空间移动到另外一个management local的表空间)
(表里有long字段,得用其他方法移动)

2.4诊断lock竞争
2.4.1概念
lock 用来保护对数据的访问的一致性,latch用来保护对内存的访问(latch从不在process之间共享)。
Lock通常发生在许多用户正在少 量的表上执行DML操作的时候发生。一旦lock申请获得,lock会一直保留给该用户,直到lock的用户发布一条commit或rollback为 止。
使用Oracle默认加锁机制,可以:
1) 修改同一个表的不同行,不用担心锁问题。
2) 修改同一个表的同一行,由等待队列根据system change number(SCN)决定谁的修改结果是最终修改结果。(默认队列最多数从init.ora的session获得,也可修改 enqueue_resources手工调整)

如果需要严格的锁机制,可把init.ora的row_locking从 always(row lock)修改为intent的(table lock)。

一共有两类锁“DML数据锁(Data lock)”和“DDL目录锁(Dictionary lock)”,有两种模式使用锁:“独占型(Exclusive lock)”和“共享型(Share lock)”模式,实现数据的并发性和一致性。

v$lock:报告锁模式等情况。
v$locked_object: 报告被锁的对象信息。
dba_waiters:报告阻塞的具体情况,有锁模式,wait session和hold session。
dba_blockers: 报告霸占资源导致别的session阻塞的sid.(如果没有,则执行$ORALCE_HOME/rdbms/admin/catblock.sql和 utllockt.sql脚本创建)

DML事务使用row-level locks,查询不会锁定数据。锁有两种模式:exlusive、share。
锁的类型:
• DML or data locks:
– Table-level locks(TM的数量一般有init.ora的transactions获,但可修改dml_locks做调整)
– Row-level locks(TX)
• DDL or dictionary locks
一个transaction至少获得两个 锁:一个共享的表锁,一个专有的行锁。Oracle server将所有的锁维护在一个队列里,队列跟踪了等待锁的用户、申请锁的类型以及用户的顺序信息。
Lock在下列情况会释 放:commit;rollback;terminated(此时由pmon清理locks)。

Quiesced database:一个数据库如果除了sys和system之外没有其他活动session,这个数据库即处于quiesced状态。活动session 是指这个session当前处于一个transaction中,或一个查询中,一个fetch中,或正占有某种共享资源。

2.4.2可能引 起lock contention的原因
不必要的高层次的锁;
长时间运行的transaction;
未提交的修改;
其他 产品施加的高层次的锁。

2.4.3锁解决办法
如果出现了阻塞,则可通过下列方法之一解决这种争用:
1) 修改应用程序,使之不要使用严格的锁和不要有太长的事务(可设逻辑提交点)。(更不要使用显示锁select .. for update,lock table .. in exclusive mode;)
2) 查出锁住对象,制造阻塞的session,通知用户commit或rollback。
可使用profile的方式,声明断开已空闲一段时间的用 户。
3) 使用alter system kill session ‘sid,$serial’等方法杀死引起阻塞的session(如果该session没有在活动不会收到被kill的信息,直到发出新操作才得到 kill提示)。

2.4.4死锁
Oracle自动检测和解决死锁,方法是通过回滚引起死锁的语句(statement),但是这条 语句对应的transaction并没有回滚,因此当收到死锁的错误信息后,应该去回滚改transaction的剩余部分。
发生死锁后,会自动 在$ORACLE_BASE/admin/$ORACLE_SID/udump目录下生成一个详细描述死锁的跟踪文件。
(Oracle会有租塞, 但不会有死锁,因发生死锁后,导致发生死锁的操作会取消并报告“ORA-00060: 等待资源时检测到死锁”错误,但可能会继续出现阻塞(因无人commit或rollback)。)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/40011/viewspace-667195/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/40011/viewspace-667195/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值