- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Teradata高级文档
Tera Blog 收藏
Teradata SQL调优
1.优化过程:依照运行时间,数据量和复杂度来定位瓶颈。
查看sql执行计划,判断其合理性。 性能监控 ==》目标选取 ==》性能分析 ==》过程优化 ==》运行跟踪(性能监控)
注意:每个过程中都会产生必须的文档
2.性能分析: ? Review PDM --表定义 --PI的选择 --表的记录数与空间占用 ? Review SQL --关联的表 --逻辑处理复杂度 --整体逻辑 --多余的处理 ? 测试运行 --响应时间 ? 查看EXPLAIN --瓶颈定位
3.过程优化: ? 业务规则理解 --合理选取数据访问路径 ? PDM设计 --调整PDM ? SQL写法不优化,忽略了Teradata的机理与特性 --调整SQL ? Teradata优化器未得到足够的统计信息 --Collect Statistics
4.Multiple Insert/select -- Multi-Statement Insert/Select * 并行插入空表不记录Transient Journal * 充分利用Teradata向空表Insert较快以及并行操作的特性如: ? 现状 INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC1 ; INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC2 ; INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC3 ; 说明:串行执行,多个Transaction ? 优化后: INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC1 ;INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC2 ;INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC3 ; 说明:并行执行,单个Transaction
5.Insert/Select with Union/Union all -- Multi-Statement Insert/Select * Union 需要排除重复记录,Union all虽不需要排重,但都需要占用大量的Spool空间,都需要进行重新组织数据 如:现状: INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC1 ; UNION ALL SELECT … FROM SRC2 ; UNION ALL SELECT … FROM SRC3 ; … 调整后: INSERT INTO ${TARGETDB}.DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC1 ;INSERT INTO ${TARGETDB}.T01_DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC2 ;INSERT INTO ${TARGETDB}.T01_DES (Party_Id ,Party_Name ... ) SELECT … FROM SRC3 ;
6.排除重复记录 * 针对单表内的重复记录使用ROW_ NUMBER函数排重 * 排重方式多了一层子查询 * 增加了大量的数据重新分布的时间 现状: …… INSERT INTO ${TARGETDB}.T01_INDIV (Party_Id ,Party_Name ... ) SELECT COALESCE(b1.Party_Id,-1) , COALESCE(TRIM(b1.Party_name),) ... FROM ( select party_id party_name, … , ROW_NUMBER() OVER (PARTITION BY Party_Id ORDER BY Party_Name ) as rownum from ${TEMPDB}.T01_INDIV b1 … ) AA where AA.rownum = 1 …… 建议做法: INSERT INTO ${TEMPDB}.T01_INDIV … INSERT INTO ${TEMPDB}.
文档评论(0)