EVALUATE_DELETE_PERFORMANCE

针对潜在的 DELETEUPDATE 性能问题对投影进行评估。如果 Vertica 发现任何问题,则会发出警告消息。在评估多个投影时,EVALUATE_DELETE_PERFORMANCE 将返回最多十个有问题的投影,以及列出其发现的所有问题的表的名称。

有关解决删除和更新性能问题的信息,请参阅 优化 DELETE 和 UPDATE

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

EVALUATE_DELETE_PERFORMANCE ( ['[[database.]schema.]scope'] )

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

scope
指定要评估的投影,为以下之一:
  • [table.]projection
    评估 projection。例如:

    SELECT EVALUATE_DELETE_PERFORMANCE('store.store_orders_fact.store_orders_fact_b1');
    

  • 指定评估 table 的所有投影。例如:

    SELECT EVALUATE_DELETE_PERFORMANCE('store.store_orders_fact');
    

如果未提供实参,EVALUATE_DELETE_PERFORMANCE 将评估您可以访问的所有投影。根据数据库的大小,这可能会产生很大的开销。

特权

非超级用户:对锚表的 SELECT 权限

示例

EVALUATE_DELETE_PERFORMANCE 会针对潜在的 DELETE 和 UPDATE 性能问题对表 example 的所有投影进行评估。

=> create table example (A int, B int,C int);
CREATE TABLE
=> create projection one_sort (A,B,C) as (select A,B,C from example) order by A;
CREATE PROJECTION
=> create projection two_sort (A,B,C) as (select A,B,C from example) order by A,B;
CREATE PROJECTION
=> select evaluate_delete_performance('example');
            evaluate_delete_performance
---------------------------------------------------
 No projection delete performance concerns found.
(1 row)

上一示例表明,one_sort 和 two_sort 这两个投影不存在会引发 DELETE 性能降低的固有结构问题。但如果排序后的列不能唯一标识一行或小量行,则投影中包含的数据可能产生潜在删除问题。

在下面的示例中,Perl 用于通过嵌套的循环系列来为表填充数据:

  • 内部循环填充列 C.

  • 中间循环填充列 B

  • 外部循环填充列 A

结果为:列 A 仅包含三个非重复值(0、1 和 2),而列 B 在 20 和 0 之间缓慢变化,列 C 则在每行中均有变化:

=> \\! perl -e 'for ($i=0; $i<3; $i++) { for ($j=0; $j<21; $j++) { for ($k=0; $k<19; $k++) { printf "%d,%d,%d\n", $i,$j,$k;}}}' | /opt/vertica/bin/vsql -c "copy example from stdin delimiter ',' direct;"
Password:
=> select * from example;
 A | B  | C
---+----+----
 0 | 20 | 18
 0 | 20 | 17
 0 | 20 | 16
 0 | 20 | 15
 0 | 20 | 14
 0 | 20 | 13
 0 | 20 | 12
 0 | 20 | 11
 0 | 20 | 10
 0 | 20 |  9
 0 | 20 |  8
 0 | 20 |  7
 0 | 20 |  6
 0 | 20 |  5
 0 | 20 |  4
 0 | 20 |  3
 0 | 20 |  2
 0 | 20 |  1
 0 | 20 |  0
 0 | 19 | 18
 ...
 2 |  1 |  0
 2 |  0 | 18
 2 |  0 | 17
 2 |  0 | 16
 2 |  0 | 15
 2 |  0 | 14
 2 |  0 | 13
 2 |  0 | 12
 2 |  0 | 11
 2 |  0 | 10
 2 |  0 |  9
 2 |  0 |  8
 2 |  0 |  7
 2 |  0 |  6
 2 |  0 |  5
 2 |  0 |  4
 2 |  0 |  3
 2 |  0 |  2
 2 |  0 |  1
 2 |  0 |  0
=> SELECT COUNT (*) FROM example;
 COUNT
-------
  1197
(1 row)
=> SELECT COUNT (DISTINCT A) FROM example;
 COUNT
-------
     3
(1 row)

再次对投影运行 EVALUATE_DELETE_PERFORMANCE,以确定投影内的数据是否会引发任何潜在的 DELETE 性能问题。投影 one_sort 具有潜在的删除性能问题,因为它仅按照具有较少非重复值的列 A 进行排序。排序列中的各值与投影中的多个行对应,而这对 DELETE 性能有负面影响。相反,投影 two_sort 按照列 A 和列 B 进行排序,两个排序列中的每个值组合均可以仅标识少数行,便于删除操作快速执行:


=> select evaluate_delete_performance('example');
            evaluate_delete_performance
---------------------------------------------------
 The following projections exhibit delete performance concerns:
        "public"."one_sort_b1"
        "public"."one_sort_b0"
See v_catalog.projection_delete_concerns for more details.

=> \x
Expanded display is on.
dbadmin=> select * from projection_delete_concerns;
-[ RECORD 1 ]------+------------------------------------------------------------------------------------------------------------------------------------------------------------
projection_id      | 45035996273878562
projection_schema  | public
projection_name    | one_sort_b1
creation_time      | 2019-06-17 13:59:03.777085-04
last_modified_time | 2019-06-17 14:00:27.702223-04
comment            | The squared number of rows matching each sort key is about 159201 on average.
-[ RECORD 2 ]------+------------------------------------------------------------------------------------------------------------------------------------------------------------
projection_id      | 45035996273878548
projection_schema  | public
projection_name    | one_sort_b0
creation_time      | 2019-06-17 13:59:03.777279-04
last_modified_time | 2019-06-17 13:59:03.777279-04
comment            | The squared number of rows matching each sort key is about 159201 on average.

如果忘记向 EVALUATE_DELETE_PERFORMANCE 提供实参,它将评估您可以访问的所有投影:

=> select evaluate_delete_performance();
                          evaluate_delete_performance
---------------------------------------------------------------------------
 The following projections exhibit delete performance concerns:
        "public"."one_sort_b0"
        "public"."one_sort_b1"
See v_catalog.projection_delete_concerns for more details.
(1 row)