Oracle自治数据库和自动化运维新特性与新进展
墨墨导读:数2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英、领袖人物、技术专家、从业者和技术爱好者相聚北京,见证了个人的快速成长、技术的迭代进步、行业的蓬勃发展、生态的融合共赢,以及市场的风云变迁。
2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“DTC2020”获得!
张维照:云和恩墨技术总监,Oracle ACE-A。2006年起从事数据库管理工作,2009年起从事ORACLE DBA维护工作,十余年来专注于Database 技术和架构的研究,热衷于oracle数据库故障诊断、性能优化、内部原理、新特性的学习与分享,在BLOG分享大量的学习和案例经验。从事过多套TB级省级工商、医疗、交通、人社、政府、电信运营商等行业数据库项目从业经验。个人网站 www.anbob.com
近两年各类数据库百花齐放,国产及开源数据库崛起,数据库运维进入了新阶段,从上午的大会内容了解到国内大厂如腾讯、阿里、华为也在数据库中引入了自治和机器学习,很欣慰同样期待国产数据库在自治领域能够不断创新。
个人感觉商业数据库Oracle基于20多年在数据库自动化技术积累和多年基础设施(Exadata)发展,依然引领数据库智能化管理发展方向,2018年Oracle发布第一款Autonomous Database(自治数据库),实现数据库的完全自治,进入数据库自动驾驶时代。未来IT会成为一种真正的资源工具,像水、电一样方便的使用,按需申请,自动管理、自动优化、自动安全等对业务和开发带来更佳体验,无需关心后端数据库类型,亦或是不再区分OLAP和OLTP。解放过去ORACLE DBA们繁重重复的基础运维工作,转变角色做更有价值的内容。Oracle自治数据库应用目前还不是很多,本次我会分享自己在自治数据库了解及Oracle数据库在自动化运维方向的部分特性。
第一部分 Oracle自治数据库
为什么需要自治?
IT变化越来越复杂、规模越来越庞大、数据管理更佳复杂
业务对数据库的交付敏捷、灵活、容量、安全、可用性提出更高的要求
对数据库管理员能力要求更高
企业关注重点有IT转向业务
自治数据库基础构成
Oracle 企业数据库
Oracle自治数据库基于数据库企业版多个自动化技术,如RAC, Parallel、 ADG、TDE、inmemroy、Online Patch…Oracle 云基础设施
Oracle云和新一代软件定义的基础设施即服务架构适用于所有应用程序和数据库, Oracle Exadata Machine提供软硬件一体化,提供多种优化技术,计算层SQL负载下沉到存储节点、提供RDMA加大SQL的扩展能力策略驱动的自动化
自动化每个工作负载的最佳配置,云运维+机器学习,基于开发和运维经验利用机器学习和强大的知识库,实例自动优化和运维
Oracle自治数据库类型
Oracle提供了3种工作负载的数据库用于分析、交易、非关系型JSON场景的处理。
Oracle自治管理
Oracle自治数据库实现了数据库的快速交付,实现自动监控、备份、性能调估、数据库升级,对于数据库安全风险的在线修复、强制透明加密,数据的访问隔离,云服务将提供热补丁和实时调整,Bug等问题将得到及时的解决,极大可能地消除系统运行时的手动维护活动,分分钟实现一键DG创建和switchover切换演练,及透明应用转移Failover。
在自治数据中客户只关心数据:创建用户、秘钥, 数据,自动数据库提供全生命周期自动化管理,自治数据库后台并不是大量DBA而是AI, 内置MAA最佳实践、物理资源智能伸缩,自治数据库管理有用户定义策略维护任务实现更多自治。
公有云挑战
Oracle自治数据库离不开Oracle云运维,有些客户可能无法把数据存储于公有云,主要有以下原因:
法律法规、
延迟
数据库与应用集成
安全风险
混合云C@C
对于无法把数据库迁移致公有云的客户,Oracle推出了基于Exadata的混合云cloud@customer服务, Exadata存放在客户的数据库中心,同时配合远程的ORACLE云运维优势,组合Autonomous Database on Exadata Cloud@Customer环境,实现自治数据库的本地化部署。
无公网暴露, 本地只需要打开TCP/443出站firewall规则
VPN安全加密
数据存在本地,公有云无客户数据
客户数据强制透明加密
自治时代DBA
云在很大程度上接管了系统DBA的功能,并使云中许多功能自动化,DBA正在从系统DBA角色转移到更多以应用程序为中心(App DBA)的职责。同时也意味着DBA工作范围的扩大,正如当Oracle Exadata出现时,DBA角色与系统管理员和存储管理员的角色的融合。众多的琐碎的数据库创建部署和维护任务(如监视,错误检查,定期备份/恢复,打补丁…)将不再需要。转型做领导看的见的能给企业带来价值的工作中,如架构设计、应用优化、数据生命周期管理、 数据科学等。同样对于一些场景,自治能解决问题但无法知道问题根本原因,是无法完全替代高级DBA的,云和自治数据库将释放出DBA的双手,一个DBA将轻松管理更多的数据库。相信未来几年不只是Oracle数据库, 其它国产数据库或云数据库都将引入自治改变传统DBA。
第二部分 Oracle自动化特性
Oracle数据库在近20年来在数据库自动化管理上不断创新,在性能、内存管理、健康分析、高可用、易用性投入大量的时间和新特性,并成熟稳定运行。如AWR, ASM,SPM,AUTO INDEX等广泛应用。
19c Automatic indexing
Oracle 19c引入了自动索引特性,好似一个系统专家在7*24小时分析SQL性能, 基于表列上的使用情况,以最小化影响的原则,利用oracle数据库里的特性,逐步自动创建索引,验证、性能管理,并实现长时间不使用索引的删除。
使用了哪些技术
Automatic SQL tuning sets
SQL Performance Analyzer
Index Visibility
Index Online Create
SQL Plan Management
Advanced COMPRESS
e.g.
create index ANBOB.SYS_AI_XXXXXX ON ANBOB.T1(ID) TABLESPACE USERS
UNUSABLE INVISIBLE AUTO COMPRESS ADVANCED LOW ONLINE;
自动索引创建 “debugging”
DBA[CDB]_AUTO_INDEX_VERIFICATIONS
— 列出自动索引的PLAN_HASH_VALUE,和BUFFER_GETS对比等DBA_AUTO_INDEX_IND_ACTIONS
– 列出索引创建的时间、SQL(create ,drop ,rebuild, visible)To trace file
update SMB$CONFIG set _AUTO_INDEX_TRACE=2
-- Or --
call dbms_auto_index_internal.configure(‘_AUTO_INDEX_TRACE’,2,true,true)
从数据库提供的view 查看自动索引的创建情况,前后性能的对比和语句。
自动索引创建的错误
DBA_ADVISOR_FINDINGS
JOIN DBA_ADVISOR_EXECUTIONS USING EXECUTION_NAME
Where type=‘ERROR’
数据库提供的view 查看自动索引的创建失败的原因。
自动索引删除
oracle默认不允许人为删除AI索引, 如果想不使用AI索引:
init参数或sql opt_param hint “_optimizer_use_auto_indexes”=OFF 关闭AUTO INDEX 功能 drop tablespace xxx(AI索引所在的表空间) including contents; 修改index基表 (不受支持的,不要在生产环境做)
Drop secondary indexes,用于手动清理表上的索引,可以删除pk,uk,fk外索引
SQL> exec sys.dbms_auto_index.drop_secondary_indexes('SCOTT','EMP');
19c Automatic Hugepage(No THP)
HugePage 是Linux平台上oracle最佳实践建议的配置,USE_LARGE_PAGES是Oracle共享内存使用大页相关的参数。
USE_LARGE_PAGES有效值
True: 默认值,如果操作系统分配hugepage可用,尝试使用hugepage
False: 不使用hugepage
Only: 如是hugepage不能用于整个实例所需要共享内存,将启动失败
Auto: 一种可能值,12.2 如果可能使用在启动时尝试调用linux kernel增加hugepages
Auto-only: auto+ only 19c引入,Exadata环境默认值
测试
[root@oel7db1 ~]# cat /proc/meminfo
MemTotal: 3765384 kB
MemFree: 3557852 kB
MemAvailable: 3623672 kB
Buffers: 2108 kB
Cached: 107400 kB
SwapCached: 0 kB
Shmem: 8704 kB
Slab: 28048 kB
SReclaimable: 15932 kB
PageTables: 4432 kB
...
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
2. 禁用AMM(AMM不支持hugepage), 配置use_large_pages=auto_only
SQL> alter system set use_large_pages=AUTO_ONLY scope=spfile;
System altered.
SQL> shut immediate;
SQL> startup mount
ORACLE instance started.
Total System Global Area 700445640 bytes
Fixed Size 9139144 bytes
Variable Size 419430400 bytes
Database Buffers 268435456 bytes
Redo Buffers 3440640 bytes
Database mounted.
3. 观察DB ALERT LOG,显示使用了HUGEPAGE
Starting ORACLE instance (normal) (OS id: 3567)
****************************************************
Sys-V shared memory will be used for creating SGA
****************************************************
DISM started, OS id=3579
*******************************************************Dump of system resources acquired for SHARED GLOBAL AREA (SGA)
Per process system memlock (soft) limit = 128G
Expected per process system memlock (soft) limit to lock
instance MAX SHARED GLOBAL AREA (SGA) into memory: 672M
Available system pagesizes:
4K, 2048K
Supported system pagesize(s):
PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
2048K 336 336 336 NONE
Reason for not supporting certain system pagesizes:
4K - Large pagesizes only
*******************************************************
已自动使用上了HUGEPAGES, 并且大小几乎是我们配置的SGA大小。
4. 检查OS
$cat /proc/meminfo
MemTotal: 3765384 kB
MemFree: 2246868 kB
MemAvailable: 2721796 kB
Buffers: 2108 kB
Cached: 515388 kB
Shmem: 8800 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 336
HugePages_Free: 3
HugePages_Rsvd: 3
HugePages_Surp: 0
Hugepagesize: 2048 kB
$sysctl -a|grep page
vm.hugepages_treat_as_movable = 0
vm.nr_hugepages = 336
vm.nr_hugepages_mempolicy = 336
vm.nr_overcommit_hugepages = 0
vm.page-cluster = 3
[oracle@oel7db1 dbs]$ cat /etc/sysctl.conf |grep page
[oracle@oel7db1 dbs]$
[oracle@oel7db1 ~]$ ps -ef|grep 3579|grep -v grep
root 3579 1 0 08:19 ? 00:00:00 ora_dism_anbob19c
[oracle@oel7db1 ~]$ ls -l `which oradism`
-rwsr-x--- 1 root oinstall 147848 Apr 17 2019 /u01/app/oracle/product/19.2.0/db_1/bin/oradism
只是通过修改数据库参数,OS内核自动修改了vm.nr_hugepages配置hugepage,但是并未改变参数文件/etc/sysctl.conf的配置,重启操作系统hugepage将会释放或只按/etc/sysctl.conf指定的大小。实际是有oradism 进程扩展了linux kenel 的hugepage个数,该进程是root的属主,原来是应用于SunOS平台的动态内存管理。另外如果启动时linux 预分配的hugepages够db实例使用,实例启动时也不会启动oradism。
20c Auto Machine Learning
我们正处于机器学习应用程序引领的一场革命的中间,机器学习+大数据创造无限可能。成功的机器学习应用不是拥有最好的算法,而是拥有更多的数据!
借助Oracle机器学习,Oracle可以将算法转移到数据中。Oracle在数据所在的数据库内运行机器学习。这种方法最大程度地减少或消除了数据移动,实现了可伸缩性,保留了数据安全性,并加快了模型部署时间。Oracle提供了机器学习算法的并行数据库内实现,并与领先的开源环境R和Python集成。Oracle机器学习可提供企业规模的数据科学项目所需的性能,可伸缩性和自动化,包括本地部署和云计算。
Oracle Python机器学习(OML4Py)引入了一项新功能,称为AutoML,该功能包括自动模型选择,功能选择和超参数调整。AutoML采用元学习或使用机器学习来指导机器学习过程。“自动模型选择”可识别可实现最高模型质量并能够更快找到最佳模型的算法。“自动特征选择”通过识别对指定分类或回归目标最具预测性的特征来减少特征数量。“自动调参”避免了手动或详尽的搜索技术,这可以显着提高模型的准确性,同时使繁琐的工作不再需要人工探索。
自动化机器学习是Oracle Advanced Analytics中的一项新功能,它可以自动执行这些步骤,从而以快速且可扩展的方式生成准确的模型。这种自动化不仅提高了数据科学家的工作效率,而且在AutoML的情况下减少了总体计算机时间,而且还使非专业用户可以利用机器学习,不需要了解机器学习过程的各个方面。
小结
多年来,Oracle已将数据库演化为“聚合数据库”,数据科学是一项团队运动,因此Oracle机器学习支持SQL(OML4SQL),R集成(OML4R)和(即将推出)Python集成(OML4Py)。Oracle机器学习还通过Oracle自治数据库和Oracle Data Miner的拖放式UI(SQL Developer扩展)提供了Oracle Machine Learning Notebooks (基于Zeppelin)。嵌入式Python执行,可从SQL部署Python脚本。借助Oracle的融合数据库和30多种嵌入式机器学习算法,您可以更轻松地在整个企业中分发新的见解和预测,甚至可以构建“预测性”应用程序。
墨天轮原文链接:https://www.modb.pro/db/41690
PPT下载:https://www.modb.pro/doc/6902
视频回放:https://www.modb.pro/video/3091(复制到浏览器中打开或者点击“阅读原文”)