暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle gc缓冲器忙获取应力负载下的RAC

askTom 2015-10-02
179

问题描述

嗨,

我们在2节点Windows 2012 R2操作系统上安装了Oracle 12c (12.1.0.1 SE) RAC。
我使用jmeter测试简单的性能测试,它启动500个并发用户,然后每个用户在表中插入1000次一行。Jmeter在每次插入后都进行提交。随机所有挂起,服务器cpu下降(90% -> 0%) ,互连网络带宽上升(5Mb -> 100 Mb) ,所有会话都会停滞约60秒。这种情况在测试中发生过几次。
当我检查数据库时,我看到所有的插入都在等待“GC缓冲区忙获取”或“GC缓冲区忙释放”。

用于测试的表:
创建表xx_some_table
(
log_Sorse Number不为空,
request_id Number不为空,
message_text VARCHAR2(4000)不为空,
会话ID号,
时间戳日期不为空
)
表空间APPS_TS_TX_DATA
不含pct10
反式1
最大传输255
存储
(
初始64K
下一个1M
地雷范围1
最大范围无限
);
--创建/重新创建索引
在xx_some_table (REFEST_ID)上创建索引xx_some_table_N1
表空间APPS_TS_TX_IDX
不含pct10
反式2
最大传输255
存储
(
初始10M
下一个1M
地雷范围1
最大范围无限
);
在xx_sESSION_table (SESSION_ID)上创建索引xx_some_table_N2
表空间APPS_TS_TX_IDX
不含pct10
反式2
最大传输255
存储
(
初始10M
下一个1M
地雷范围1
最大范围无限
);
在xx_some_table (LOG_SQ)上创建唯一索引xx_some_table_U1
表空间APPS_TS_TX_IDX
不含pct10
反式2
最大传输255
存储
(
初始10M
下一个1M
地雷范围1
最大范围无限
);

用于测试的顺序:
创建序列xx_Some_table_sq
以1开头
加1 ;

插入用户发布的声明:

插入到XX_CDF_REQ_OUTPUT_ MESSAGE_TL值(
XX_CDF_REQ_OUTPUT_MESSAGES_sq.Nextval,
trunc(dbms_ranom.value(1, 10000)) ,
dbms_random.字符串('A', 400 ) ,
trunc(dbms_ranom.value(1, 100)) ,
系统日期)

是什么导致了这个简单的插入语句中的延迟?我已经在单个实例中测试了相同的过程-完全没有问题。

专家解答

RAC与单个实例不同: -)

这是一个链接到一个关于OTN的旧文件,但原则是不变的

http://www.oracle.com/technetwork/products/clustering/overview/s298716-oow2008-perf-130776.pdf

看一下第16页。

但是试着用

1)序列设置为缓存大小(例如) 50000
2)确保相关表空间为ASSM
3)散列分区单调增加的索引

同时,问问你自己,你的测试是否真实地反映了你计划在你的系统上发生的事情。500个连接在没有睡眠时间的情况下(您没有指定是否有)将相当于一个潜在的数万的真正用户群...

类似地,您真的希望会话随机选择一个实例吗?如果( say) Session_id ='x'使用( say)实例1 ,那么它可能会在其生命周期中一直停留在实例1上,那么它是否会成为一个标准。'dbms_ranodm'可能并不是对现实的如此准确的反映。

所有系统最终都有极限。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论