优化工作:

  1. 数据表分区尽量采用数值类型字段,如Date类型转换为距离1970-01-01的绝对天数。
  2. SQL语法:尽量避免between and 的使用(查看查询计划,影响不大),多个子查询时尽量使用CTE(with v as…)查询。
  3. 根据表的数据量以及大多数查询的类型设计数据分布策略(随机分布or哈希分布)以及bucketnum参数设置。
  4. 冷热数据存储到不同schema相同的表中,尽量减小热数据所在表的分区数(通过动态增加和删除分区)。
  5. 根据SQL所需的资源设置参数hawq_rm_stat_nvseg和hawq_rm_vseg_memory。
  6. 每天定时执行“vacuum table_name;analyze table_name;”获取每个表的统计信息,以便生成最优的查询计划。
  7. 通过执行”vacuum pg_class; reindex table pg_class”源数据表pg_class,减少元数据记录数。
  8. 执行分析查询计划,找到SQL的性能瓶颈,有针对性的优化。
  9. 采取措施尽量提升查询数据的本地化比率。

实际测试

数据表采用随机分布: bucketnum=9

1.设置用于查询的virtual segment数量
语句级别:

SET hawq_rm_stmt_nvseg=10;
SET hawq_rm_stmt_vseg_memory='256mb';
  • 禁用语句级别

    SET hawq_rm_stmt_nvseg=0;
set hawq_rm_nvseg_perquery_perseg_limit=10;
set hawq_rm_nvseg_perquery_limit=512;

  通过hawq_rm_nvseg_perquery_limit和hawq_rm_nvseg_perquery_perseg_limit参数可以调整查询执行时使用的virtual segments的数量

2.哈希分布表的相关参数:

default_hash_table_bucket_number
hawq_rm_nvseg_perquery_limit
hawq_rm_nvseg_perquery_perseg_limit


3.可以使用pg_partitions视图查找有关分区设计的信息。例如,查看销售表的分区设计:

SELECT partitionboundary, partitiontablename, partitionname, partitionlevel, partitionrank
FROM pg_partitions
WHERE tablename='ins_wifi_dates';

下表和视图显示有关分区表的信息。

  • pg_partition - 跟踪分区表及其继承关系。
  • pg_partition_templates - 显示使用子分区模板创建的子分区。
  • pg_partition_columns - 显示分区设计中使用的分区键列。

4.查看表的segment file分布

SELECT gpr.tablespace_oid,gpr.database_oid,gpf.relfilenode_oid,gpf.segment_file_num,'/hawq_data/'||gpr.tablespace_oid||'/'||gpr.database_oid||'/'||gpf.relfilenode_oid ||'/'||gpf.segment_file_num as path,pg_class.relname,gpr.persistent_state,gpf.persistent_state
FROM gp_persistent_relfile_node gpf,pg_class, gp_persistent_relation_node gpr
WHERE gpf.relfilenode_oid = pg_class.relfilenodeAND gpr.relfilenode_oid = pg_class.relfilenodeAND pg_class.relname='person';
SELECT distinct gpr.tablespace_oid,gpr.database_oid,gpf.relfilenode_oid,pg_class.relname,gpr.persistent_state,gpf.persistent_state
FROM gp_persistent_relfile_node gpf,pg_class, gp_persistent_relation_node gpr
WHERE gpf.relfilenode_oid = pg_class.relfilenodeAND gpr.relfilenode_oid = pg_class.relfilenodeAND pg_class.relname like 'person_%' order by pg_class.relname ;

#schema

SELECT gpr.tablespace_oid,gpr.database_oid,gpf.relfilenode_oid,gpf.segment_file_num,'/hawq_data/'||gpr.tablespace_oid||'/'||gpr.database_oid||'/'||gpf.relfilenode_oid ||'/'||gpf.segment_file_num as path,pgn.nspname AS schemaname,pg_class.relname AS tablename,gpr.persistent_state,gpf.persistent_state
FROM gp_persistent_relfile_node gpf,pg_class, gp_persistent_relation_node gpr, pg_namespace pgn
WHERE gpf.relfilenode_oid = pg_class.relfilenodeAND gpr.relfilenode_oid = pg_class.relfilenode AND pgn.oid = pg_class.relnamespaceAND pg_class.relname='t_wifi_terminal_chrs_1_prt_1';

经过测试发现:
  数据在hdfs中的存储位置为: tablespace/database/table/segfile
分区表A目录中有默认哈希桶数目的segfile,但大小都为0,而其字表(如a1)目录中有默认哈希桶数目的segfile,且有文件。

查看表大小:

select sotdsize from hawq_toolkit.hawq_size_of_table_disk where sotdtablename='t_net_access_log';

5.使用explain 或者 explain analyze 查看查询计划时,指定

set gp_log_dynamic_partition_pruning=on;

可以显示扫描的分区名称。

  Explain analyze和explain语句不同,explain analyze会真正执行查询,并得到查询执行过程中的统计数据。explain analyze的结果对了解查询执行的具体情况以及了解查询性能问题产生的原因有很大帮助。

SELECT * FROM pg_stats  WHERE tablename = 'inventory';

#查询会话信息

select * from pg_stat_activity;
select application_name, datname, procpid, sess_id, usename, waiting, client_addr, client_port, waiting_resource,  query_start, backend_start, xact_start from pg_stat_activity;
select application_name, datname, procpid, sess_id, usename, waiting, client_addr, client_port, waiting_resource, current_query, query_start, backend_start, xact_start from pg_stat_activity;
select application_name, datname, procpid, sess_id, usename, waiting, client_addr, client_port, waiting_resource,  query_start, backend_start, xact_start from pg_stat_activity where application_name='psql' and current_query<>'<IDLE>';

datname表示数据库名
procpid表示当前的SQL对应的PID
query_start表示SQL执行开始时间
current_query表示当前执行的SQL语句
waiting表示是否正在执行,t表示正在执行,f表示已经执行完成
client_addr表示客户端IP地址
284933
kill有两种方式,第一种是:

SELECT pg_cancel_backend(PID);

这种方式只能kill select查询,对update、delete 及DML不生效)

第二种是:

SELECT pg_terminate_backend(PID);

这种可以kill掉各种操作(select、update、delete、drop等)操作

在pg_cancel_backend()下,session还在,事物回退;
在pg_terminate_backend()操作后,session消失,事物回退。

如果在某些时候pg_terminate_backend()不能杀死session,那么可以在os层面,直接kill -9 pid

select * from pg_resqueue_status;

--资源队列

SELECT * FROM dump_resource_manager_status(2);

--Segment

SELECT * FROM dump_resource_manager_status(3);
SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname = 'ins_wifi_dates';
SELECT * FROM pg_stats  WHERE tablename = 'ins_wifi_dates';
SELECT gp_segment_id, COUNT(*)
FROM ins_wifi_dates
GROUP BY gp_segment_id
ORDER BY gp_segment_id
set gp_select_invisible=true;
select count(*) from pg_class;
set gp_select_invisible=false;
select count(*) from pg_class;vacuum pg_class;
reindex table pg_class;

日志:
set

表重分布:

ALTER TABLE sales SET WITH (REORGANIZE=TRUE);

检查未analyze的表:

select * from hawq_toolkit.hawq_stats_missing;

http://hawq.incubator.apache.org/docs/userguide/2.2.0.0-incubating/reference/toolkit/hawq_toolkit.html#topic46
HAWQ查看表大小: //不包含分区表

SELECT relname AS name, sotdsize AS size, sotdtoastsize AS
toast, sotdadditionalsize AS other
FROM hawq_toolkit.hawq_size_of_table_disk AS sotd, pg_catalog.pg_class
WHERE sotd.sotdoid=pg_class.oid and pg_class.relname='t_wifi_terminal_chrs'
ORDER BY relname;

hawq_size_of_partition_and_indexes_disk

select relname AS name, sopaidpartitionoid, sopaidpartitiontablename, sopaidpartitiontablesize as size, sotailtablesizeuncompressed as uncompressed from hawq_toolkit.hawq_size_of_partition_and_indexes_disk sopi,pg_catalog.pg_class WHERE sopi.sopaidparentoid=pg_class.oid and pg_class.relname='t_wifi_terminal_chrs'
ORDER BY sopaidpartitionoid;
select relname AS name,sum(sopaidpartitiontablesize) as size from hawq_toolkit.hawq_size_of_partition_and_indexes_disk sopi,pg_catalog.pg_class WHERE sopi.sopaidparentoid=pg_class.oid and pg_class.relname='t_wifi_terminal_chrs'
group by relname ;

内存/vore比值

[root@master2 pg_log]# cat hawq-2017-10-17_224829.csv
2017-10-17 18:21:57.319620 CST,,,p237647,th217192736,,,,0,con4,,seg-10000,,,,,"LOG","00000","Resource manager chooses ratio 5120 MB per core as cluster level memory to core ratio, there are 2304 MB memory 6 CORE resource unable to be utilized.",,,,,,,0,,"resourcepool.c",4641,
2017-10-17 18:21:57.319668 CST,,,p237647,th217192736,,,,0,con4,,seg-10000,,,,,"LOG","00000","Resource manager adjusts segment hd4.bigdata original global resource manager resource capacity from (154368 MB, 32 CORE) to (153600 MB, 30 CORE)",,,,,,,0,,"resourcepool.c",4787,
2017-10-17 18:21:57.319716 CST,,,p237647,th217192736,,,,0,con4,,seg-10000,,,,,"LOG","00000","Resource manager adjusts segment hd1.bigdata original global resource manager resource capacity from (154368 MB, 32 CORE) to (153600 MB, 30 CORE)",,,,,,,0,,"resourcepool.c",4787,
2017-10-17 18:21:57.319762 CST,,,p237647,th217192736,,,,0,con4,,seg-10000,,,,,"LOG","00000","Resource manager adjusts segment hd2.bigdata original global resource manager resource capacity from (154368 MB, 32 CORE) to (153600 MB, 30 CORE)",,,,,,,0,,"resourcepool.c",4787,

转载于:https://blog.51cto.com/1196740/2161470

Apache Hawq--优化笔记相关推荐

  1. Apache网页优化概述

    Apache网页优化概述 Apache网页优化概述 一.网页压缩 1.检查是否安装mod_ deflate 模块 2.如果没有安装mod_deflate 模块,重新编译安装 Apache 添加 mod ...

  2. 物理机存放mysql实例原则_MySQL优化笔记(四)--表的设计与优化(单表、多表)...

    前面讲了SQL优化以及索引的使用.设计优化了,那么接下来就到表的设计与优化啦!!!真实地去设计优化单表结构以及讲述多表设计基本原则(结合真实的生产环境的取舍来讲述). 文章结构:(1)单表设计与优化: ...

  3. el-select 多选取值_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  4. 回溯法采用的搜索策略_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  5. 韩顺平mysql优化笔记_韩顺平 mysql优化笔记.doc

    韩顺平 mysql优化笔记.doc 还剩 6页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: ? 垂直分割表如果你的数据库的存储引擎是 MyISAM 的 ...

  6. 25个Apache性能优化技巧推荐

    Apache 至今仍处于web服务器领域的霸主,无人撼动,没有开发者不知道.本篇文章介绍25个Apache性能优化的技巧,如果你能理解并掌握,将让你的Apache性能有显著的提升! Apache 部分 ...

  7. Apache HAWQ集群的安装部署

    最近Pivotal公司发布了Apache HAWQ的企业版HDB 2.0,因功能强大,性能出色,很多人已经迫不及待想要安装来玩玩了.今天我们就来聊聊怎么部署强大的HAWQ 2.0吧. 企业版的HAWQ ...

  8. 中科大-凸优化 笔记(lec25)-等价变换

    全部笔记的汇总贴(视频也有传送门):中科大-凸优化 ∇fT(x∗)(y−x)≥0\nabla f^T(x^*)(y-x)\ge0∇fT(x∗)(y−x)≥0线性规划的解在边界上 一.等价变换 例:食谱 ...

  9. 凸优化笔记(1) —— 基本概念

    凸优化笔记 -- 基本概念之凸集 1. 数学优化 基本概念 2.1 凸优化问题 2.2 线性函数与凸函数 2.3 凸集 仿射集. 2.3.2 凸集 2.3.3锥 三种集合的比较: 基本准备 本科没学过 ...

  10. 【凸优化笔记二】凸函数基本性质和例子

    [凸优化笔记二]凸函数基本性质和例子 凸函数的四个定义 定义一 定义二 定义三 定义四 一些栗子 凸函数的四个定义 定义一 其中 dom fff 是函数 fff 的 定义域(前域),为凸集--这个很重 ...

最新文章

  1. python Pil byteio转换
  2. [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
  3. 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应
  4. php登录个性验证码,PHP七种不同的个性创意验证码例子
  5. JS module的导出和导入 1
  6. 技巧篇-图层叠加之美(一)
  7. Java 图形化界面 实现ASCII码的转换和查看
  8. 如何用计算机截部分屏,电脑怎样截长屏_电脑如何长截屏截图-win7之家
  9. SQL prompt无法激活跳转到127.0.0.1:22223的解决方案
  10. JS min文件解压工具
  11. 怎么解决pdf乱码问题呢?
  12. 怎样选择适合自己的视频加密软件方案?
  13. python画图解决Times New Roman自带粗体问题
  14. Parameter index out of range (1 > number of parameters, which is 0)
  15. 高中数学40分怎么办_高一数学40分有救吗?
  16. Ix Chariot测试路由器流程
  17. python+pysimplegui+socket开发登录聊天室
  18. 远程连接 部分基础命令
  19. 心跳信号分类 ---参数调整
  20. NodeJs实战-待办列表(5)-使用MySQL存储待办事项

热门文章

  1. CAD环境中求算接合表面积
  2. 数据结构课程设计--平衡二叉树
  3. 用VC实现GIS系统基本功能
  4. JZOJ 3515. 软件公司
  5. Extreme Programming
  6. 检查电脑链接的网络是否支持ipv6
  7. Eclipse打JAR包的使用
  8. AutoIT: 开发界面结合GUI automation和Watir Automation
  9. flex textInput 限制输入
  10. Combres库 学习小结以及部分源码分析