Vertica 性能非常好, 平时基本不会碰到性能问题, 即使碰到, 优化也很容易, 而且效果往往会很好.

======================
优化工具
======================

1. explain 命令.
在一个大 SQL 执行之前, 使用 profile 来查看资源的预期消耗.
veritica 执行计划除了有普通文本格式, 还有 graphviz 格式的文本输出, 可以使用一些 graphviz viewer网站或工具将这些文本以流程图的形式呈现. 比如这个网站 <http://webgraphviz.com/>

2. v_monitor schema 下有很多监控类表, 可以查看内存/执行时间等消耗.
select * from v_monitor.query_requests ;
select * from v_monitor.query_profiles ;
select * from v_monitor.query_metrics ;
select * from v_monitor.memeory_usage ;
select * from v_monitor.cpu_usage ;
select * from v_monitor.io_usage ;
select * from v_monitor.network_usage ;

3. profile 命令
除了 v_monitor.query_requests 给出的时间和内存消耗, 还可以使用 profile 语句获取SQL的执行成本.
该命令结果可以在vsql 命令行工具看到, 或使用 dbeaver的"输出"tab页查看.

======================
优化手法
======================
1. 数据表 (包括临时表) 建表语句需要重点关注数据的分布
   具体分布情况的指令有 order by, SEGMENTED by , PARTITION by 从句.
   UNSEGMENTED ALL NODES;
   SEGMENTED BY HASH(EID) ALL NODES ;
2. 收集统计信息
   如果在执行计划中, 看到 "NO STATISTICS" 字眼, 可以试试收集一下统计信息.
   SELECT ANALYZE_STATISTICS('');
3. 尽量避免使用 merge 和 update 语句, 使用 Delete+Insert 代替.
4. Delete 虽然性能比 Update 要好, 但大量数据的删除操作, Vertica 也需要很长时间, 尽量使用 truncate 或 分区删除.
5. 对于复杂的子查询语句,使用临时表来代替.
6. 两个表关联避免不同数据类型之间做"隐式转换", 必要时候先使用临时表转成同样数据类型(包括精度), 然后再做join.
    根本点是建模时, 同一个domain在不同表中的类型要保持一致.
7. 重建或新建Projection.
   如果在执行计划中, 看到 "BROADCAST Join" 字眼, 有可能关联条件写的不合适, 有可能projection建的不合适.
8. 大数据量的操作(Insert/Update/Delete/CTAS 语句), 要善用 /*+ DIRECT */

Vertica系列:性能优化的更多相关文章

  1. Mysql系列-性能优化神器EXPLAIN使用介绍及分析

    MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 SEL ...

  2. 03.SQLServer性能优化之---存储优化系列

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概  述:http://www.cnblogs.com/dunitian/p/60413 ...

  3. [MySQL性能优化系列]提高缓存命中率

    1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...

  4. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  5. [MySQL性能优化系列]LIMIT语句优化

    1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...

  6. PLSQL_性能优化系列14_Oracle High Water Level高水位分析

    2014-10-04 Created By BaoXinjian 一.摘要 PLSQL_性能优化系列14_Oracle High Water Level高水位分析 高水位线好比水库中储水的水位线,用于 ...

  7. PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database

    占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue

  8. Java GC 专家系列5:Java应用性能优化的原则

    本文是GC专家系列中的第五篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC ...

  9. Web性能优化系列

    web性能优化之重要,这里并不打算赘述.本系列课程将带领大家认识.熟悉.深刻体会并且懂得如果去为不同的站点做性能优化 同时,本系列将还会穿插浏览器兼容性相关问题的解决方案,因为在我看来,兼容性同样属于 ...

随机推荐

  1. 【题解】 bzoj3916: [Baltic2014]friends (字符串Hash)

    题面戳我 Solution 首先长度为偶数可以直接判掉 然后我们可以枚举删的位置,通过预处理的\(hash\),判断剩余部分是否划分成两个一样的 判重要注意,我们把字符串分为三个部分\(L_l+1+L ...

  2. 【BZOJ4061】[Cerc2012]Farm and factory(最短路,构造)

    [BZOJ4061][Cerc2012]Farm and factory(最短路,构造) 题面 BZOJ 然而权限题QwQ. 题解 先求出所有点到达\(1,2\)的最短路,不妨记为\(d_{u,1}, ...

  3. [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】

    题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...

  4. [CF977F]Consecutive Subsequence

    题目描述 You are given an integer array of length n. You have to choose some subsequence of this array o ...

  5. 51nod 1081 子段求和(线段树 | 树状数组 | 前缀和)

    题目链接:子段求和 题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少. 题解:线段树区间求和 | 树状数组区间求和 线段树: #include <cstdio> ...

  6. day15-集合

    快捷键: 先定义name,age再利用快捷键生成,Alt+shift+s +c:空参 Alt+shift+s +o:有参 Alt+shift+s +r:set&get方法Ctrl+shift+ ...

  7. Can DBC文件翻译

    1 引言 DBC文件描述单个CAN网络的通信.这个信息足以监测和分析网络并模拟不是物理可用的节点(剩余的总线模拟). DBC文件也可以用来开发电子控制单元的通信软件,该控制单元应该是CAN网络的一部分 ...

  8. nodejs的某些api~(三)net模块

    net模块和http模块是node最重要的两个模块,前者是基于TCP的封装,后者的本质也是TCP.他们通过 tcp通信,建立一个可以收发消息的web服务器.我在写的作品里面用的express也是封装的 ...

  9. 编写高质量代码:改善Java程序的151个建议 --[117~128]

    编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...

  10. CentOS6.5安装JDK1.8

    1.查看Linux自带的JDK是否已安装(如果安装则卸载CentOS已安装的低版本) 安装好的CentOS会自带OpenJdk,用命令 java -version,会有下面的信息: java -ver ...