oracle 如何查看单位时间的commit次数

mich_mia 2012-11-16 05:48:12
因为数据量比较大,导致生产I/O出现堵塞现象,分析发现是oracle单位时间的commit事务量太大,对程序进行修改,现在想看看修改后的单位时间内commit的个数,又没有运维使用的那种系统工具,亲们,这个如何查看单位时间数据库commit的次数呢?
...全文
601 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mich_mia 2012-11-17
  • 打赏
  • 举报
回复
引用 1 楼 taiguang 的回复:
select * from V$STATNAME where name like '%commit%'; 一般是user commits 然后结合v$sesstat 查找哪些session的commit次数过多,找到session之后,找到sid之后,后面怎么看就不用多说了吧
这个我可以在网上找到,但是根本就整不明白,能给点解释???
linwaterbin 2012-11-16
  • 打赏
  • 举报
回复
深入研究commit是比较复杂的,和参数commit_write有关
查看单位时间数据库commit的次数可以比较粗劣找出
同时启动两个session, 一个以sys用户登陆, 一个以用户session登陆
1)在linux shell下运行strace -T -c -p , 跟踪lgwr在这段时间的所有系统调用统计
2)在用户session下运行do_loop procedure
create or replace procedure do_loop (p_type  in  varchar2) as 

l_start NUMBER;

l_loops NUMBER := 10000;

BEGIN

l_start := DBMS_UTILITY.get_time;

FOR i IN 1 .. l_loops LOOP

INSERT INTO commit_test (id, description)

VALUES (seq_commit_test.nextval, 'Description for ' || i);

commit;

END LOOP;

DBMS_OUTPUT.put_line(RPAD('COMMIT WRITE ' || p_type, 30) || ': ' || (DBMS_UTILITY.get_time - l_start));

END;

/

3)在sys 用户下得到lgwr 在此段时间的跟踪统计

里面的字段io_submit的次数基本与commit次数一致
软件钢琴师 2012-11-16
  • 打赏
  • 举报
回复
select * from V$STATNAME where name like '%commit%'; 一般是user commits 然后结合v$sesstat 查找哪些session的commit次数过多,找到session之后,找到sid之后,后面怎么看就不用多说了吧

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧