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

Oracle 在OLTP系统中合并两个表可能对性能产生的影响。

askTom 2014-12-08
145

问题描述

你好,汤姆,

为了减少两个频繁使用的表上DML的总数量,从而减少总事务时间,应用程序团队想出了一个想法,将这两个表(合并到一个表)。

计划是创建一个新表,该表将包含两个表的所有列,并更新现有应用程序代码以利用这个新合并的表,从而减少DML的数量。

这两个表都在单个事务期间被锁定在一起。

以下是两个表的详情(我把它们叫做A桌和B桌) :

1)两个表的主键相似,将这两个表合并为一个表时没有对象依赖问题。

2)
|行|列数|常数|索引数
====================================================================
表A | 27327123 | 41 | 3 | 4
标签B |27327139 | 19 | 5 | 8

3)选项卡A的AVG_LEG为152 ,选项卡B的AVG_LEN为119。

4)表空间(这两个表都在其中)的块大小为8192。

5)表定义:

选项卡A :

名称为空?类型
-------------------------------------------------------------------------------------------------
订单ID非空VARCHAR2(40)
类型非空数字(38)
版本非空数字(38)
订单分类类型VARCHAR2(40)
配置文件ID VARCHAR2(40)
说明VARCHAR2(64)
状态VARCHAR2(40)
状态详细信息VARCHAR2(254)
CREATED_BY_ORER VARCHAR2(40)
原点_OF_顺序编号(10)
创建日期日期
提交日期日期
上次修改日期日期
完成日期日期
价格_信息VARCHAR2(40)
税_价格_信息VARCHAR2(40)
显式保存的编号(1)
代理ID VARCHAR2(40)
销售_渠道编号(10)



选项卡B :

-------------------------------------------------------------------------------------------------
订单ID非空VARCHAR2(40)
是否需要礼品包装编号(1)
同种样品数(1)
选择PROFILE_地址_ID VARCHAR2(40)
IS_PG_USE_发货地址编号(1)
选择_PROFILE_CRID_ID VARCHAR2(40)
选择PROFILE_地址ID_GF VARCHAR2(40)
SEPH_STATUS VARCHAR2(255)
区域设置VARCHAR2(40)
VARCHAR2(40)
VARCHAR2(40)
VARCHAR2(40)
JSC日期的时间
保存_CRID_状态VARCHAR2(10)
取消日期_日期
JSC BLOB
删除日期日期
取消_REASON VARCHAR2(3)
需要欺诈检查编号(1)
已发送完成邮件编号(1)
IS_ORD_SKU_非_CATALOG编号(1)
欺诈检查状态VARCHAR2 (20)
源站点ID VARCHAR2(40)
链接SHARE_GMT时间VARCHAR2(40)
商品_价格编号(10,2)
折扣_商号_价格编号( 10、2 )
合计_商号_价格编号( 10、2 )
盘合计商号价格编号( 10、2 )
源订单VARCHAR2(30)
合计_GIFTCERT_采购_价格编号( 10、2 )
总订单价格编号( 10、2 )
总计_GIFTWRAP_价格编号( 10、2 )
修改日期日期
当前语言VARCHAR2(40)
闪存订单类型VARCHAR2(1)
电子邮件: VARCHAR2(255)
异序类型VARCHAR2(40)
外汇汇率汇率报价ID号(10)
存储ID VARCHAR2 ( 40字符)
VARCHAR2 ( 40字符)
终端ID VARCHAR2 ( 40字符)


6)对于这两个表,每小时大约激发的SQL数:

表| INSERT | UPDATE | SELECT | ALL
================================================
选项卡A | 2901 | 72965 | 43879 | 119745
选项卡B | 2901 | 72965 | 71053 | 146919


7)当前,它们在任何表中都没有链行。


理论上,这种方法似乎还可以,但仍不能确定

行大小的增加会如何影响将使用新合并表的新DML和SELECT ?

这种合并是否会导致链行或行迁移,从而降低性能?

这样的表合并是可取的,还是将它们分开比较好?


先谢了。

专家解答

看起来这本来就不应该是一对表?

它不会真正影响您给出的描述“这两个表都在一个事务期间被锁定在一起。"我认为这意味着两个表中的相应行都被锁定。

它可以帮助选择(一次索引范围扫描以查找所有数据,而不是两次)

由于行大小小于块大小,因此不会产生链接行(真正的链接行-无法解除链接的行)。

它可能导致迁移行,但现有设计也可能迁移行。这完全取决于更新是否会随着时间的推移而增加行的大小,以及您的pctfree设置为什么。只要pctfree足够大以满足未来的更新,它们就不会迁移。


在我看来,他们从一开始就应该是一张表。为什么有两个?如果我理解了两张表后面的想法-我们可以讨论最后一点...


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

评论