从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服务器上设置相关的环境变量或者完成相关的设置,不同的数据库有不同的设置方法: 多数字符集的问题 ...
随机推荐
- mac crontab
1.前提工作 正常情况下mac普通用户是无法使用crontab的,需要做如下修改: 在~/.vimrc下添加这么一行: autocmd filetype crontab setlocal noback ...
- jquery mobile开发中常见的问题(转载)
1页面缩放显示问题 问题描述: 页面似乎被缩小了,屏幕太宽了. 处理方法: 在head标签内加入: <meta name="viewport" content="w ...
- LeetCode-Maximal Rectangle[code]
code: #include <iostream> #include <vector> #include <stack> #include <algorith ...
- C#中的多线程 - 基础知识 z
原文:http://www.albahari.com/threading/ 专题:C#中的多线程 1简介及概念Permalink C# 支持通过多线程并行执行代码,线程有其独立的执行路径,能够与其它线 ...
- Deep Learning Drizzle
Deep Learning Drizzle Drench yourself in Deep Learning, Reinforcement Learning, Machine Learning, Co ...
- appium 获取app的应用包名package和activity
第一种,使用sdk自带的工具aapt,在sdk\builds-tools\目录下,切换到aapt所在目录 命令:aapt dump badging app的路径,运行后的结果中以下两行分别是应用包名p ...
- NO.012-2018.02.17《题都城南庄》唐代:崔护
题都城南庄_古诗文网 题都城南庄 唐代:崔护 去年今日此门中,人面桃花相映红.去年春天,就在这扇门里,姑娘脸庞,相映鲜艳桃花.人面:指姑娘的脸.第三句中“人面”指代姑娘. 人面不知何处去,桃花依旧笑春 ...
- Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011292087/article/details/37598919 有关const成员.stati ...
- Yii 不完全解决方案(一)
此文意在记录 Yii 开发过程中的小问题解决方案 1. Yii 中 Js 和 Css 文件的引入. 我们就从最简单的问题开始吧,说起来也不是问题,只是语法罢了.假设我们的 js 文件都放在和 prot ...
- 利用MSF批量打RMI漏洞
声明:不会Java. 参考:https://www.secpulse.com/archives/6203.html 下载mjet,https://github.com/mogwaisec/mjet 按 ...