人大金仓分析型数据库监控系统状态(二)

目录

检查数据分布倾斜

查看表的分布键

查看数据分布

检查查询过程倾斜

避免倾斜警告

查看数据库元数据


检查数据分布倾斜

        数据库中所有的表都是分布式的,意味着它们的数据被按规则划分到系统中的所有实例上。 不均匀分布的数据可能会削弱查询处理性能。一个表的分布策略在表创建时被确定。

查看表的分布键

        要查看一个表中被用作数据分布键的列,可以使用psql中的\d+ 元命令来检查表的定义。例如:

=# \d+ sales
Table "retail.sales"
Column | Type | Modifiers | Description
-------------+--------------+-----------+-------------
sale_id | integer | |
amt | float | |
date | date | |
Has OIDs: no
Distributed by: (sale_id)

        当我们创建复制表时,数据库会在每个实例上都存储一份完整的表数据。复制表没有分布键。 \d+元命令会展示分布表的分布键,复制表展示状态为Distributed Replicated。

查看数据分布

        要查看一个表中行的数据分布(每个实例上的行数),可以运行一个这样的查询:

=# SELECT gp_segment_id, count(*) FROM table_name GROUP BY gp_segment_id;

        如果所有的实例都有大致相同的行数,一个表就可以被认为是分布均匀的。

检查查询过程倾斜

        当一个查询被执行时,所有的实例应该具有等量的负载来保证最好的性能。如果发现了一个执行性能低下的查询, 可能需要使用EXPLAIN命令进行深入研究。如果表的数据分布策略与查询谓词没有很好地匹配,查询执行负载可能会倾斜。要检查执行倾斜,可以运行一个这样的查询:

=# SELECT gp_segment_id, count(*) FROM table_name WHERE column='value' GROUP BY gp_segment_id;

避免倾斜警告

        当执行一个使用哈希连接操作的查询时,可能会收到下面的警告消息:

Extreme skew in the innerside of Hashjoin

        当一个哈希连接操作符的输入倾斜时,就会发生这种情况。它不会阻碍查询成功完成。可以按照这些步骤来避免计划中的倾斜:

  • 确保所有的事实表都被分析过
  • 验证该查询用到的任何已填充临时表都被分析过
  • 查看该查询的EXPLAIN ANALYZE计划,并且在其中查找以下信息:如果有带多列过滤的扫描产生超过预估的行数,将gp_selectivity_damping_factor 服务器配置参数的值设置为当前值的2倍以上并且重新测试该查询;如果在连接一个相对较小(小于5000行)的单一事实表时发生倾斜,将gp_segments_for_planner 服务器配置参数设置为1并且重新测试该查询
  • 检查应用于该查询的过滤属性是否匹配基表的分布键。如果过滤属性和分布键相同,考虑用不同的分布键重新分布一些基表
  • 检查连接键的基数。如果基数较低,尝试用不同的连接列或者表上额外的过滤属性来重写该查询以降低行数。 这些更改可能会改变查询的语义

查看数据库元数据

       数据库在其系统目录中跟踪各种有关存储在数据库中对象(例如表、视 图、索引等等)和全局对象(例如角色和表空间)的元数据信息。可以使用系统视图pg_stat_operations和 pg_stat_partition_operations 查看在一个对象(例如一个表)上执行的动作。例如,要查看在一个表上执行的动作,比如它何时被创建以及它上一次是什么时候被清理和分析:

=> SELECT schemaname as schema, objname as table,
usename as role, actionname as action,
subtype as type, statime as time
FROM pg_stat_operations
WHERE objname='cust';
schema | table | role | action | type | time
--------+-------+------+---------+-------+--------------------------
sales | cust | main | CREATE | TABLE | 2016-02-09 18:10:07.867977-08
sales | cust | main | VACUUM | | 2016-02-10 13:32:39.068219-08
sales | cust | main | ANALYZE | | 2016-02-25 16:07:01.157168-08
(3 rows)

         要查看一个对象(例如表或者视图)的定义,在psql中可以使用\d+元命令。 例如,要查看一个表的定义:

=> \d+ mytable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值