• Vertica系列:性能优化


    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 */

  • 相关阅读:
    移动端适配rem/vw,vh原理(详细)
    PHP中获取不到自定义header参数解决方案
    java tempalte 0.1
    【JSR269实战】之编译时操作AST,修改字节码文件,以实现和lombok类似的功能
    nuxt
    怎么免费搞下百度文库文章
    npm init y中的y
    npm 源管理
    vue 面试题 资料列表
    node lowdb 入门操作
  • 原文地址:https://www.cnblogs.com/harrychinese/p/vertica_perf_tuning.html
Copyright © 2020-2023  润新知