EVALUATE_DELETE_PERFORMANCE
针对潜在的 DELETE 和 UPDATE 性能问题对投影进行评估。如果 Vertica 发现任何问题,则会发出警告消息。在评估多个投影时,EVALUATE_DELETE_PERFORMANCE 将返回最多十个有问题的投影,以及列出其发现的所有问题的表的名称。
注意
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 性能问题对表 exampl
e 的所有投影进行评估。
=> 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)