在专用 Exadata 基础结构上的自治 AI 数据库上使用 SQL 跟踪
您可以将 SQL 跟踪与专用 Exadata 基础结构上的自治 AI 数据库结合使用,以帮助您确定过多数据库工作负载的来源,例如应用中的高负载 SQL 语句。
关于 SQL 跟踪
当应用程序操作花费的时间比预期长时,获取在此操作过程中执行的所有 SQL 语句的跟踪信息,以及该 SQL 语句在语法分析、执行和提取阶段花费的时间等详细信息,将有助于您确定和解决性能问题的原因。您可以在自治 AI 数据库上使用 SQL 跟踪来实现此目的。
在自治 AI 数据库中,SQL 跟踪默认处于禁用状态。您必须启用它才能开始收集 SQL 跟踪数据。要跟踪 SQL 语句,请以 ADMIN 用户身份执行以下任务:
-
首先配置数据库以保存 SQL Trace 文件。有关更多信息,请参见 Configure SQL Tracing on Autonomous AI Database 。
-
然后,启用 SQL 跟踪。请参阅在自治 AI 数据库上启用 SQL 跟踪。
注:启用 SQL 跟踪可能会降低启用跟踪收集时的会话应用程序性能。由于收集和保存跟踪数据的开销,预计会产生这种性能影响。
-
要停止收集 SQL 跟踪数据,必须禁用 SQL 跟踪。请参见 Disable SQL Tracing 。
-
禁用 SQL 跟踪时,在启用跟踪的情况下运行会话时收集的跟踪数据将写入会话中的
SESSION_CLOUD_TRACE视图和存储桶中的跟踪文件,该文件是在设置 SQL 跟踪时配置的。有两个选项可查看跟踪数据:-
查看和分析保存到云对象存储的跟踪文件中的 SQL 跟踪数据。有关更多信息,请参见 View Trace File Saved to Cloud Object Store on Autonomous AI Database 。
-
查看和分析保存到视图
SESSION_CLOUD_TRACE的 SQL Trace 数据。有关更多信息,请参见 View Trace Data in SESSION_CLOUD_TRACE View on Autonomous AI Database 。
-
在自治 AI 数据库上配置 SQL 跟踪
要为自治 AI 数据库配置 SQL 跟踪,请执行以下操作:
-
创建存储桶以在云对象存储中存储跟踪文件。
要保存 SQL 跟踪文件,存储桶可以位于自治 AI 数据库支持的任何云对象存储中。例如,要在 Oracle Cloud Infrastructure Object Storage 中创建存储桶,请参阅创建存储桶。
提示:在 Oracle Cloud Infrastructure Object Storage 中创建存储桶时,请确保选择标准作为存储层,因为仅在标准存储层中创建的存储桶支持 SQL 跟踪文件。有关标准对象存储层的信息,请参阅了解存储层。
-
使用
DBMS_CLOUD.CREATE_CREDENTIAL为您的云对象存储账户创建身份证明。例如:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'DEF_CRED_NAME', username => 'adb_user@example.com', password => 'password' );END; /有关不同对象存储服务的
username和password参数的参数的详细信息,请参见 CREATE_CREDENTIAL Procedure 。 -
设置初始化参数以指定用于 SQL 跟踪文件的存储桶的云对象存储 URL,并指定用于访问云对象存储的身份证明。
-
设置数据库属性
DEFAULT_LOGGING_BUCKET以指定云对象存储上的日志记录存储桶。例如,如果您使用 Oracle Cloud Infrastructure (OCI) 对象存储创建存储桶:
SET DEFINE OFF; ALTER DATABASE PROPERTY SET DEFAULT_LOGGING_BUCKET = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucket_name/o/';其中
namespace-string是 OCI 对象存储名称空间,bucket_name 是您之前创建的存储桶的名称。有关详细信息,请参阅了解对象存储名称空间。有关区域列表,请参见 Regions and Availability Domain 。
用于 SQL 跟踪文件的云对象存储可以是自治 AI 数据库支持的任何云对象存储。
-
将数据库属性
DEFAULT_CREDENTIAL设置为在步骤 2 中创建的身份证明。例如:
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME';需要包括具有身份证明的方案名称。在此示例中,方案为
ADMIN。
-
在自治 AI 数据库上启用 SQL 跟踪
注:启用 SQL 跟踪可能会降低启用跟踪收集时的会话应用程序性能。由于收集和保存跟踪数据的开销,预计会产生这种性能影响。
要为数据库会话启用 SQL 跟踪,请执行以下操作:
-
(可选)为应用程序设置客户机标识符。此步骤是可选的,但建议使用此步骤。将跟踪文件写入云对象存储时,SQL 跟踪使用客户机标识符作为跟踪文件名的组件。
例如:
BEGIN DBMS_SESSION.SET_IDENTIFIER('sqlt_test'); END; / -
(可选)为应用程序设置模块名称。此步骤是可选的,但建议使用此步骤。将跟踪文件写入云对象存储时,SQL 跟踪使用模块名称作为跟踪文件名的组件。
例如:
BEGIN DBMS_APPLICATION_INFO.SET_MODULE('modname', null); END; / -
启用 SQL Trace 工具。
ALTER SESSION SET SQL_TRACE = TRUE; -
运行工作量。
此步骤涉及运行整个应用程序或应用程序的特定部分。在数据库会话中运行工作量时,将收集 SQL 跟踪数据。
-
禁用“SQL 跟踪”。
禁用 SQL 跟踪时,会话收集的数据将写入会话中的表以及设置 SQL 跟踪时配置的存储桶中的跟踪文件。
禁用 SQL 追踪
要禁用 SQL 跟踪,请执行以下操作:
-
禁用 SQL Trace 工具。
ALTER SESSION SET SQL_TRACE = FALSE; -
(可选)根据您的环境需要,您可能需要重置数据库属性
DEFAULT_LOGGING_BUCKET以清除云对象存储上日志记录存储桶的值。例如:
ALTER DATABASE PROPERTY SET DEFAULT_LOGGING_BUCKET = '';
禁用 SQL 跟踪时,在启用跟踪的情况下运行会话时收集的跟踪数据将复制到表,并发送到云对象存储上的跟踪文件。
在自治 AI 数据库上查看保存到云对象存储的跟踪文件
您可以使用 SQL 跟踪文件数据来分析自治 AI 数据库上的应用性能。在数据库会话中禁用 SQL 跟踪时,数据将写入配置有 DEFAULT_LOGGING_BUCKET 的云对象存储存储桶。
SQL Trace 工具按以下格式将会话中收集的跟踪数据写入云对象存储:
default_logging_bucket/sqltrace/clientID/moduleName/sqltrace_numID1_numID2.trc
文件名的组成部分包括:
-
default_logging_bucket :是
DEFAULT_LOGGING_BUCKET数据库属性的值。有关更多信息,请参见 Configure SQL Tracing on Autonomous AI Database 。 -
clientID:是客户端标识符。有关详细信息,请参阅在自治 AI 数据库上启用 SQL 跟踪。 -
moduleName:是模块名称。有关详细信息,请参阅在自治 AI 数据库上启用 SQL 跟踪。 -
numID1_numID2:是 SQL Trace 工具提供的两个标识符。numID1和numID2数字值使用跟踪并在云对象存储中的同一存储桶中创建跟踪文件,唯一地区分每个跟踪文件名与其他会话。当数据库服务支持并行并且会话运行并行查询时,SQL Trace 工具可以生成具有不同
numID1和numID2值的多个跟踪文件。注:在同一会话中多次启用和禁用 SQL 跟踪时,每次跟踪迭代都会在云对象存储中生成单独的跟踪文件。为了避免覆盖之前在会话中生成的跟踪,随后生成的文件遵循相同的命名惯例,并将数字后缀添加到跟踪文件名中。此数字后缀以数字 1 开头,并在此后的每个跟踪迭代中递增 1。
例如,将客户机标识符设置为 "sql_test",将模块名称设置为 "modname" 时,以下是生成的跟踪文件名样例:
sqltrace/sqlt_test/modname/sqltrace_5415_56432.trc
可以运行 TKPROF 将跟踪文件转换为可读输出文件。
-
将跟踪文件从对象存储复制到本地系统。
-
导航到保存跟踪文件的目录。
-
使用以下语法从操作系统提示符运行
TKPROF实用程序:tkprof filename1 filename2 [waits=yes|no] [sort=option] [print=n] [aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table] [explain=user/password] [record=filename4] [width=n]输入和输出文件是唯一的必需参数。
-
要查看联机帮助,请调用不带参数的
TKPROF。有关使用
TKPROF实用程序的信息,请参阅 Oracle Database 19c SQL Tuning Guide 或 Oracle Database 26ai SQL Tuning Guide 中的 Tools for End-to-End Application Tracing 。
在自治 AI 数据库上的 SESSION_CLOUD_TRACE 视图中查看跟踪数据
启用 SQL 跟踪时,在启用了跟踪的会话的 SESSION_CLOUD_TRACE 视图中会提供保存到云对象存储上的跟踪文件的相同跟踪信息。
仍在数据库会话中时,可以在 SESSION_CLOUD_TRACE 视图中查看 SQL 跟踪数据。SESSION_CLOUD_TRACE 视图包含两列:ROW_NUMBER 和 TRACE。
DESC SESSION_CLOUD_TRACE
Name Null? Type
---------- ----- ------------------------------
ROW_NUMBER NUMBER
TRACE VARCHAR2(32767)
ROW_NUMBER 指定在 TRACE 列中找到的跟踪数据的排序。写入跟踪文件的每一行跟踪输出将成为表中的一行,可在 TRACE 列中找到。
对会话禁用 SQL 跟踪后,可以对 SESSION_CLOUD_TRACE 视图运行查询。
例如:
SELECT trace FROM SESSION_CLOUD_TRACE ORDERBY row_number;
SESSION_CLOUD_TRACE 中的数据在会话期间持续存在。注销或关闭会话后,数据将不再可用。
如果在同一会话中多次启用和禁用 SQL Trace,则 SESSION_CLOUD_TRACE 会累计显示所有迭代的跟踪数据。因此,在之前禁用跟踪之后在会话中重新启用跟踪不会删除由早期迭代生成的跟踪数据。