- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深⼊理解 Oracle 动态采样 动态采样介绍 Oracle 动态采样(Dynamic Sampling,12c 称为 Dynamic statistics) ,是对统计信息的⼀个重要补充,当数 据动态变化,⽆法⽤典型的统计信息描述时,动态采样可以给在解析时对表中数据进⾏采样,为优化器提供 准确的估算值(cardinality)。动态采样的主要有以下⼏个应⽤场景: ⼀个经典的场景就是业务场景中的临时表,⽐如 ETL 数据清洗转换过程中的临时表,⽐如 BI 系统中存 放计算报表结果的临时表。这些临时表可能是 Oracle 中的 global temporary table ,也可能是正常的堆 表。因为临时表中的数据时动态变化的,不同时间点,临时表中的数据量变化很⼤,没有⼀种合适的统 计信息使优化器产⽣合适的执⾏计划。这种场景适合采⽤动态采样技术,通常会删除临时表上的统计信 息,并且锁定统计信息,不让搜集统计信息的 Job 更新临时表上的统计信息,查询临时表时,优化器会 对临时表进⾏动态采样,以确定临时表的 cardinality 。 另⼀个场景是在单表上使⽤组合过滤条件,并且组合过滤条件并不是简单的相等操作,或者在过滤列上 使⽤转换函数,⽆法使⽤ column group 扩展统计信息,简单使⽤多个列上的统计信息也⽆法产⽣合适 的统计信息。 12c 之前,动态采样只能预估单表 cardinality ,12c 版本,Oracle 对动态采样做了很⼤的增强,可以估 算 group by 的聚合结果集和连接结果集的 cardinality 。 使⽤动态采样,优化器往往可以获得⾼质量的估算值,从⽽产⽣更优化的执⾏计划。本⽂将介绍三种个动态 采样的适⽤场景。 临时表和动态采样 优化器动态采样解析 实际案例 ⾦融⾏业客户 CRM 系统的分析语句执⾏时间经常需要5分钟以上,通过分析 Top SQL的执⾏计划,发现执⾏ 计划的估算值偏差离谱,⽐如下图SQL Monitor 报告中,对于表 P_CUST_STAT ,优化器估算值为1,实际 值为⼀千四百万⾏。导致后续连接⽅式为 nested loop ,被驱动表被访问了⼀千四百万次。 通过表的统计信息,可以发现10⽉9号搜集统计信息时,表 P_CUST_STAT 中没有数据, Num_Rows 为0 ⾏,所以优化器估算为1⾏。虽然 P_CUST_STAT 是正常对表,但是在应⽤中被⽤于临时表,数据是动态⽣ 成和删除的。 另⼀个例⼦,下图 SQL Monitor 报告中,表 B_S_CUST_STAT 的过滤条件 为 Data_date = to_dateyyyymmdd) , 估算值同样为⼀⾏,实际值为⼀千四百万⾏, 导致后续连接⽅式为 nested loop outer ,被驱动视图表访问了⼀千四百万次, 通过表 B_S_CUST_STAT 的统计信息,统计信息收集时间为10⽉9号早上8点, Num_Rows 为⼀千三百七 ⼗万⾏记录,看起来表上的统计信息是正确的。 继续查看 B_S_CUST_STAT 列上的统计信息,Data_date 列上只有⼀个唯⼀值,为10⽉7号。 表 B_S_CUST_STAT 只存放⼀天的数据,当统计信息搜集时,表中的数据为10⽉7号的数据。之后,数据被 替换为10⽉8号的数据,统计信息并没有及时更新,导致当天之后对表 P_CUST_STAT 的使⽤ Data_date = to_dateyyyymmdd) 的查询的估算值都为1. create or replace function raw_to_date(i_raw raw) return date as m_n date; begin dbms_stats.convert_raw_value(i_raw,m_n); return m_n; end; / select raw_to_date(78740 stats_value from dual; STATS_VALUE 2016-10-07 00:00:00 解决⽅案 删除表 B_S_CUST_STAT 和 P_CUST_STAT 的统计信息并且进⾏锁定,保证后续对临时表的查询会使⽤ 动态采样,得到准确的估算值。 Exec dbms_stats.delete_table_stats(‘CRM’,’B_S_CUST’); Exec dbms_stats.lock_table
您可能关注的文档
最近下载
- 2025至2030年中国报废汽车回收拆解行业市场运行现状及投资规划建议报告.docx
- Unit 2 What do you like about your family Period 1 Ready Go & Sound 教学设计 沪教版(2025)二年级英语上册.docx VIP
- 食品添加剂 甲醇钠标准2023年.docx VIP
- 高一语文上学期《乡土中国》-差序格局教学课件.pptx VIP
- 企业安全生产检查标准化表格.doc VIP
- 中成药的临床合理应用试卷含答案.docx
- 《HIV病毒与艾滋病》课件.ppt VIP
- 第二单元第1课《因地制宜》课件-2025-2026学年人教版(2024)八年级上册.pptx VIP
- 高标准农田建设标准NYT2148-2012.pdf VIP
- 世界少年奥林匹克数学竞赛(中国区)选拔赛省级选拔模拟卷(三)三年级试题(含解析)2025年5月夏季.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)