[分享]在数据库级别减少PX DEQ CREDIT SEND BLKD等待的秘诀_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 7244 | 回复: 0   主题: [分享]在数据库级别减少PX DEQ CREDIT SEND BLKD等待的秘诀        下一篇 
guoqiang
注册用户
等级:上士
经验:252
发帖:26
精华:0
注册:2012-4-12
状态:离线
发送短消息息给guoqiang 加好友    发送短消息息给guoqiang 发消息
发表于: IP:您无权察看 2012-4-12 10:00:31 | [全部帖] [楼主帖] 楼主

在数据库级别减少PX DEQ CREDIT SEND BLKD等待的秘诀

适用于:

适用的数据库版本:企业版9i~11gr1

目的:

这个短文给我们一些在数据库级别上查询什么可以减少“PX Deq Credit”和“PX Deq Credit”等待时间的建议

适用范围和应用

为DBA

减少PX DEQ CREDIT SEND BLKD等待的秘诀

等待事件"PX Deq Credit: need buffer"  和  "PX Deq Credit: send blkd"的发生,是在部分查询时,数据或信息通过另外的进程被改变了。至少有3个不同的主要问题可以导致这种等待事件。第一:当有大量的数据和信息在并发线程中被改变,我们可以看到很高的等待事件。导致这个原因可能是由于执行计划不对或者并发设置不对。第二:CPU资源或者接口上有问题。例如,一个CPU资源达到100%,进程就被CPU控制而不能快速传递数据。第三:并发查询被hang住了,因为一个进程出现PX Deq Credit: need buffer等待事件。例如,在此我们不讨论第3点和第2点。(1)并发深度设置:在数据库上,你应该检查你的并行设置。例如,"alter index <indexname> rebuild parallel 4;",会导致一个深度为4的索引,尽管意图用4个并发量重建索引,但是不改变索引的深度。最好是运行SQL命令。NOTE.2708371.1中报告了表和索引的并发深度设置。在NOTE. 2708371.1的第四个命令可以显示一个关于索引和表的并发深度设置。下面是一个输出例子

OWNER  TABLE_NAME   DEGREE  INSTANCES INDEX_NAME   DEGREE  INSTANCES
------ ------------ ------- --------- ------------ ------- ---------
SCOTT  DEPT         1       1         PK_DEPT      4    1
SCOTT  EMP          1       1         PK_EMP       DEFAULT DEFAULT


上面的输出例子中,我们看到索引PK_DEPT 和 PK_EMP有一个并发深度设置,但是数据库基本没有。这里你应该将索引设置成非并发模式。可以通过alter index SCOTT.PK_DEPT noparallel;语句实现。第二个脚本很有用,去获得一个对象的深度并发设置信息。下面是一个输出的例子

OWNER  DEGREE     INSTANCES  Num Tables  'PARALLE
------ ---------- ---------- ----------  --------
OSS    1          1                  126 Serial
OSS    8          1                   1  Parallel


通过上面的结果我们看到,只有一个表有8的并发深度这是在对象OSS中。可能他不计划有一个并发深度8的表。你应该找到那个表并且将这个表设置成飞并发。你应该对这个对象用select table_name from all_tables where ( trim(degree) != '1' and trim(degree) != '0' ) or  
( trim(instances) != '1' and trim(instances) != '0' ) and owner = 'OSS'; 查询语句,找到那个对象。

结果显示为:

------------------------------
OSS_EMP


改变表的非并发设置,可以执行alter table OSS.OSS_EMP noparallel;       减少并发查询的数量来保证数据的传输。

上面的SQL语句也很有用去检查对象(表/索引)的并发深度不是很高。例如,在大多数i情况下,表/索引小于200MB时,默认的参数是很好的,不需设置并发深度。有时候增加参数PARALLEL_EXECUTION_MESSAGE_SIZE的大小,可能会引起PX msg pool。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论