文字内容
1. IT U P T E N . B
2. T E 云时代的数据库 N . B Oracle 的技术演进之路和19c新特性揭秘 U P IT 盖国强@云和恩墨
3. Who am I o 盖国强 云和恩墨信息技术有限公司 创始人 o o T E N . B 国内第一个Oracle ACE及ACE总监; 致力于技术分享与传播 o o o 技术论坛ITPUB的主要倡导者之一; 已经出版了14本技术书籍; 和张乐奕共创 Oracle用户组 - ACOUG,开展持续的公益活动; U P o 云和恩墨 数据资产端到端解决方案服务商 o 汇聚 Oracle ACE 总监,Oracle ACE,SQL大赛冠军, IT 以及数十位OCM专家,同时具备MySQL、DB2、中间件专家; o 恩墨学院致力于为企业培养数据人才,开设Oracle、MySQL、Hadoop全方位数据课程;
4. 云时代的数据库-走过商业和开源时代 • 开源与开放技术百花齐放,不同产品落地寻获最佳实践 1977 1995 2012 $200B $1B 1983 1984 1996 2005 2014 T E N . B 1989 IT U P 2015 $2B 2009 2016 $4B 1992 1994 2009 2010 2017 2018 $2.5B
5. Oracle 的云上变革之路 – 全面转向 IT U P T E N . B
6. Oracle 的云上变革之路 – 数据为王 U P T E N . B IT Google is supporting customer decisions to use the cloud provider of their choice, even if it's a rival company.
7. 架构演进 – Oracle 12c 的融合一体 U P IT 多租户:整合私有数据库,库内 虚拟化整合,建设私有云数据库 平台。 T E N . B 内存存储:列式存储压缩,融合 OLTP 和 OLAP 于一体。 数据库分片:Sharding 构 建分布式,支持海量高并发 的业务场景。
8. 自治环境 – 云化数据库运行环境 供应 - Provision T E N . B Create RAC cluster with Data Guard Standby 安全 - Secure Encrypt data, Database Vault, apply security patches online 更新 - Update Online patching and upgrade of database 保护 - Protect Backup, failover, repair IT U P Autonomous 整合 - Consolidation User driven PDB and CDB creation 迁移 - Migrate Easy DB migration, load data from object store 扩展 - Scale Elastically adjust OCPUs, expand DB 8
9. 执行优化 - 自治工作负载运行时优化 索引 - Indexes T E N . B Automatic creation and monitoring of indexes 统计信息 - Statistics U P Real-time maintenance of optimizer statistics 执行计划 - Plans Automatic detection and correction of regressions due to plan changes IT Machine Learning HASH TIME SALE 控制SQL - Runaway SQL Automatically kill runaway SQL and prevent re-execution until tuned 配置 - Configuration Automatically tune memory, process, sessions, etc. 9
10. 架构演进 - Sharded RAC的分区路由 • 将分片能力引入到RAC集群实例中 – 指定了分区键值的SQL查询将被路由到特定的实例; – 分区可以避免竞争减少跨实例的访问; Instance 1 Partition P1 Instance 2 Partition P2 • 不包含分区键值的请求会透明的被处理 • 以最小的应用改变提供分布式性能 Oracle RAC Database Instance 3 Partition P3
11. 架构演进 – 混合分区表的内外融合 COLD DATA SQL HOT DATA ORDERS Q4_2016 Q1_2017 Q2_2017 Q3_2017 Q4_2017 Q1_2018 Q2_2018 Q3_2018 Q4_2018 UPDATES TABLE PARTITIONED BY QUARTER OBJECT STORAGE
12. 架构演进 - 主备切换的连续性保持 连接保持 Read/Write Read 内存保持 Read/Write Primary Standby Read/Write Standby Primary • ADG 上的只读会话在切换期间 • 极大缩减了切换后的连接风暴 Read Active Data Guard Standby Read/Write Failed Primary Primary • Buffer Cache在切换过程中被维护和保持
13. 架构演进 - 备库DML操作自动重定向 • 在 ADG 上发出的 DML 重定向到主库执行,备库等待主库日志传递到备库并应用 5 1 DML PRIMARY ACTIVE STANDBY 2 2 DATA IS VISIBLE TO CLIENT DML IS REDIRECTED TO PRIMARY DML IS APPLIED TO PRIMARY 3 DATA CHANGE IS STREAMED TO STANDBY
14. 架构演进 - 备库DML操作自动重定向 SQL>select * from enmotech; ID NAME ---------- -------------------1 EYGLE 2 KAMUS 3 Yangtingkun SQL>insert into enmotech values(4,'ORA-600’); ORA-16000: database or pluggable database open for read-only access SQL>alter session set adg_redirect_dml=true; SQL>set timing on SQL>insert into enmotech values(4,'ORA-600'); 1 row created. Elapsed:'>Elapsed: 00:00:01.21 SQL>select * from enmotech; ID NAME ---------- ------------------4 ORA-600 1 EYGLE 2 KAMUS 3 Yangtingkun SQL>commit; Commit complete. Elapsed:'>Elapsed: 00:00:01.02
15. 架构演进 - 备库DML操作自动重定向 PARSING IN CURSOR #140687912810736 len=38 dep=0 uid=77 oct=2 lid=77 tim=3688844617 hv=1412393105 ad='6b9b25e0' sqlid='0555c7da2yu4j' insert into enmotech values(1,'EYGLE') END OF STMT PARSE #140687912810736:c=804,e=2144,p=0,cr=0,cu=1,mis=1,r=0,dep=0,og=1,plh=0,tim=3688844616 WAIT #140687912810736: nam='SQL*Net message to dblink' ela= 2 driver id=1413697536 #bytes=1 p3=0 obj#=23281 tim=3688844706 WAIT #140687912810736: nam='SQL*Net message from dblink' ela= 800 driver id=1413697536 #bytes=1 p3=0 obj#=23281 tim=3688845523 EXEC #140687912810736:c=914,e=914,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=3688845579 WAIT #140687912810736: nam='SQL*Net message to dblink' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=23281 tim=3688845609 WAIT #140687912810736: nam='SQL*Net vector data to dblink' ela= 19 driver id=1413697536 #bytes=26 p3=2 obj#=23281 tim=3688845642 WAIT #140687912810736: nam='SQL*Net message from dblink' ela= 165 driver id=1413697536 #bytes=1 p3=0 obj#=23281 tim=3688845818 WAIT #140687912810736: nam='standby query scn advance' ela= 400353 p1=671770 p2=0 p3=12000 obj#=23281 tim=3689246194 WAIT #140687912810736: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=23281 tim=3689246293
16. 插播预警 – 关于 DB Link和SCN的警示 2018.2.15 Oracle 发布了安全预警,以“必须升级”时间在 2019年4月之前: 2018.3.16 云和恩墨 发布 解决方案:Oracle的 DB Link 问 题及2019年4月前升级路线详述: Mandatory Patching Requirement for Database Versions 11.2.0.3 or Earlier, Using DB Links (Doc ID 2335265.1) Oracle Databases Need to be Patched to a Minimum Patchset/PSU/RU level before April 2019 (Doc ID 2361478.1) Oracle设置了倒计时,在 2019年 6月23日,自动启用 3 级兼容性, 提升SCN的可用量。 也彻底废弃 16K/s 的增长率,提升到 96K/s 的增长率,目标是让数据库支持 的变化更多,承载能力更强。 2018.3.14 云和恩墨 发布了分析报告,提出新的SCN算法会在 2019年6月23日生效: 2018.3.17 Oracle 修改文档,去掉”必须“改为”推荐“ ,修改时间到2019年6月。 这两篇文章引发了广泛关注,尤其是标题中使用的“Mandatory - 必须的” 和“Before April 2019 - 在2019年4月之前”。 用户关注:Oracle 是如何让这样的问题在 2019年4月后触发的?难道是 Oracle 在数 据库中埋下了一个时间触发器? 经过分析,这个时间约束的确存在,但是触 发时间是:2019年6月23日。 Recommended patches and actions for Oracle databases versions 12.1.0.1, 11.2.0.3 and earlier – before June 2019 (Doc ID 2361478.1) Recommended patching and actions for Oracle database versions 12.1.0.1, 11.2.0.3 and earlier - before June 2019 (Doc ID 2335265.1)
17. 自治环境 – 云化数据库运行环境 Oracle 公有云通过自治的数据环境提供、自动备份等,简化用户的数据环境管理。
18. 自治环境 – 云化数据库运行环境 云和恩墨私有云 zCloud 在用户环境下实现多数据库统一管理、监控、自动化运维等工作。
19. 执行优化 – 实时的统计信息收集 Statistics 为优 化器提供关于 数据的信息 统计信息往 往滞后于真 实数据情况 收集统计信息可能是资 源密集型和消耗时间的 Gather 数据可能会随 时发生变化 定时采集 10g - create / rebuild index 12.1 - Online Statistics Gathering for Bulk-Load CTAS – Create Table As Select Direct-Path Insert - insert /*+append */ into … select … TIME
20. 执行优化 – 自动采集和集中补充 TIME 实时 统计信息 新增 - HIGH FREQUENCY AUTOMATIC STATISTICS COLLECTION,每15分钟; 收集统计信息作为 传统DML的一部分 _optimizer_gather_stats_on_conventional_dml _optimizer_use_stats_on_conventional_dml Automatic statistics gathering job
21. 执行优化 – SQL的解析和执行优化 TIME • 使用统计信息支持查询 • 使用已经收集的统计信息,避免扫描大量数据; 例如,select count(*) from emp • 可以极大提升某些检查查询的性能,Min, Max, Count, Approximate_Count_distinct • SQL失效与重新解析 • 第一个感知到统计信息变化的会话执行游标的重解析工作 • 其他会话继续使用原有Cursor直到编译完成; • 避免大量会话重解析的竞争;
22. 执行优化 – 失控SQL的自动隔离 • Oracle Resource Manger 提供SQL监控能力,可以自动终止 消耗资源超过一定阈值的SQL。然而,在终止查询之前,大量 的资源已经被浪费。 • 在新特性中,执行计划超过DBRM限制将会被标记隔离; DBRM resource limit exceeded • 隔离的执行计划将被阻止执行; • SQL 隔离是一个针对失控SQL的自动化解决方案。 Quarantine
23. 执行优化 – 失控计划的隔离 在以下示例中,SQL 因为执行时间超过限制而被隔离,再次执行时提示”使用了被隔离的执行计划”。 SQL> 2 3 from select count(*) from emp emp1, emp emp2, emp emp3, emp emp4, emp emp5, emp emp6, emp emp7, emp emp8 where rownum <= 10000000; emp emp1, emp emp2, emp emp3, emp emp4, emp emp5, emp emp6, emp emp7, emp emp8 * ERROR at line 2: ORA-00040: active time limit exceeded - call aborted SQL> 2 3 from select count(*) from emp emp1, emp emp2, emp emp3, emp emp4, emp emp5, emp emp6, emp emp7, emp emp8 where rownum <= 10000000; emp emp1, emp emp2, emp emp3, emp emp4, emp emp5, emp emp6, emp emp7, emp emp8 * ERROR at line 2: ORA-56955: quarantined plan used SQL> select avoided_executions, sql_quarantine 2 from v$sql vs 2 where sql_id = 'd0z9zp1h5n799’; SQL_QUARANTINE AVOIDED_EXECUTIONS ------------------------------------------------------------- -----------------SQL_QUARANTINE_0scf6as37zcu0cfe7a0e4 1
24. 执行优化 – 自动采集和分析修复 DBA 交互 提取诊断信息 提报SR (Service Request) 应用Patch 或者暂时解决方案 当数据库出现问题时,自动 生成告警信息和诊断信息 ORA-600 ORA-7445 错误信息打包
25. 执行优化 – 自动采集和分析修复 数据库就是DBA 数据库就是问题的Owner 自动修复 告警自动生成 自动诊断 ORA-600 ORA-7445 错误信息打包
26. 执行优化 – 自动采集和分析修复 数据库就是DBA DBMS_SQLDIAG.ACCEPT_SQL_PATCH 数据库就是问题的Owner 自动修复 告警自动生成 自动诊断 DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK ORA-600 ORA-7445 错误信息打包
27. 执行优化 – 自动索引技术 自动索引是借鉴于人工工作的专家系统 It is an expert system that implements what a performance engineer skilled in index tuning would do Capture • 自动索引技术基于和常规手工SQL优化同样的思路实现; • 系统自动识别候选索引并在启用前验证索引的效率和性 Monitor Identify 能; • 整个过程完全是自动化实现的; Online Validation Verify • 透明度与复杂的自动化同样重要; – Decide 所有的调整活动可以通过报告进行核查;
28. 执行优化 – Automatic Indexing 通过 DBA_AUTO_INDEX_CONFIG 查看和修改系统配置 CDB$ROOT@SYS>alter session set container=pdb1; Session altered. CDB$ROOT@SYS>EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT'); PL/SQL procedure successfully completed. CDB$ROOT@SYS> CDB$ROOT@SYS>select * from DBA_AUTO_INDEX_CONFIG; PARAMETER_NAME PARAMETER_VALUE LAST_MODIFIED ------------------------------- --------------- ----------------------------AUTO_INDEX_DEFAULT_TABLESPACE AUTO_INDEX_MODE IMPLEMENT 17-FEB-19 10.03.59.000000 PM AUTO_INDEX_REPORT_RETENTION 31 AUTO_INDEX_RETENTION_FOR_AUTO 373 AUTO_INDEX_RETENTION_FOR_MANUAL AUTO_INDEX_SCHEMA AUTO_INDEX_SPACE_BUDGET 50
29. 执行优化 – Automatic Indexing 构建测试数据,执行测试查询,驱动数据库的自我记录分析 PDB1>create table test as select * from dba_objects; Table created. PDB1>insert into test select * from test; PDB1>insert into test select * from test; 144794 rows created. PDB1>update test set object_id=rownum; 2316704 rows updated. PDB1>commit; Commit complete. PDB1>select object_name from test where object_id=1; PDB1>select object_type from test where object_id=8; PDB1>select created from test where object_id=88888;
30. 执行优化 – Automatic Indexing 检查数据库自动任务执行: select * from DBA_AUTO_INDEX_EXECUTIONS; EXECUTION_NAME EXECUTION_START EXECUTION_END ERROR_MESSAGE STATUS ----------------------------- ------------------- ------------------- -------------------- --------SYS_AI_2019-02-17/22:51:00 2019-02-17 22:51:00 2019-02-17 22:53:07 COMPLETED select * from DBA_AUTO_INDEX_STATISTICS where EXECUTION_NAME='SYS_AI_2019-02-17/22:51:00'; EXECUTION_NAME STAT_NAME VALUE ---------------------------------------- ----------------------------- ---------SYS_AI_2019-02-17/22:51:00 Index candidates 1 SYS_AI_2019-02-17/22:51:00 Indexes created (visible) 1 SYS_AI_2019-02-17/22:51:00 Indexes created (invisible) 0 SYS_AI_2019-02-17/22:51:00 Indexes dropped 0 SYS_AI_2019-02-17/22:51:00 Space used in bytes 45088768 SYS_AI_2019-02-17/22:51:00 Space reclaimed in bytes 0 SYS_AI_2019-02-17/22:51:00 SQL statements verified 2 SYS_AI_2019-02-17/22:51:00 SQL statements improved 2 SYS_AI_2019-02-17/22:51:00 SQL statements managed by SPM 0 SYS_AI_2019-02-17/22:51:00 SQL plan baselines created 0 SYS_AI_2019-02-17/22:51:00 Improvement percentage 100
31. 执行优化 – Automatic Indexing 包含 AI 标识的自动索引已经被创建出来: PDB1>select command,statement from DBA_AUTO_INDEX_IND_ACTIONS COMMAND -------------------CREATE INDEX REBUILD INDEX ALTER INDEX VISIBLE STATEMENT ---------------------------------------CREATE INDEX ”EN"."SYS_AI_18sc6rdkngxkh" ON ”EN"."TEST"("OBJECT_ID") ALTER INDEX ”EN"."SYS_AI_18sc6rdkngxkh" REBUILD ONLINE ALTER INDEX ”EN"."SYS_AI_18sc6rdkngxkh" VISIBLE PDB1>select index_name,index_type,tablespace_name,status,auto from dba_indexes where table_name='TEST’; INDEX_NAME INDEX_TYPE TABLESPACE_NAME STATUS AUT -------------------- --------------------- ------------------------------ -------- --SYS_AI_18sc6rdkngxkh NORMAL USERS VALID YES
32. 执行优化 – Automatic Indexing SQL 查询将使用新的索引加速执行: PDB1>select object_name from test where object_id=8; Execution Plan ---------------------------------------------------------Plan hash value: 159453698 ---------------------------------------------------------------------------------------------- Id Operation Name Rows Bytes Cost (%CPU) ---------------------------------------------------------------------------------------------- 0 SELECT STATEMENT 1 41 4 (0) 1 TABLE ACCESS BY INDEX ROWID BATCHED TEST 1 41 4 (0) * 2 INDEX RANGE SCAN SYS_AI_18sc6rdkngxkh 1 3 (0) ----------------------------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------2 - access("OBJECT_ID"=8)
33. 执行优化 – 自动化索引的实现效果 让完全无索引的应用程序持续运行, AI系统在后台自动优化创建索引。 运行效果如下,总运行时间 2 小时 -10 分钟负载高攀; -60 分钟稳定; -50 分钟负载下降; 在20分钟内43索引自动创建应用
34. 执行优化 – SQL的解析和执行优化 TIME • DDL 的SQL失效感知增强 • 为表、视图、列增加 comment 不再需要失效Cursor; • 分区维护操作不再失效”非相关性”SQL,例如MOVE, TRUNCATE, EXCHANGE PARTITION 操作,不访问这些 变化分区的SQL不再失效。 • 索引 DDL 的 SQL失效感知 • 对于 unusable 和 invisible 索引,不失效 SQL ;
35. 云和恩墨 – 数据资产端到端解决方案 • 应用架构:SQM审核SQL性能 • 挑战:靠运维和人力在后端解决问题 将陷于极度混乱; • 前置优化管控:在开发阶段进行SQL 质量管控、架构优化, • 数据架构:zCloud数据库云管 • 平台化:打造多源异构统一的 PaaS 平台,通过纳管降低管理复杂性; • 智能化:通过自动化和智能化建设, 改善成本和人力投入; • 基础架构:zData分布式一体机 • 弹性混合云; • 软件定义存储;
36. 总 ØOracle 仍然是最好的数据库产品 • 功能优化细致入微 Ø数据库的竞争已经转移到云上 Ø数据库的未来是自动化 结