再读greenplum的admin guide文档
来源:互联网 发布:java 局部变量表 编辑:程序博客网 时间:2024/06/05 04:10
master
The master is where the global system catalog resides. The global system catalog is the set of system tables that contain metadata about the Greenplum Database system itself.
master负责的内容包括:
* authenticates client connections
* processes incoming SQL commands
* distributes workloads among segments
* coordinates the results returned byeach segment
* presents the final results to the client program.
The key to obtaining the best performance from Greenplum Database is to distribute data and workloads evenly across a large number of equally capable segments so that all segments begin working on a task simultaneously and complete their work at the same time.
工具包
$GPHOME/bin
vacuum
每20亿事务执行后,需要执行一次数据库级别的vaccum
动作,不然会导致XID wraparound
xid_warn_limit
和xid_stop_limit
是两个可设定的值,越界后,会导致如下两种情况:
WARNING: database database_name must be vacuumed within number_of_transactions transactions
FATAL: database is not accepting commands to avoid wraparound data loss in database "database_name"
vaccum,建议每天执行一次,可以避免表空间增长过快,尤其是在进行过大量的update和delete后操作,效果更好。它的实现是根据table's free space map
来进行的。
vaccum full,会重写表数据,会做的更彻底。这个操作执行的时候,一定要保证磁盘空间充足。执行的时候会锁住表,所以此命令最好在运维修复环境的时候执行。
analyze
主要用来收集元数据信息,statistics
。
statistics主要是optimizer在做查询计划的时候用,保存在system catalog
里。
有三个办法可以触发收集信息:
1. 数据库内执行analyze
2. linux系统命令行,执行analyzedb
3. 配置gp,在收到DML操作的时候,自动进行收集
analyze的目的是收集元数据信息,进而使得optimizer做查询计划时候更合理,进而导致更快的查询速度。但是如果查询规划不符合预期效果,可以查实修改gp_analyze_relative_error
,默认是0.25,可以调整的更低一些,这样收集的元数据信息会更准确,但是会带来更多的磁盘消耗和analyze执行所需的时间。
analyze还有另一个可以调整的参数,default_statistics_target
,但是作用还没看明白。
analyze可以基于一个表内的几列来做。
system statistics
在执行vaccum
和analyze
的时候会进行收集信息的update
pg_class
收集了表信息:rows和pages
表pg_class
列:
- reltuples
- relpages
当reltuples和select count(*)的结果差异较大的时候,就应该执行analyze或者vaccum了
当reindex命令执行后,reltuples和relpages会被置零。
pg_statistic & pg_stats
pg_statistic保存了上一次analyze执行后各表的statistics信息。
查看无statistics信息的表
select * from gp_toolkit.gp_stats_missing;
创建了一个表,插入了一条数据,做过analyze后,missing表里还有这个表的信息,不知道为什么。
segment mirror
segment有两个角色primay和mirror,mirror就是备份的计算单元。
mirror的分布有两种,一个是group mirroring,一个是spread mirroring。第一种保证mirror不和primary分布在同一台计算节点上,其他的就没有了。第二种相当于自定义的,开源社区讨论有说用4个计算节点做一个小圈,其实就是数学上的概念,尽量均衡分布segment,可以容错更多的物理服务器宕机场景。
segment的分布有两种方案:
- group mirroring
- spread mirroring
group mirroring,是默认方案,spread mirroring,是自定义方案。
spread mirroring可以让用户自行配置mirror segment放置的位置。基于数学计算,可以用4个物理服务器组成一个小圈,能够达到这样一个效果:如果1个物理机宕机,这个物理机上的segment会被均衡地在其他三台机器上激活。而group mirroring方案,很有可能会导致segment负责不均衡。
legacy optimizer
legacy optimizer有如下控制参数,决定一些开关:
enable_bitmapscanenable_groupaggenable_hashaggenable_hashjoinenable_indexscanenable_mergejoinenable_nestloopenable_seqscanenable_sortenable_tidscangp_enable_adaptive_nestloopgp_enable_agg_distinctgp_enable_agg_distinct_pruninggp_enable_direct_dispatchgp_enable_fallback_plangp_enable_fast_srigp_enable_groupext_distinct_ gathergp_enable_groupext_distinct_ pruninggp_enable_multiphase_agggp_enable_predicate_ propagationgp_enable_preuniquegp_enable_sequential_window_ plansgp_enable_sort_distinctgp_enable_sort_limit
下面这些参数,是legacy optimizer的调优参数,但是参数相互之间有关联,所以官方不建议随意调整:
cpu_index_tuple_costcpu_operator_costcpu_tuple_costcursor_tuple_fractioneffective_cache_sizegp_motion_cost_per_rowgp_segments_for_plannerrandom_page_costseq_page_cost
调优可以从如下几个方面进行:
1. statistics收集(analyze相关参数调整)
2. sort
3. aggregate
4. join
增量备份
greenplum支持增量备份,备份原理是:第一次进行一次完整备份,后续仅仅对表内,有数据修改的分区数据,进行备份。
这种备份方式要求:第一次完整备份,以及后续所有的增量备份都存在,才能进行数据恢复。
所以,对分区规划合理,且数据修改量不大的场景下,增量备份很合适。
检查系统
查看状态
gpstategpstate -sgpstate -mgpstate -cgpstate -f
磁盘使用
磁盘水位设定为70%比较合适,过多数据需要告警。整体磁盘使用情况:
test=# SELECT * FROM gp_toolkit.gp_disk_free ORDER BY dfsegment; dfsegment | dfhostname | dfdevice | dfspace -----------+------------+-----------+------------- 0 | c1 | /dev/sdb | 27310544940 1 | c2 | /dev/sdb | 27310407392 2 | c1 | /dev/sdb | 27310544940 3 | c1 | /dev/sdb | 27310544940 4 | c1 | /dev/sdb | 27310544940 5 | c1 | /dev/sdb | 27310544940 6 | c1 | /dev/sdb | 27310544940 7 | c1 | /dev/sdb | 27310544940 8 | c1 | /dev/sdb | 27310544940 9 | c2 | /dev/sdb | 27310407392 10 | c2 | /dev/sdb | 27310407392 11 | c2 | /dev/sdb | 27310407392 12 | c2 | /dev/sdb | 27310407392 13 | c2 | /dev/sdb | 27310407392 14 | c2 | /dev/sdb | 27310407392 15 | c2 | /dev/sdb | 27310407392(16 rows)
数据库的磁盘使用情况:
test=# SELECT * FROM gp_toolkit.gp_size_of_database ORDER BY sodddatname; sodddatname | sodddatsize -----------------+------------- bi_test | 178258150 db1 | 178257994 db_jiaotongting | 929011582 expand | 179568878 gelu_test | 183533798 test | 18948220574 test4 | 178356302 test5 | 178257994(8 rows)
表的磁盘使用情况:
test=# SELECT relname AS name, sotdsize AS size, sotdtoastsize test-# AS toast, sotdadditionalsize AS other test-# FROM gp_toolkit.gp_size_of_table_disk as sotd, pg_catalog.pg_class test-# WHERE sotd.sotdoid=pg_class.oid ORDER BY relname; name | size | toast | other -------------------------+-------------+--------+------------ liqingyue_2step2_dxttmp | 32768 | 557056 | 0 t1 | 0 | 0 | 0 t1 | 32768 | 0 | 0 test_gpfdist_import | 147324928 | 0 | 0 test_import_twl | 73793536 | 0 | 0 test_insert_row | 81330176 | 0 | 0 test_insert_row_a | 124588216 | 0 | 2041380864 test_insert_row_c | 42385000 | 0 | 1586626560 test_insert_row_f1 | 119013376 | 0 | 0 test_scp_import | 14221213696 | 0 | 0(10 rows)
索引的磁盘使用情况:
test-# FROM pg_catalog.pg_class, gp_toolkit.gp_size_of_indextest-# WHERE pg_class.oid=gp_size_of_index.soioid test-# AND pg_class.relkind='i'; soisize | indexname ----------+----------------------- 47513600 | test_insert_row_a_f1 47742976 | test_insert_row_f1_f5 47611904 | test_insert_row_f1_f4 47284224 | test_insert_row_f1_f3 47611904 | test_insert_row_f1_f2 47874048 | test_insert_row_f1_f1 7110656 | test_insert_row_c_f5 7110656 | test_insert_row_c_f4 7110656 | test_insert_row_c_f3 7110656 | test_insert_row_c_f2 7143424 | test_insert_row_c_f1 589824 | t1_pkey(12 rows)
检查数据分布
查看某表的结构,包含distributed key情况:
test=# \d+ t1; Table "public.t1" Column | Type | Modifiers | Storage | Description --------+-----------------------+-----------+----------+------------- i1 | integer | not null | plain | i2 | integer | | plain | s1 | character varying(40) | | extended | Indexes: "t1_pkey" PRIMARY KEY, btree (i1)Has OIDs: noDistributed by: (i1)
查看表t1
在各个segment上的数据分布情况
test=# SELECT gp_segment_id, count(*) test-# FROM t1 GROUP BY gp_segment_id; gp_segment_id | count ---------------+------- 4 | 1 14 | 1 15 | 1 3 | 1 8 | 1 10 | 1 9 | 1(7 rows)
检查各连接session的内存使用
当有sql语句因为内存异常的时候,我们可以通过这个方法去检查内存使用情况。
1. 输入数据库名字,执行
$ psql -d db_name -f $GPHOME/share/postgresql/contrib/gp_session_state.sql
- 查询
test=# SELECT * from session_state.session_level_memory_consumption ; datname | sess_id | usename | current_query | segid | vmem_mb | is_runaway | qe_count | active_qe_count | dirty_qe_count | runaway_vmem_mb | runaway_command_cnt -----------------+---------+---------+----------------------------------------------------------------+-------+---------+------------+----------+-----------------+----------------+-----------------+--------------------- test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 0 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 8 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 4 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 10 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 11 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 15 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 6 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 3 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 13 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 5 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 2 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 12 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 1 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 7 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 9 | 2 | f | 1 | 1 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | 14 | 2 | f | 1 | 1 | -1 | 0 | 0 | 6 | | | -1 | 1 | f | 1 | 1 | -1 | 0 | 0 postgres | 9 | gpadmin | <IDLE> | -1 | 1 | f | 1 | 0 | -1 | 0 | 0 db_jiaotongting | 18 | gpadmin | <IDLE> | -1 | 2 | f | 1 | 0 | -1 | 0 | 0 db_jiaotongting | 19 | gpadmin | <IDLE> | -1 | 2 | f | 1 | 0 | -1 | 0 | 0 test4 | 473 | gpadmin | <IDLE> | -1 | 2 | f | 1 | 0 | -1 | 0 | 0 test | 79 | gpadmin | SELECT * from session_state.session_level_memory_consumption ; | -1 | 9 | f | 1 | 1 | -1 | 0 | 0 postgres | 76 | gpadmin | <IDLE> | -1 | 4 | f | 1 | 0 | -1 | 0 | 0 postgres | 472 | gpadmin | <IDLE> | -1 | 2 | f | 1 | 0 | -1 | 0 | 0 db_jiaotongting | 474 | gpadmin | <IDLE> | -1 | 2 | f | 1 | 0 | -1 | 0 | 0(25 rows)test=# SHOW runaway_detector_activation_percent; runaway_detector_activation_percent ------------------------------------- 90(1 row)
blocksize
在创建表的时候,可以选择blocksize,也可以为个别列指定blocksize。
blocksize过大,会导致内存消耗过大,而且磁盘IO也有影响。如果对于客户数据量不大的情况,为了提升性能,可以考虑手工配置blocksize为较小的值。
配置范围:8192 到 2097152字节,默认是32768
数据库操作
不支持跨库查询(cross-query between databases)。
所有数据库都支持作为模板,新建的数据库会包含模板库的所有主体(objects)和数据。
常用系统模式system schemas
pg_catalog
information_schema
pg_toast
pg_bitmapindex
pg_aoseg
gp_toolkit
- 再读greenplum的admin guide文档
- 再读华为代码规范文档
- Spring Boot Admin Reference Guide
- Magento Admin 官方文档
- color admin_color admin bootstrap 4_color admin 文档-本人非常喜欢的 angular ui
- 再读《平凡的世界》
- 再读她的博客
- 再读《你的灯还亮着吗》
- 再读《撒哈拉的故事》
- 把django admin的文档docs调出来!
- bk-quantum-admin-guide-grizzly阅读总结
- greenplum初始化的过程
- greenplum集群的安装
- Greenplum的安装
- Greenplum的一些资源
- greenplum的用法
- 再读陈先生的书
- 再读MFC的消息机制
- 【u123】最大子段和
- 快递查询接口(trackingmore)
- CGI程序中POST和GET消息的处理
- Virtualbox虚拟机安装CentOS6.5图文详细教程
- 开发中用到的第三方库
- 再读greenplum的admin guide文档
- java的断言(assert)
- 严格模式
- Pinpoint 快速开始
- 通用post方法
- You can't specify target table 't' for update in FROM clause
- 终于要写博客了
- jquery的$.extend和$.fn.extend的使用详解
- 排序算法