Deepgreen & Greenplum DBA小白普及课之一(一般问题解答)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力。本文参考Pivotal官方FAQ,对一些在使用和管理Deepgreen & Greenplum时经常会遇到的普通问题进行讲解。
不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力。本文参考Pivotal官方FAQ,对一些在使用和管理Deepgreen & Greenplum时经常会遇到的普通问题进行解答。希望对大家有所帮助,如果有朋友有更多的问题分享,请留言,我将一并整理。

下面单刀直入,开始问题浏览及解决思路梳理:

1.如何检查一张表的分区策略?
测试表:region
表的详细描述信息可以展示其分区策略:Distributed by: (r_regionkey)
tpch=# \d region
                             Append-Only Columnar Table "public.region"
   Column    |          Type          |                          Modifiers                           
-------------+------------------------+--------------------------------------------------------------
 r_regionkey | integer                | not null default nextval('region_r_regionkey_seq'::regclass)
 r_name      | character(25)          |
 r_comment   | character varying(152) |
Checksum: t
Distributed by: (r_regionkey)
2.如何查看数据库中有多少用户模式?
在psql中使用\dn进行查看
tpch=# \dn
       List of schemas
        Name        |  Owner 
--------------------+---------
 gp_toolkit         | dgadmin
 information_schema | dgadmin
 pg_aoseg           | dgadmin
 pg_bitmapindex     | dgadmin
 pg_catalog         | dgadmin
 pg_toast           | dgadmin
 public             | dgadmin
(7 rows)
3.如何查看我的表上一次ANALYZE的时间?
测试表:region
通过pg_stat_operations视图可以查看任何对象的所有操作
tpch=# select objname,actionname,statime from pg_stat_operations  where objname like 'region';
 objname | actionname |            statime           
---------+------------+-------------------------------
 region  | CREATE     | 2017-05-21 00:32:28.672208+08
 region  | ANALYZE    | 2017-06-30 06:55:57.658525+08
(2 rows)
4.如何查看表的大小?
测试表:customer,在模式public下
查看表的大小:
tpch=# select pg_size_pretty(pg_relation_size('public.customer'));
 pg_size_pretty
----------------
 122 MB
(1 row)
查看表和索引的大小:
tpch=# select pg_size_pretty(pg_total_relation_size('public.customer'));
 pg_size_pretty
----------------
 155 MB
(1 row)
5.如何查看模式(schema)大小?
测试模式:public,查询时只需将下面where条件schemaname=后的public替换成你要查询的schema名称即可。
tpch=# select schemaname ,round(sum(pg_total_relation_size(schemaname||'.'||tablename))/1024/1024) "Size_MB" from pg_tables where schemaname='public' group by 1;
 schemaname | Size_MB
------------+---------
 public     |   10698
(1 row)
6.如何查看数据库大小?
测试数据库:tpch,你查询时只需要替换括号里的tpch为你需要的数据库即可
tpch=# select pg_size_pretty(pg_database_size('tpch'));
 pg_size_pretty
----------------
 10 GB
(1 row)
查看所有数据库的大小:
tpch=# select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
  datname  | pg_size_pretty
-----------+----------------
 tpch      | 10 GB
 postgres  | 111 MB
 tpch_1g   | 1100 MB
 template1 | 29 MB
 template0 | 27 MB
(5 rows)
7.如何查看分区表大小(包括分区和索引)?
测试表:employee_daily
select schemaname,tablename,round(sum(pg_total_relation_size(schemaname "" '.' "" partitiontablename))/1024/1024) "MB"
from pg_partitions where tablename='employee_daily' group by 1,2;
schemaname " tablename      " MB
-----------+----------------+-----
public     " employee_daily " 254
8.如何查看修改表的语法帮助?
在psql中使用【\h +待查语法】:
tpch=# \h alter table
Command:     ALTER TABLE
Description: change the definition of a table
Syntax:
ALTER TABLE [ONLY] name RENAME [COLUMN] column TO new_column

ALTER TABLE name RENAME TO new_name

ALTER TABLE name SET SCHEMA new_schema

ALTER TABLE [ONLY] name SET
     DISTRIBUTED BY (column, [ ... ] )
   | DISTRIBUTED RANDOMLY
   | WITH (REORGANIZE=true|false)

ALTER TABLE [ONLY] name action [, ... ]

ALTER TABLE name
   [ ALTER PARTITION { partition_name | FOR (RANK(number))
                     | FOR (value) } partition_action [...] ]
   partition_action

where action is one of:
  ADD [COLUMN] column_name type
      [ ENCODING ( storage_directive [,...] ) ]
      [column_constraint [ ... ]]
  DROP [COLUMN] column [RESTRICT | CASCADE]
  ALTER [COLUMN] column TYPE type [USING expression]
  ALTER [COLUMN] column SET DEFAULT expression
  ALTER [COLUMN] column DROP DEFAULT
  ALTER [COLUMN] column { SET | DROP } NOT NULL
  ALTER [COLUMN] column SET STATISTICS integer
  ADD table_constraint
  DROP CONSTRAINT constraint_name [RESTRICT | CASCADE]
  DISABLE TRIGGER [trigger_name | ALL | USER]


tpch=# \h create index
Command:     CREATE INDEX
Description: define a new index
Syntax:
CREATE [UNIQUE] INDEX name ON table
       [USING btree|bitmap|gist]
       ( {column | (expression)} [opclass] [, ...] )
       [ WITH ( FILLFACTOR = value ) ]
       [TABLESPACE tablespace]
       [WHERE predicate]
9.如何从Master主机连接到Master或者Segment实例的系统模式?
dgadmin@flash:~$ PGOPTIONS='-c gp_session_role=utility' psql -p 25432 -h flash -d postgres
psql (8.2.15)
Type "help" for help.
postgres=# \q
其中-p后面接master或者segment的端口号,-h后面接对应的master或者segment主机名,-d后面接数据库名

10.从哪里看数据库日志信息?
Master主机:
Master节点的数据库日志存在$MASTER_DATA_DIRECTORY/pg_log/目录下,文件名根据数据库的log_filename参数生成。
dgadmin@flash:~$ gpconfig -s log_filename
Values on all segments are consistent
GUC          : log_filename
Master  value: gpdb-%Y-%m-%d_%H%M%S.csv
Segment value: gpdb-%Y-%m-%d_%H%M%S.csv
     默认安装的日志文件格式为:$MASTER_DATA_DIRECTORY/pg_log/gpdb-yyyy-mm-dd_000000.csv
     gpstart\gpstop\gpstate和另外utility生成的日志存储在:~gpadmin/gpAdminLogs/目录下
Segment主机:
     Primary Segment日志位置用下面语句查询:select dbid,hostname,datadir||'/pg_log' from gp_configuration where content not in (-1) and isprimary is true;
     Mirror Segment日志位置用下面语句查询:Primary Segment日志位置用下面语句查询:select dbid,hostname,datadir||'/pg_log' from gp_configuration where content not in (-1) and isprimary is false;
11.如何查看函数列表?
在psql界面执行:\df schemaname.functionname (schemaname and function name support wildcard characters)
例如:
tpch=# \df pub*.*test*
                       List of functions
 Schema "   Name      " Result data type " Argument data types
--------+-------------+------------------+---------------------
 public " bugtest     " integer          "
 public " test        " boolean          " integer
 public " test        " void             "
(3 rows)
12.如何检查数据库运行状态是否正常?
gpstate是数据库状态检查的一个组件,可以使用gpstate -Q快速查看数据库状态。
dgadmin@flash:/dgdata/primary/dg0/pg_log$ gpstate -Q
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-Starting gpstate with args: -Q
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.99.00 build Deepgreen DB'
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.99.00 build Deepgreen DB) on x86_64-unknown-linux-gnu, compiled by GCC gcc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4 compiled on May 18 2017 05:19:19'
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-Obtaining Segment details from master...
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:--Quick Greenplum database status from Master instance only
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-----------------------------------------------------------
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-# of up segments, from configuration table     = 4
20170701:07:09:37:027224 gpstate:flash:dgadmin-[INFO]:-----------------------------------------------------------
13.如何查看数据库总列表?
在psql界面执行\l (英文字母L的小写):
postgres=# \l
                  List of databases
   Name    |  Owner  | Encoding |  Access privileges 
-----------+---------+----------+---------------------
 postgres  | dgadmin | UTF8     |
 template0 | dgadmin | UTF8     | =c/dgadmin         
                                : dgadmin=CTc/dgadmin
 template1 | dgadmin | UTF8     | =c/dgadmin         
                                : dgadmin=CTc/dgadmin
 tpch      | dgadmin | UTF8     |
 tpch_1g   | dgadmin | UTF8     |
(5 rows)
也可以通过下面sql查询更详细的信息:
postgres=# select * from pg_database;
  datname  | datdba | encoding | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datconfig |              datacl             
-----------+--------+----------+---------------+--------------+--------------+---------------+--------------+---------------+-----------+----------------------------------
 tpch      |     10 |        6 | f             | t            |           -1 |         10898 |          888 |          1663 |           |
 postgres  |     10 |        6 | t             | t            |           -1 |         10898 |          888 |          1663 |           |
 tpch_1g   |     10 |        6 | f             | t            |           -1 |         10898 |          888 |          1663 |           |
 template1 |     10 |        6 | t             | t            |           -1 |         10898 |          888 |          1663 |           | {=c/dgadmin,dgadmin=CTc/dgadmin}
 template0 |     10 |        6 | t             | f            |           -1 |         10898 |          888 |          1663 |           | {=c/dgadmin,dgadmin=CTc/dgadmin}
(5 rows)
14.如何查看当前你的连接用户是谁?
在psql界面执行\c:
postgres=# \c
You are now connected to database "postgres" as user "dgadmin".
15.如何查看psql命令的语法帮助?
在psql界面通过执行\h或者\?:
\h     显示任何SQL语法帮助
\?     显示所有psql命令语法帮助
16.如何创建一个数据库?
有两种创建数据库的方式:1)在psql界面用sql语句创建 2)在shell命令行使用createdb工具命令创建
postgres=# \h create database
Command:     CREATE DATABASE
Description: create a new database
Syntax:
CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] dbowner ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ TABLESPACE [=] tablespace ]
           [ CONNECTION LIMIT [=] connlimit ] ]
----------------------------------------------------
dgadmin@flash:~$ createdb --help
createdb creates a PostgreSQL database.

Usage:
  createdb [OPTION]... [DBNAME] [DESCRIPTION]

Options:
  -D, --tablespace=TABLESPACE  default tablespace for the database
  -e, --echo                   show the commands being sent to the server
  -E, --encoding=ENCODING      encoding for the database
  -O, --owner=OWNER            database user to own the new database
  -T, --template=TEMPLATE      template database to copy
  --help                       show this help, then exit
  --version                    output version information, then exit

Connection options:
  -h, --host=HOSTNAME          database server host or socket directory
  -p, --port=PORT              database server port
  -U, --username=USERNAME      user name to connect as
  -w, --no-password            never prompt for password
  -W, --password               force password prompt

By default, a database with the same name as the current user is created.

Report bugs to <pgsql-bugs@postgresql.org>.
17.如何删除一个数据库?
对应上条,删除数据库也有两种方式:psql界面和shell组件
postgres=# \h drop database
Command:     DROP DATABASE
Description: remove a database
Syntax:
DROP DATABASE [ IF EXISTS ] name
-------------------------------------------------
dgadmin@flash:~$ dropdb --help
dropdb removes a PostgreSQL database.

Usage:
  dropdb [OPTION]... DBNAME

Options:
  -e, --echo                show the commands being sent to the server
  -i, --interactive         prompt before deleting anything
  --help                    show this help, then exit
  --version                 output version information, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as
  -w, --no-password         never prompt for password
  -W, --password            force password prompt

Report bugs to <pgsql-bugs@postgresql.org>.
18.从哪可以下载Deepgreen和Greenplum的安装包?
同系列相关文章:
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
11月前
|
运维 关系型数据库 MySQL
MySQL DBA的必备参考,两位数据库资深专家呕心沥血之作
互联网发展至今,开源软件已经深入人心,并且受到广泛的支持和响应,很多公司在使用开源软件的同时也输出了一些好的开源产品。MySQL 作为当今世界.上最受欢迎的开源数据库产品之一,在很多互联网企业里起到了不可或缺的作用。由于MySQL的诸多特性,比如开源免费、灵活、轻量简单且越来越多的企业开始使用MySQL,在业界诞生了一大批相关从业者,他们研究MySQL的原理,探讨MySQL的架构,完善MySQL的运维,丰富MySQL的工具,促进MySQL的发展,我们称这些人为MySQL DBA,而本人也是其中之一,深感荣幸。
阿里大牛撰写"星耀级"MySQL DBA工作笔记!颠覆我对数据库的认知
MySQL是开源数据库方向的典型代表,它拥有成熟的生态体系,同时在可靠性、性能、易用性方面表现出色,它的发展历程见证了互联网的兴衰与成长。 在 DeveloperWeek 上曾发起一个调查,超过 3/5 的受访者使用 SQL,其中MySQL 以 38.9% 的使用率高居榜首,其后依次是 MongoDB(24.6%)、PostgreSQL(17.4%)、Redis(8.4%)和 Cassandra(3.0%)。毫无疑问,以MySQL为主的开源技术生态正变得越来越流行。同样的,对我们掌握MySQL也迫在眉睫。那么,接下来,就让小轩带领大家来深入了解MySQL吧!
|
Cloud Native 关系型数据库 分布式数据库
阿里云开源数据库PolarDB分布式版入门训练营开营报名中!
阿里云开源数据库PolarDB分布式版入门训练营开营啦!本次训练营共有三个课程+四个任务,大家可根据自身情况灵活安排个人时间完成哦。
阿里云开源数据库PolarDB分布式版入门训练营开营报名中!
|
算法 关系型数据库 数据库
德哥的PostgreSQL私房菜 - 史上最屌PG资料合集
看完并理解这些文章,相信你会和我一样爱上PostgreSQL,并成为PostgreSQL的布道者。 沉稳的外表无法掩饰PG炙热的内心 。 扩展阅读,用心感受PostgreSQL 内核扩展 《找对业务G点, 体验酸爽 - PostgreSQL内核扩展指南》https://yq.
57100 5
|
存储 关系型数据库 数据库
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构
347 0
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构
|
SQL 弹性计算 关系型数据库
|
SQL 关系型数据库 MySQL
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
1913 0
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
|
SQL NoSQL 关系型数据库
Postgre SQL进阶实战指南 | 开发者社区精选文章合集(四十一)
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,同时也是一种特性非常齐全的对象-关系型数据库管理系统自由软件。揭秘PostgreSQL,深入了解,走进实战玩转PostgreSQL 。
Postgre SQL进阶实战指南 | 开发者社区精选文章合集(四十一)
|
SQL 弹性计算 关系型数据库
冬季实战营第三期:MySQL数据库进阶实战(体验报告)
2月14日 动手实战-MySQL数据库快速部署实践 本实验提供一个Linux系统。首先,安装mysql;然后,执行mysql的常用操作;最后,学习基本的SQL语句。
125 0
|
SQL Oracle 关系型数据库
冬季实战营第三期:MySQL数据库进阶实战之MySQL数据库快速部署实践
本实验提供一个Linux系统。首先,安装mysql;然后,执行mysql的常用操作;最后,学习基本的SQL语句。