Vertica的特点简单的说可以总结为:列存储、MPP架构、技术比较新。列存储本身带来了数据高度压缩的便利,MPP架构使得可以用相对廉价的PC级服务器横向扩展到较大规模(PB级),05年才问世使得它在引擎层面能用上近年来列式数据库方面较新的技术,如不可见连接(Invisible Join)等。

和Oracle那种一个库包治百病的方案不同,Vertica从设计之初就是面向分析型应用的。因此,它适合相对中低并发度,相对重载的分析查询场景。对于在Vertica上跑的每个查询SQL,它总是试图分配足够的系统资源,在尽量短的时间内完成,而不是追求同一时间能有较多的并发。一般而言,每节点的CPU core数就是合适的最大并发数设置。如果最大并发设置更高,根据系统的硬件和参数配置,很多查询分配的资源可能不足,有的查询甚至进入队列等待,从而导致每个SQL的平均查询时间上升。就我们测试的经验,在系统负载达到一定程度后,增加并发度,系统的查询吞吐量(单位时间内能跑完的SQL个数)基本持平甚至会下降。这个特点尤其要注意。

Vertica的SQL语法和SQL92标准兼容,在Oracle上的SQL除了一些oracle特有函数之外,很少需要修改就可以直接在Vertica上运行。具体谈到到一个SQL的性能,都离不开执行计划的分析。

有两种方式查看执行计划:

1、MC(management console)图形界面

2、查询系统视图:Vertica提供了一系列数据字典和视图,对于SQL性能分析最重要的有两个。QUERY_PLAN_PROFILES提供了SQL运行时实际执行计划的信息,execution_engine_profiles则进一步提供了SQL执行时每一步每个节点具体的资源消耗信息,以便精确判断瓶颈所在。有这两个视图的数据,基本上可以完成所有的SQL级性能分析。

如何获取特定SQL的执行计划:

在Oracle中,一般根据SQL_ID和Plan hash value可以唯一确定一个SQL的执行计划。在Vertica中,类似的可以通过transaction_id和statement_id两个参数唯一确定一个执行计划。手工测试时通常statement_id默认是1,所以上述脚本在使用时,注意抓到要分析SQL的transaction_id即可。

因为vertica会针对每一列选择不同的压缩算法进行压缩,在SQL执行时不同数据类型的执行效率也有很大差异。所以数据类型的选择对性能影响会相对Oracle更加明显。

就Vertica我们的实践而言,数据类型的选择可以简单总结为下面几点:

1、  能用整型就不用浮点型;

2、  长度尽量短;

3、  能固定长度就不要变长(结合2);

根据测试验证,我们某个案例中将事实表KEY/ID类型字段从浮点型改为整数,将大量金额字段的数据进度从(38,10)改为(24,4),最后查询性能从6秒提升到4秒,提升了50%

Vertica有一个特别的概念projection,具体的定义和特点介绍此处不再赘述,有Oracle经验的同学可以简单的把它理解为类似物化视图的功能(当然本质有很大不同)。

Vertica性能分析的更多相关文章

  1. 如何进行python性能分析?

    在分析python代码性能瓶颈,但又不想修改源代码的时候,ipython shell以及第三方库提供了很多扩展工具,可以不用在代码里面加上统计性能的装饰器,也能很方便直观的分析代码性能.下面以我自己实 ...

  2. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  3. SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

    前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...

  4. SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)

    前言 本节我们来分析LEFT JOIN和NOT EXISTS,简短的内容,深入的理解,Always to review the basics. LEFT JOIN...IS NULL和NOT EXIS ...

  5. SQL Server-聚焦EXISTS AND IN性能分析(十六)

    前言 前面我们学习了NOT EXISTS和NOT IN的比较,当然少不了EXISTS和IN的比较,所以本节我们来学习EXISTS和IN的比较,简短的内容,深入的理解,Always to review ...

  6. SQL Server-聚焦NOT EXISTS AND NOT IN性能分析(十五)

    前言 上一节我们分析了INNER JOIN和IN,对于不同场景其性能是不一样的,本节我们接着分析NOT EXISTS和NOT IN,简短的内容,深入的理解,Always to review the b ...

  7. SQL Server-聚焦INNER JOIN AND IN性能分析(十四)

    前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...

  8. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  9. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

随机推荐

  1. Gevent工作原理(转)

    作者:大U哥链接:https://www.zhihu.com/question/20703476/answer/15911452来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  2. 利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件

    利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件 一.得到符号 二.将符号转换为 .h 文件 三.得到 c\c++ 头文件,之后编程时直接导入这个文件即 ...

  3. 【Python】运算符

    python是强类型语言,某些场合下需要进行类型转换.关系运算符的结果是true或false.这里介绍一下基本的运算符,和几个使用实例,了解并掌握python中range()函数和math类库的引入和 ...

  4. C++回调,函数指针

    想要理解回调机制,先要理解函数指针 函数指针 函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定的类型 函数的类型由他的返回类型和参数类型共同决定,与函数名无关,如: bool len ...

  5. Spring集成Quartz框架的两种方式。

    可参考:https://blog.csdn.net/yk614294861/article/details/84324603 1.使用Spring与Quarta配置作业得两种方式: a.方式一,Met ...

  6. 使用三层架构+EF添加单元测试

    在运行测试的时候抛异常了: “System.InvalidOperationException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 The Entity Fram ...

  7. 一款对Postman支持较好的接口文档生成工具

    最近要编写接口文档给测试和前端看,通过网上查阅资料,也认识了很多款接口文档生成工具,比如易文档.ApiPost.ShowDoc.YApi.EoLinker.DOClever.apizza等,通过对这几 ...

  8. 花了近十年的时间,整理出史上最全面Java面试题

    1.String 是最基本的数据类型吗? 不是.Java中的基本数据类型只有8个:byte.short.int.long.float.double.char.boolean:除了基本类型(primit ...

  9. postman强大的团队协作功能

    今天无意在调项目的接口 ,使用的postman工具 ,自己写的接口信息,只能自己看 ,感觉有点不方便,如果一个公司多名测试,如果一个人写接口信息,大家都能用,就会很节约时间 所以团队协作的功能就诞生了 ...

  10. JDK1.8新特性——Optional类

    JDK1.8新特性——Optional类 摘要:本文主要学习了JDK1.8新增加的Optional类. 部分内容来自以下博客: https://www.cnblogs.com/1ning/p/9140 ...