从oracle往greenplum迁移,查询性能不满足要求的定位以及调优过程
一、前言
在一次对比oracle和greenplum查询性能过程中,由于greenplum查询性能不理想,因此进行定位分析,提升greenplum的查询性能
二、环境信息
初始情况下,搭建一个小的集群,进行性能测试
| 磁盘 | SAS |
| 交换机 | 千兆 |
| 集群大小 | 4segment |
| 数据量 | 3亿 |
| 数据文件大小 | 68G |
| 表类型 | Heap 行表 |
| 字段类型 | 所有列为varchar |
| 列宽 | 41列 |
| 索引 | 无 |
| 查询语句 | select count(*) from xxx where gjdqdm = 'CHN' and crrqsj >= '20100101000000' and crrqsj <= '20180101000000' and crkadm = '055' |
PS:由于要求greenplum中的表数据类型和源表类型一直,且索引一致。所以所有字段都为varchar类型且无索引,因此这方面没有优化空间。
三、优化过程
3.1 结果对比
| SQL | ORACLE耗时 | greenplum耗时 |
| select count(*) from xxx where gjdqdm = 'CHN' and crrqsj >= '20100101000000' and crrqsj <= '20180101000000' and crkadm = '055' | 24S | 14.1S |
14.1S是不能接受的速度,因此需要查找原因,以期找出性能瓶颈,提供优化方案
3.2 分析过程
3.2.1 查看执行计划

从①处可以看出,所有的耗时都在③的操作,seq scan上。
这里①处的意思是(摘自官网):
The numbers that are quoted by EXPLAIN are (left to right):
Estimated start-up cost (time expended before the output scan can start, e.g., time to do the sorting in a sort node)
Estimated total cost (if all rows are retrieved, though they might not be; e.g., a query with a LIMIT clause will stop short of paying the total cost of the Limit plan node's input node)
Estimated number of rows output by this plan node (again, only if executed to completion)
Estimated average width (in bytes) of rows output by this plan node
③处的意思是:顺序扫描磁盘
从②处可以看出,所有的segment都参与了查询
从④处可以看出,所有的列设置为varchar都进行了类型转换,转成了text,且没有走索引(也无索引能用)
从⑤出可以看出,实际使用的内存远小于分配的内容,所以这里可以判断出问题不在内存
3.2.2 查看数据分布情况

这里可以看到数据分布是非常均匀的,所以不存在其中一台计算节点耗时特别长的情况
3.2.3 查看CPU情况
既然内存没有问题,那就可以尝试看CPU和磁盘的使用情况了
在其中计算节点使用top命令查看:

这里是其中一台计算节点的截图,这里说明仅仅对于这一条SQL而言,已经消耗了CPU100%的资源,但是整机还有相当富余的CPU资源可用
3.2.4 查看磁盘情况
使用sar命令查看计算节点情况

PS:这里仅展示一套机器(实际情况中每一台计算节点都是相同的情况)
这里发现iowait一列是基本都为0,但是idle也为0,此处验证了磁盘io没有问题,问题出在CPU上
3.3 问题解决
前面说到这个greenplum集群建立的时候只在每台结算节点分配了一个segment,所以每台机器上只有一个CPU是忙碌状态的,而其他的CPU处于空闲状态
充分的利用CPU资源,就可以显著提高查询的性能。
因此,对这套集群的segment进行扩容,将原来的4个segment扩容为54个,并且重新建表后将所有varchar类型换成text,将参与查询的日期列设置为分区键,分布键不变,仍为id列
3.4 最终结果
| oracle | 原集群 | 扩容后的集群 |
| 24S | 14.1S | 1.5S |
四、参考资料
https://www.postgresql.org/docs/9.2/static/using-explain.html
从oracle往greenplum迁移,查询性能不满足要求的定位以及调优过程的更多相关文章
- 一个简单web系统的接口性能分析及调优过程
在测试一个简单系统接口性能压力时,压到一定数量,程序总是崩溃,查看相关机器相关数据时,CPU.内存.IO占用均不高,问题自然出现在其它地方先介绍下系统部件架构 Resin版本为:[root@local ...
- Linux性能优化从入门到实战:13 内存篇:内存指标/工具总结、问题定位和调优
内存性能指标 系统内存指标 已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存. 共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小.tmpfs 其实也是一种特 ...
- 数据库调优过程(一):SqlServer批量复制(bcp)[C#SqlBulkCopy]性能极低问题
背景 最近一段给xx做项目,这边最头疼的事情就是数据库入库瓶颈问题. 环境 服务器环境:虚拟机,分配32CPU,磁盘1.4T,4T,5T,6T几台服务器不等同(转速都是7200r),内存64G. 排查 ...
- 【性能调优】:记录一次数据库sql语句性能调优过程
一,依旧很简单的一个接口,查询列表接口,发现10并发单交易场景下,数据库表4w铺底数据,每次查询2000条数据进行orderby显示,平均响应时间2秒以上,数据库的cpu使用率高达95%: 二,抓到这 ...
- Linux性能优化从入门到实战:16 文件系统篇:总结磁盘I/O指标/工具、问题定位和调优
(1)磁盘 I/O 性能指标 文件系统和磁盘 I/O 指标对应的工具 文件系统和磁盘 I/O 工具对应的指标 (2)磁盘 I/O 问题定位分析思路 (3)I/O 性能优化思路 Step 1:首先采用 ...
- 【性能优化】(2)JVM调优
JVM调优 2019-07-21 12:32:00 by冲冲 1.
- 一个InnoDB性能超过Oracle的调优Case
年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试,本想把MySQL调优到接近Oracle的性能即可,但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助(排名不分先后 ...
- [转]oracle性能调优之--Oracle 10g AWR 配置
一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...
- Informatica_(6)性能调优
六.实战汇总31.powercenter 字符集 了解源或者目标数据库的字符集,并在Powercenter服务器上设置相关的环境变量或者完成相关的设置,不同的数据库有不同的设置方法: 多数字符集的问题 ...
随机推荐
- HTML 折行br
HTML 折行 如果您希望在不产生一个新段落的情况下进行换行(新行),请使用 <br /> 标签: <p>This is<br />a para<br /&g ...
- VS断点不生效
工程属性页中“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继承”的程序数据库(/ZI)”. 在“配置属性”->“链接器”->“调试”- ...
- vsphere的P2V工具做的物理机迁移到虚拟机报错out of memory
vsphere的P2V工具做的物理机迁移到虚拟机 迁移成功,但是启动报错 进入rescue模式后发现是sysctl.conf文件的参数设大了因为虚拟机的内存没有物理机内存大 kernel.shm ...
- OC Copy and MutableCopy的使用
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCopying> // copy代表set ...
- 百度地图隐藏LOGO显示
在引入地图的页面加入下列样式即可隐藏百度地图左下角的LOGO <style type="text/css"> .anchorBL{display:none;} ...
- 51nod 1832 先序遍历与后序遍历【二叉树+高精度】
题目链接:51nod 1832 先序遍历与后序遍历 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的 ...
- css 17课--
---------------------------------------------------------------------------------------------------- ...
- Django 创建模型 激活模型 简单的使用模型
创建模型: 在你的开发环境中,已经有一个“项目” —— 已经建立起来,你将开始在上面做一些东西. 你编写的每个Django应用都是一个遵循特定约定的Python包. Django自带一个工具,它可以自 ...
- SDOI2018R1划水记
SDOI2018 bless all Day -1 一天无所事事……板子也不想打了 旁边的蚝爷还在不停的AC……果然自动AC机不是白叫的 "8848钛金老蚝,一上课就A题,一下课就学习,每2 ...
- mac 系统安装selenium注意事项
mac最新系统:OS X EI Captian python: 本机自带的python2.7. (本来想升级3.5,觉得太复杂,放弃了) pip: https://pypi.python.org/py ...