《Oracle兼容性和全局临时表的实现-内核专场(22页).pdf》由会员分享,可在线阅读,更多相关《Oracle兼容性和全局临时表的实现-内核专场(22页).pdf(22页珍藏版)》请在三个皮匠报告上搜索。
1、Oracle兼兼容容性性和和全全局局临临时时表表的的实实现现阿里云只能事业群-曾文旌大纲 兼容性的特点 全局临时表特性概述 全局临时表的实现 和 PostgreSQL 社区的交流 总结目标 更短的迁移时间 快速评估 相关设施工具化服务化 更小的迁移风险 复杂 SQL 不调整逻辑 更好的性能 SQL执行效率高相关兼容点 临时表 分区表 复杂 SQL connect by SQL 性能优化 执行器优化器 存储过程内置包兼容性的特点 SQL 层特性 影响用户体验 改造难度 SQL 标准 结合在PostgreSQL中的实现综合考虑全局临时表特点 大量用户反馈 80%的 oracle 改造评估报告中 改
2、造难度 业务需要每个会话不断创建的临时表。SQL 标准 有对全局临时表清晰的定义 各数据库产品没有广泛遵守临时表特点 PostgreSQL 支持本地临时表 local temporary table 仅支持全局临时表语法,不支持全局临时表特性 会话退出后临时表定义和数据被删除MySQL 仅支持 CREATETEMPORARYTABLE 定义和数据会话间不共享全局临时表的特点CREATE GLOBAL TEMPORARY|TEMP TABLE table-namecolumn-definition,column-definition*ON COMMIT DELETE|PRESERVEROWS G
3、lobalThemetadataispersistentThemetadataisvisibletoallsessions ONCOMMITWhenONCOMMITDELETEROWSisspecifiedorisdefault,thenthedatadisappearswhenCOMMIThappens.全局临时表优势 表定义持久化且会话间共享 每个会话不需要单独进行临时表和相关索引的创建 不会由于频繁 DDL 造成系统表膨胀 不会频繁创建和删除底层文件Global temp table vs local temp tableglobaltemptablelocaltemptablenoda
4、tashareacrosssessionyesyesSupportOnCOMMIT(DELETEROWS/PRESERVEROWS)withsamebehavioryesyesuselocalbufferyesyessharetableschemaacrosssessionsyesnodefinitiondeletedafterasessioncompletesnoyesONCOMMITDROPnoyesLocal temp table 的实现每个会话使用自己的 my_temp_namespace,同名不同oidTemp table 强制归属到 my_temp_namespace不同会话的my
5、_temp_namespace 不可以相互访问会话退出时,删除整个 my_temp_namespace使用 local buffer全局临时表的实现 实现上的考虑 持久化的表定义 一份定义多份数据 多份数据多份统计信息 数据可见性 mvcc 异常清理 DDL全局临时表的实现catalogRELPERSISTENCEONCOMMITClauserelpages,reltuples,relfrozenxidpg_statisticstoraget$(backendid)_$(relfilenode)全局临时表的实现DDLDroptable如何删除多个会话中的localbuffer 和storage
6、fileCreateindex其他会话中已经有数据怎么办Altertable需要重写所有会话中的数据文件么Truncatetable如何做到可回滚Cluster/vacuumfull改变 relfilenode全局临时表的实现统计信息和 dmlrelpages,reltuplespg_statisticNoautovacuumVacuum/analyzePlanner每个会话中的数据有一份独立的统计信息全局临时表的实现数据可见性 mvccrelfrozenxid同一张表,不同