专用 Exadata 基础结构上的自治 AI 数据库中的高性能功能
本文介绍了专用 Exadata 基础结构上的自治 AI 数据库中的主要性能优化功能。
请注意,在本节中,术语“您”广泛用于指组织中负责执行某些任务的任何用户。在某些情况下,这是应用程序 DBA,在另一些情况下,它是应用程序开发人员。
自治 AI 数据库包含多项功能,可自动监视、分析和优化数据库的性能。有关 Oracle Autonomous AI Database 的 SQL 优化和性能管理功能的完整列表以及如何使用这些功能的说明,请参阅 Oracle Database 19c SQL Tuning Guide 或 Oracle Database 26ai SQL Tuning Guide 。
您可以查看下面描述的自治 AI 数据库的主要性能优化功能的广泛分类。
预定义的数据库服务
应用如何连接到数据库以及如何对数据库进行 SQL 调用编码,从而确定应用事务处理和报告操作的整体性能。
与自治 AI 数据库建立连接时,应用与数据库的交互性能取决于您连接到哪个数据库服务。自治 AI 数据库提供多组数据库服务,供您连接到数据库时使用。这些连接服务旨在支持不同类型的数据库操作,如 Predefined Database Service Names for Autonomous AI Databases 中所述。
提示:确保查看预定义数据库服务的关键特征,以及根据这些特征比较不同数据库服务集的表,以决定哪个数据库服务更适合应用程序的性能要求。
连接池
与自治 AI 数据库建立连接时,您可以使用连接池来减少重复创建和销毁单个连接的性能开销。这是对应用程序与数据库交互的性能有重大影响的另一个因素。
通常,只有在设计或增强应用程序以提供持续可用性时才会考虑使用连接池。但是,使用连接池而不是单个连接几乎可以使每个事务处理应用程序受益。连接池具有以下优点:
-
减少创建新连接对象的次数。
-
提升连接对象重用。
-
加快获取连接的进程。
-
控制用于维护连接的资源量。
-
减少手动管理连接对象所需的编码工作量。
特殊用途连接功能
Oracle Net Services(以前称为 SQL*Net)提供了各种连接功能,可以提高特定连接方案的性能。Oracle Database 19c Net Services Administrator’s Guide 或 Oracle Database 26ai Net Services Administrator’s Guide 中介绍了这些功能。
-
托管标记是这样一种功能,在某些事务处理应用程序中非常有用。如果您的应用多次连接到同一数据库服务,则托管标记允许将所有此类连接定向到同一数据库实例,从而绕过通常在连接数据库端执行的负载平衡处理。有关详细信息,请参阅 Oracle Database 19c 或 Oracle Database 26ai 中的 COLOCATION_TAG of Client Connections 。
-
共享服务器配置是自治 AI 数据库支持的另一项功能,用于维护设计时不使用连接池的传统应用程序。共享服务器体系结构使数据库服务器能够允许许多客户机进程共享很少的服务器进程。这会增加应用程序可以支持的用户数。对此类传统应用使用共享服务器体系结构,无需对应用本身进行任何更改即可进行扩展。
您可以在预配自治容器数据库 (Autonomous Container Database,ACD) 时启用共享服务器连接,此设置适用于在其中创建的所有数据库。有关说明,请参阅创建自治容器数据库。
有关共享服务器(包括会话多路复用等功能)的更多详细信息,另请参阅 Oracle Database 19c Net Services Administrator’s Guide 或 Oracle Database 26ai Net Services Administrator’s Guide 。
为自治容器数据库启用共享服务器连接后,无需更改连接字符串。默认配置设置为 "Dedicated"(专用)。
注:对于在启用了共享服务器的自治容器数据库下创建的特定自治 AI 数据库,无法对在启用了共享服务器的自治容器数据库下创建的自治 AI 数据库禁用共享服务器,也无法使用专用连接。
SQL 性能优化功能
出色的应用程序从编写良好的 SQL 开始。Oracle Autonomous AI Database 提供多种功能,可帮助您构建高性能应用并验证 SQL 和 PL/SQL 代码。下面列出了其中一些功能:
-
自动索引
-
优化程序统计信息和提示
-
自动解决 SQL 计划回归
-
自动隔离失控的 SQL 语句
-
SQL 计划管理
-
SQL 调优集
-
SQL 跟踪
在开发应用程序时,您可以使用 Oracle Database Actions(内置在自治 AI 数据库中)和 Oracle SQL Developer(在开发系统上安装的免费应用程序)提供的 SQL 工作表,快速了解这些功能如何影响编写的 SQL 代码,从而改进代码。
SQL 跟踪
当应用程序操作花费的时间比预期长时,获取在此操作过程中执行的所有 SQL 语句的跟踪信息,以及该 SQL 语句在语法分析、执行和提取阶段花费的时间等详细信息,将有助于您确定和解决性能问题的原因。您可以在自治 AI 数据库上使用 SQL 跟踪来实现此目的。
在自治 AI 数据库中,SQL 跟踪默认处于禁用状态。您必须启用它才能开始收集 SQL 跟踪数据。有关启用和使用 SQL 跟踪的详细说明,请参阅在自治 AI 数据库上使用 SQL 跟踪。
优化程序统计信息
自治 AI 数据库会自动收集优化程序统计信息,这样您就不必手动执行此任务,这有助于确保统计信息是最新的。自动统计信息收集在自治 AI 数据库中启用,并在标准维护窗口中运行。
注:有关维护窗口时间和自动优化程序统计信息收集的详情,请参阅 Oracle Database 19c Administrator’s Guide 或 Oracle Database 26ai Administrator’s Guide 。有关优化程序统计信息的更多信息,请参阅 Oracle Database 19c SQL Tuning Guide 或 Oracle Database 26ai SQL Tuning Guide 。
优化程序提示
优化程序提示是 SQL 语句中的特殊注释,用于将指令传递给优化程序。优化程序使用提示为语句选择执行计划,除非被某些条件阻止。
优化程序的自治 AI 数据库默认值和 PARALLEL 提示因工作负载而异:
-
Autonomous AI Lakehouse:自治 AI Database with Data Warehouse 默认在 SQL 语句中忽略优化程序提示和
PARALLEL提示。如果应用程序依赖提示,则可以通过使用
ALTER SESSION或ALTER SYSTEM在会话或系统级别将参数OPTIMIZER_IGNORE_HINTS设置为FALSE来启用优化程序提示。例如,以下命令在会话中启用提示:
ALTER SESSION SET OPTIMIZER_IGNORE_HINTS=FALSE;您还可以通过在会话或系统级别使用
ALTER SESSION或ALTER SYSTEM将OPTIMIZER_IGNORE_PARALLEL_HINTS设置为FALSE,在 SQL 语句中启用PARALLEL提示。例如,以下命令在会话中启用
PARALLEL提示:ALTER SESSION SET OPTIMIZER_IGNORE_PARALLEL_HINTS=FALSE; -
自治 AI 事务处理:自治 AI 数据库荣誉优化程序默认在 SQL 语句中提供提示和
PARALLEL提示。通过在会话或系统级别使用
ALTER SESSION或ALTER SYSTEM将参数OPTIMIZER_IGNORE_HINTS设置为TRUE,可以禁用优化程序提示。例如,以下命令禁用会话中的提示:
ALTER SESSION SET OPTIMIZER_IGNORE_HINTS=TRUE;还可以通过在会话或系统级别使用
ALTER SESSION或ALTER SYSTEM将OPTIMIZER_IGNORE_PARALLEL_HINTS设置为TRUE来禁用 SQL 语句中的PARALLEL提示。例如,以下命令在会话中启用
PARALLEL提示:ALTER SESSION SET OPTIMIZER_IGNORE_PARALLEL_HINTS=TRUE;
自动索引
自动索引可自动执行自治 AI 数据库中的索引管理任务。默认情况下,自治 AI 数据库中的自动索引功能处于禁用状态。
手动创建索引需要深入了解数据模型、应用和数据分布。过去,DBA 负责选择要创建的索引,有时 DBA 不会随着条件的变化而修改其选择或维护索引。因此,改进的机会丧失了,使用不必要的指数可能成为履约责任。
Autonomous AI Database 中的自动索引功能可监视应用工作负载,并自动创建和维护索引。
提示:对于演示这些说明的“试用”替代方案,请在 Oracle Autonomous AI Database Dedicated for Developers and Database Users Workshop 中运行 Lab 14:Automatic Indexing 。
启用自动索引
-
使用
DBMS_AUTO_INDEX.CONFIGURE过程启用自动索引。例如,执行下面的语句可在数据库中启用自动索引,并将任何新的自动索引创建为可见索引,以便可以在 SQL 语句中使用这些索引。EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT'); -
使用
DBMS_AUTO_INDEX软件包可以报告自动任务并设置自动索引首选项。注:注:启用自动索引时,默认情况下会启用自动索引的索引压缩。
禁用自动索引
使用 DBMS_AUTO_INDEX.CONFIGURE 过程可禁用自动索引。例如,执行下面的语句将禁用数据库中的自动索引,以免创建新的自动索引。但是,现有的自动索引仍处于启用状态。
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');
有关详细信息,请参阅 Oracle Database 19c Administrator’s Guide 或 Oracle Database 26ai Administrator’s Guide 中的 Managing Auto Indexes 。
快速摄取
快速摄取可优化数据库中的高频率单行数据插入的处理。快速摄取使用大型池在将插入写入磁盘之前缓冲插入,以提高数据插入性能。
快速查询的目的是支持生成大量信息数据的应用程序,这些数据在聚合中具有重要价值,但这并不一定需要完整的 ACID 保证。物联网 (Internet of Things,IoT) 中的许多应用都具有快速的“触发和遗忘”类型工作负载,例如传感器数据、智能电表数据甚至交通摄像头。对于这些应用程序,数据可能会以大量形式收集并写入数据库,以供日后分析。
快速摄取与通常的 Oracle AI Database 事务处理非常不同,在事务处理中记录数据,并且一旦“写入”数据库(即提交)就不会丢失数据。为了实现最大摄取吞吐量,会绕过普通的 Oracle 事务处理机制,应用程序有责任检查是否所有数据都已写入数据库。已添加特殊 API,可以调用这些 API 来检查是否已将数据写入数据库。
有关快速摄取的概述以及使用此功能所涉及的步骤,请参阅 Using Fast Ingest in Oracle Database 19c Performance Tuning Guide 或 Oracle Database 26ai Performance Tuning Guide 。
要将快速摄取与自治 AI 数据库结合使用,您必须:
-
启用优化程序以使用提示:根据需要,在会话或系统级别将
optimizer_ignore_hints参数设置为FALSE。根据您的自治 AI 数据库工作负载类型,默认情况下,
optimizer_ignore_hints可以在系统级别设置为FALSE。有关详细信息,请参阅优化程序统计信息。 -
创建用于快速摄取的表:有关表符合快速摄取条件的限制,请参阅 Oracle Database 19c Performance Tuning Guide 或 Oracle Database 26ai Performance Tuning Guide (具有指定特性的表不能使用快速摄取)。
使用 Oracle Scheduler 预定义的作业类
自治 AI 数据库包括要与 Oracle Scheduler 一起使用的预定义 job_class 值。通过这些作业类,可以将具有共同特征和行为的作业分组到更大的实体中,以便通过控制分配给每个类的资源来在这些类之间确定优先级。
通过预定义的作业类,您可以确保关键作业具有优先级和足够的资源来完成。例如,对于要加载数据仓库的关键项目,您可以将所有数据仓库作业组合到一个类中,并通过分配高百分比的可用资源来将其优先于其他作业。您还可以为作业类中的作业分配相对优先级。
预定义的 job_class 值 TPURGENT、TP、HIGH、MEDIUM 和 LOW 映射到相应的使用者组。这些作业类允许您使用 DBMS_SCHEDULER.CREATE_JOB 指定作业运行的使用者组。
DBMS_SCHEDULER.CREATE_JOB 过程支持自治 AI 数据库中 job_type 参数的 PLSQL_BLOCK 和 STORED_PROCEDURE 作业类型。
例如:使用以下命令创建要在 HIGH 使用者组中运行的单个常规作业:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'update_sales',
job_type => 'STORED_PROCEDURE',
job_action => 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY',
start_date => '28-APR-19 07.00.00 PM Australia/Sydney',
repeat_interval => 'FREQ=DAILY;INTERVAL=2',
end_date => '20-NOV-19 07.00.00 PM Australia/Sydney',
auto_drop => FALSE,
job_class => 'HIGH',
comments => 'My new job');
END;
/
Oracle Scheduler 的注释:
-
要对特定角色或特权使用
DBMS_SCHEDULER.CREATE_JOB,可能需要其他授权。ADMIN用户和具有DWROLE的用户具有所需的CREATE SESSION和CREATE JOB权限。如果用户没有DWROLE,则需要为CREATE SESSION和CREATE JOB特权授予权限。 -
对于在自治 AI 数据库上运行的 Oracle Scheduler 作业,将忽略
instance_id作业属性。
有关 Oracle Scheduler 和 DBMS_SCHEDULER.CREATE_JOB 的更多信息,请参见 Scheduling Jobs with Oracle Scheduler in Oracle Database 19c or Oracle Database 26ai 。
有关作业属性的信息,请参阅 Oracle Database 19c 或 Oracle Database 26ai 中的 SET_ATTRIBUTE Procedure 。
性能监视和优化工具
诸如工作负载变化、应用和数据库服务器的资源限制,或者简单的网络瓶颈等几种情况会导致应用性能问题。Oracle 提供了各种工具来帮助您监视性能、诊断性能问题以及优化应用或数据库以解决问题。下面列出了其中一些:
| 工具 | 详细资料 |
|---|---|
| 性能中心 | Oracle Cloud Infrastructure (OCI) 控制台中提供的功能丰富的工具。Performance Hub 还内置了 Oracle Database Actions 和 Oracle Enterprise Manager。 有关更多详细信息,请参阅使用性能中心监视数据库性能。 |
| 自治 AI 数据库度量 | 自治 AI 数据库度量可帮助您衡量有用的定量数据,例如 CPU 和存储利用率、成功和失败的数据库登录次数以及连接尝试次数、数据库操作、SQL 查询和事务处理等。您可以使用度量数据来诊断自治 AI 数据库资源的问题并进行故障排除。 有关其先决条件、使用情况以及专用 Exadata 基础结构上自治 AI 数据库可用的度量列表等详细信息,请参阅监视具有自治 AI 数据库度量的数据库。 |
| 自动工作量资料档案库 (Automatic Workload Repository,AVR) 和自动数据库诊断监视器 (Automatic Database Diagnostic Monitor,ADDM) | 另外两个常用的工具是自动工作量资料档案库 (Automatic Workload Repository,AWR) 和自动数据库诊断监视器 (Automatic Database Diagnostic Monitor,ADDM)。 AWR 存储 Oracle 数据库的性能相关统计信息,而 ADDM 是一种诊断工具,可以定期分析 AWR 数据,查找任何性能问题的根本原因,提供更正问题的建议,并确定系统的非问题区域。由于 AWR 是历史性能数据的存储库,因此 ADDM 可以在事件发生后分析性能问题,这通常会节省重现问题的时间和资源。 有关使用这些工具的说明以及有关数据库性能监视和调优的详细信息,请参阅 Oracle Database 19c Performance Tuning Guide 或 Oracle Database 26ai Performance Tuning Guide 。 性能中心还提供 AWR 和 ADDM。有关详细信息,请参阅使用性能中心监视数据库性能。 有关数据库性能监视和调优的快速介绍,请参阅 Oracle Database 19c 2 Day + Performance Tuning Guide 或 Oracle Database 26ai 2 Day + Performance Tuning Guide 。 |