使用数据共享工具排除错误

本章提供了有关导致性能下降的问题以及如何对其进行故障排除的指导。

主题:

实时共享功能性能低下

随着 ECPU 数量的增加,在运行复杂查询时,数据共享工具中实时共享功能的性能是否有所提高?

否,它不。在这种情况下,您需要使用 Data Studio 配置并行度 (Degree Of Parallelism,DOP) ,以提高复杂运行查询的性能。

使用 Data Studio 配置并行度 (Degree of Parallelism,DOP)

当 Database Actions 实例的实时共享功能在 ECPU 增加值上运行时,默认情况下,复杂正在运行的查询的性能不会提高。

可以使用 DOP 选项来提高正在运行的复杂查询的性能。DOP 为每个并行计划执行设置用于运行单个语句的处理器数。本节介绍如何使用 Data Studio 的实时共享功能在 Autonomous AI Database 中配置 degree of parallelism (DOP) 配置选项。

在此示例中,您将使用 Live 共享功能和未压缩大小为 1TB 的共享表。

在开始之前,您需要考虑以下几点:
  • 配置 DOP 值的选项只能由 admin 完成。
先决条件:
  • 以管理员身份登录到 Database Actions 实例,然后在管理下,选择设置 Resource Management 规则
  • 请注意默认并发值DOP
要使用 Data Studio 配置并行度以提高复杂运行查询的性能,您将:
  • 创建共享作为提供程序。
  • 将共享作为使用者使用,并在共享资源之上创建外部查询,以记录查询执行时间。
  • 以提供者和使用者的身份将 ECPU 增加到大于当前值的值,并记录查询执行时间。
  • 配置 MEDIUM 使用者组的 DOP 值。
  • 使用相同的共享资源并记录同一表的查询执行时间。

注意:

您必须将 ECPU 计数和 DOP 值配置为具有 ADMIN 特权的 provider
在 Database Actions 启动板上,单击选择器,然后从 Data Studio 工具套件中选择数据共享工具。
  1. 创建共享作为提供程序。
    1. 单击 Provide Shares(提供共享资源)并选择 +Create Share(+ 创建共享资源)
    2. 在 "Create Share"(创建共享)向导的 "General"(常规)选项卡的 Name(名称)字段中,输入共享的名称。例如: TEST



      说明字段中,输入您共享数据的说明。此字段是可选的。

      选择下一步以转到“发布详细信息”选项卡。

    3. 在向导的“发布详细信息表”选项卡中,选择 SHARE LIVE DATA USING DIRECT CONNECTION



      单击下一步

    4. 在向导的选择表选项卡上,从下拉菜单中选择方案,然后从可用表拖放 CUSTOMER 表。



      注意:

      在本示例中,我们将共享一个名为 Customer 的大小较大的单个表。

      单击下一步以转至“创建共享向导”的“收件人”选项卡。

    5. 在“创建共享”向导的“收件人”选项卡上,从下拉列表中选择 MY_COMPARTMENT

    6. 选择创建以创建共享资源。



  2. 将共享作为使用者使用,并在共享资源之上创建外部查询,以记录查询执行时间。
    1. 将共享资源创建为提供程序后,您将使用提供程序共享的数据。

      有关详细信息,请参见 Consume Share

    2. 消费者身份登录以订阅数据共享提供程序并访问共享中的数据。
    3. 在数据共享工具的提供商和消费者页面上,单击 CONSUME SHARE 磁贴以显示冲减共享页面。
    4. 单击订阅共享提供方下拉列表,然后单击订阅实时共享提供方选项。



    5. 在 "Share Provider Details"(共享提供程序详细信息)下,选择 Provider Name(提供程序名称)。在此示例中,TPUSER 是提供程序的名称。



    6. 在“订阅共享”提供程序设置向导页的添加共享资源面板上,单击可用共享资源部分中的 TEST ,然后单击 (>) 图标。



    7. 该工具将共享资源添加到 Selected Shares 部分。单击订阅
    8. 已成功创建 TPUSER 共享提供方,此时将显示信息性消息。系统会将您定向到加载数据页,其中选择了共享选项卡。



    9. 展开 TESTSHARE 数据共享节点以显示其中的对象。拖放 TPUSER.CUSTOMER 共享表以将其添加到数据加载作业。
    10. 共享表将添加到数据链接作业中。运行此作业时,将在与您共享的 CUSTOMER 表之上创建一个新的 CUSTOMER 视图。
    11. 单击启动。此时将显示 Start Link from Cloud Store 对话框。单击运行。作业成功完成时,将显示链接图标。将创建 CUSTOMER 视图。
    12. 单击数据库操作 | 数据共享标题。在 Database Actions | Launchpad 上,单击 Development(开发)选项卡,然后单击 SQL 选项卡以显示 SQL 工作表。



    13. CUSTOMER 表拖放到 SQL 工作表区域。
    14. 此时将显示一个对话框,其中提供了可用的插入类型。
    15. 依次单击选择应用





    16. 单击运行。您可以查看显示在工作表中的自动生成的查询。



    17. 请注意“查询结果”选项卡下显示的执行时间字段中的查询执行时间。
  3. 以提供者和使用者的身份增加 ECPU 并记录查询执行时间。
    1. 从 OCI 控制台中,以提供商消费者身份增加 Autonomous AI Database 实例的 ECPU。

      注意:

      确保尚未启用自动缩放。

      在本示例中,我们将 ECPU 计数增加到 32 。您可以将 ECPU 计数提升到您选择的任何值。

    2. 重复使用相同的 CUSTOMER 共享资源并计算查询执行时间。查询表的时间不会有任何变化。
  4. 配置 MEDIUM 使用者组的 DOP 值。
    1. 以具有 ADMIN 权限的使用者身份登录到数据库操作实例。
    2. 单击选择器,然后在管理下选择设置 Resource Management 规则

    3. MEDIUM 使用者组的 Concurrency limit 减小为 8 ,然后单击 Save Changes 。降低并发限制会增加 DOP。



    注意:

    在此步骤中设置的并发性限制应小于您在先决条件中记录的默认值。
  5. 后续步骤 - 配置并行度选项后,重复使用共享资源的过程,在共享资源上创建外部查询以记录查询执行时间。

    您将看到查询执行时间的值已减少。

同一复杂 SQL 查询的性能提高会立即发生,而无需重新启动服务器。

共享表查询尝试失败

问题:尝试查询共享表失败,并显示错误,指示 Delta 表功能不受支持。

可能原因:共享表使用 Deletion Vectors ,这是一个 Delta 数据湖功能。Autonomous AI Database Delta Sharing 使用者不支持删除向量 (DV)。

解决方法:让提供程序从表中删除 DV。

HTTP 403 因远程 IP 允许列表而未经授权

问题:访问共享数据或下载远程数据失败,并显示 HTTP 403 - Unauthorized 错误。

可能原因:远程服务(例如 Azure Blob Storage 或其他外部端点)配置有源 IP 允许列表,该列表不包括 Autonomous AI Database 使用的公共出站 IP 地址。

注意:

请勿使用以下查询来标识出站 IP 地址:

SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual;

此查询返回当前会话的客户机 IP 地址,而不是外部服务看到的出站 IP 地址。

解决方案:通过向返回调用方 IP 地址的公共端点发出 HTTPS 请求来标识 Autonomous AI Database 出站 IP 地址。然后,要求远程服务管理员将该 IP 地址添加到允许列表中。

  1. 授予对测试端点的访问权限。

    BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host       => 'httpbin.org',
        lower_port => 443,
        upper_port => 443,
        ace        => xs$ace_type(
                        privilege_list => xs$name_list('http'),
                        principal_name => USER,
                        principal_type => xs_acl.ptype_db));
    END;
    /
  2. Autonomous AI Database 中查询端点。

    SET SERVEROUTPUT ON
    
    DECLARE
      resp UTL_HTTP.resp;
      line VARCHAR2(32767);
    BEGIN
      resp := UTL_HTTP.begin_request('https://httpbin.org/ip');
      resp := UTL_HTTP.get_response(resp);
      UTL_HTTP.read_line(resp, line, TRUE);
      DBMS_OUTPUT.put_line('Autonomous Database outbound IP = ' || line);
      UTL_HTTP.end_response(resp);
    END;
    /
    
    响应包含外部服务看到的公共 IP 地址。例如:
    {{{"origin":"150.136.133.92"}}}
  3. 将 IP 地址添加到远程允许列表中。

    更新防火墙、存储账户网络规则或合作伙伴端允许列表以包括 IP 地址。

更新允许列表后,重试数据访问或数据共享操作。