GreenPlum_常用数据库命令
- 格式:doc
- 大小:258.50 KB
- 文档页数:12
gpconfig参数gpconfig参数是Greenplum数据库中用于配置和管理数据库的一组参数。
这些参数可以通过gpconfig命令进行设置和修改。
本文将介绍一些常用的gpconfig参数及其作用。
1. gp_vmem_protect_limit该参数用于限制Greenplum数据库的虚拟内存使用量。
通过设置该参数,可以避免数据库使用过多的虚拟内存导致系统崩溃。
可以根据实际情况调整该参数的值,以平衡内存使用和系统稳定性。
2. gp_resqueue_memory_policy该参数用于设置Greenplum数据库中资源队列的内存分配策略。
资源队列是用于管理并发查询的一种机制,通过设置该参数,可以控制不同用户或组的查询在内存中的优先级。
可以根据实际需求,设置不同的内存分配策略,以实现资源的合理分配和查询的优化。
3. gp_max_connections该参数用于设置Greenplum数据库的最大连接数。
连接数是指同时连接到数据库的客户端数量。
通过设置该参数,可以限制数据库的并发连接数,以避免系统资源过度消耗和性能下降。
可以根据系统的硬件配置和负载情况,适当调整该参数的值。
4. gp_workfile_limit该参数用于设置Greenplum数据库中工作文件的最大限制。
工作文件是在查询执行过程中临时存储中间结果的文件。
通过设置该参数,可以限制工作文件的大小,以避免磁盘空间的过度消耗和查询的性能下降。
可以根据系统的磁盘容量和查询的需求,调整该参数的值。
5. gp_autostats_mode该参数用于控制Greenplum数据库中自动统计信息的收集方式。
统计信息是用于优化查询计划的一种关键信息。
通过设置该参数,可以指定统计信息的收集方式,如自动收集、手动收集或禁止收集。
可以根据数据库的特点和查询的需求,选择合适的统计信息收集方式。
6. gp_enable_gpperfmon该参数用于启用或禁用Greenplum数据库中的性能监控功能。
greenplum where exists语句在Greenplum数据库中,WHERE EXISTS 语句用于检查子查询是否返回任何行。
如果子查询返回至少一行结果,则主查询中的条件被认为是满足的。
以下是一个示例,演示了在Greenplum数据库中使用WHERE EXISTS 的基本语法:SELECT column1, column2, ...FROM your_tableWHERE EXISTS (SELECT 1FROM another_tableWHERE condition);在这个例子中,your_table 是主查询中的表,another_table 是子查询中的表,condition 是用于指定匹配条件的表达式。
如果子查询返回任何行,主查询中的条件就被认为是满足的,从而选择相应的行。
请注意,关键是使用 SELECT 1,而不是 SELECT *,因为我们只关心是否存在结果,而不关心具体的列值。
这有助于提高性能,因为它减少了子查询返回的数据量。
以下是一个更具体的示例:SELECT employee_id, employee_nameFROM employeesWHERE EXISTS (SELECT 1FROM projectsWHERE projects.employee_id = employees.employee_id AND projects.status = 'In Progress');在这个例子中,主查询选择了员工表中的某些列,但只有当子查询中的项目表中存在与员工关联的项目,并且项目的状态为'In Progress' 时,才会选择该员工。
GP数据库函数概述GP数据库函数是指在GP(Greenplum)数据库中使用的函数。
GP数据库是一种分布式关系型数据库,可用于大数据量的数据存储和处理。
它的函数库提供了各种功能强大的函数,可以帮助用户进行数据处理、转换和分析等操作。
在本文中,我们将深入探讨GP数据库函数的各种功能和用法,包括函数的分类、常用函数示例和函数的编写等方面。
GP数据库函数的分类GP数据库函数可以分为以下几类:1. 数学函数数学函数主要用于数值运算和计算。
它们可以执行常见的数学运算,如加法、减法、乘法和除法,还可以进行高级数值计算,如三角函数、指数函数和对数函数等。
以下是一些常用的数学函数示例:•abs(): 返回一个数的绝对值。
•sqrt(): 返回一个数的平方根。
•sin(): 返回一个角的正弦值。
2. 字符串函数字符串函数用于处理和操作字符串。
它们可以执行字符串的连接、截取、替换和格式化等操作。
以下是一些常用的字符串函数示例:•concat(): 将两个或多个字符串连接起来。
•substring(): 返回一个字符串的子串。
•replace(): 替换一个字符串中的指定内容。
3. 日期和时间函数日期和时间函数用于处理日期、时间和时间间隔。
它们可以执行日期的加减运算、格式化和比较等操作。
以下是一些常用的日期和时间函数示例:•current_date(): 返回当前日期。
•date_part(): 返回日期的指定部分,如年、月、日等。
•interval(): 创建一个时间间隔。
4. 聚合函数聚合函数用于计算数据的汇总值,如平均值、总和、最大值和最小值等。
它们通常用于与GROUP BY语句一起使用,对数据进行分组并计算每个分组的汇总值。
以下是一些常用的聚合函数示例:•avg(): 计算一组数的平均值。
•sum(): 计算一组数的总和。
•max(): 返回一组数中的最大值。
5. 窗口函数窗口函数用于在查询结果的窗口内执行计算。
Greenplum 数据库的`regexp_replace` 函数是一个非常有用的工具,用于在字符串中执行正则表达式匹配,并将匹配的结果替换为新的字符串。
这个函数在数据清洗和文本处理中特别有用。
`regexp_replace` 函数的语法如下:```sqlregexp_replace(string, pattern, replacement [, flags])```* `string`:要进行处理的字符串。
* `pattern`:正则表达式模式,用于匹配要替换的字符串部分。
* `replacement`:替换匹配部分的字符串。
* `flags`(可选):控制匹配行为的标志。
可用的标志包括:+ `i`:执行不区分大小写的匹配。
+ `c`:执行区分大小写的匹配。
+ `n`:点号(.)不匹配换行符。
+ `m`:执行多行模式匹配。
+ `x`:启用扩展模式,忽略正则表达式中的空白字符。
这里有一些使用`regexp_replace` 的例子:1. 将字符串中的所有"apple" 替换为"orange":```sqlSELECT regexp_replace('I like apple pie.', 'apple', 'orange');```输出结果为'I like orange pie.'2. 使用不区分大小写的替换:```sqlSELECT regexp_replace('I LIKE APPLES AND BANANAS.', 'apple','orange', 'i');```输出结果为'I LIKE ORANGES AND BANANAS.'3. 使用多行模式替换:```sqlSELECT regexp_replace('apple\nbanana\neggplant', 'a', 'o', 'm');```输出结果为'ooloo\nbonono\neggplot',注意"banana" 的第一个字母没有改变。
一、介绍Greenplumn是一个并行化的关系数据库管理系统,它是PostgreSQL的一个扩展,可以用于处理大规模数据。
在Greenplumn数据库中,我们可以通过SQL语句来进行数据查询和操作。
下面将通过示例介绍一些常用的Greenplumn数据库查询语句。
二、SELECT语句示例1. 查询所有数据```sqlSELECT * FROM table_name;```以上语句将返回table_name表中的所有数据。
2. 查询指定字段数据```sqlSELECT column1, column2 FROM table_name;```以上语句将返回table_name表中的column1和column2字段的数据。
3. 查询并排序```sqlSELECT * FROM table_name ORDER BY column_name DESC; ```以上语句将返回table_name表中的所有数据,并按照column_name字段降序排序。
4. 查询并限制结果集```sqlSELECT * FROM table_name LIMIT 10;```以上语句将返回table_name表中的前10条数据。
5. 使用聚合函数```sqlSELECT COUNT(column_name) FROM table_name;```以上语句将返回table_name表中column_name字段的数量。
三、INSERT语句示例1. 插入单行数据```sqlINSERT INTO table_name (column1, column2) VALUES (value1,value2);```以上语句将在table_name表中插入一行数据,值为value1和value2。
2. 插入多行数据```sqlINSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), (value5, value6);```以上语句将在table_name表中插入多行数据。
Greenplum常⽤命令、函数Greenplum常⽤查询命令#查看test_bd事务(即数据库)下的所有表名包含 user 的表信息SELECT UPPER(A.SCHEMANAME) AS SCHEMANAME, UPPER(A.TABLENAME) AS TABLENAME,D.ATTRELID,D.ATTRELID :: regclass,UPPER(D.ATTNAME) AS ATTNAME,REPLACE(REPLACE(REPLACE(FORMAT_TYPE(D.ATTTYPID, D.ATTTYPMOD),'numeric','NUMBER'),'character varying','VARCHAR2'),'date','DATE') AS DATA_TYPE,E.DESCRIPTIONFROM PG_TABLES AS AINNER JOIN PG_CLASS AS B ON A.TABLENAME = B.RELNAMELEFT JOIN PG_CATALOG.PG_DESCRIPTION AS E ON B.OID = E.OBJOIDLEFT JOIN PG_CATALOG.PG_ATTRIBUTE AS D ON D.ATTRELID = E.OBJOID AND D.ATTNUM = E.OBJSUBIDWHERE SCHEMANAME ='test_bd'AND A.TABLENAME LIKE'%user%'AND D.ATTNUM >0ORDER BY A .TABLENAME,D.ATTNUM select pg_size_pretty(pg_database_size('gp_db')); #查看gp数据库⼤⼩ select gp_segment_id,count(*) from db_name.tb_name group by gp_segment_id; #查看数据分布情况1.创建数据库 createdb test_db;2.删除数据库 dropdb test_db;3.创建模式 create schema myschema;4.删除模式 drop schema myschema;5.创建⽤户 create user user_name with password '123456' ;6.删除⽤户 drop user user_name;7.查看系统⽤户信息 select usename from pg_user;8.查看版本信息 select version();9.打开psql交互⼯具 psql name_db;10.执⾏sql⽂件 mydb=> \i basics.sql \i 命令从指定的⽂件中读取命令。
Greenplum 日常简明维护手册1. 数据库启动:gpstart 提示选择Y…常用参数: -a : 直接启动,不提示终端用户输入确认-q : 不希望屏幕输出-m:只启动master 实例,主要在故障处理时使用-R:只启动数据库在受限模式,禁止非超级用户登陆.-y:启动数据,但不启动standby启动完毕可使用gpstate查看数据库状态2. 数据库停止:gpstop 提示选择Y…常用参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f(-m faster):停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
关闭完毕后可使用gpssh控制所有服务器查看postgres进程是否已经都不存在,下面命令显示为1则表明数据库所有进程已经关闭完毕.gpadmin@dsszbyz-dw6-mst01:~> gpssh -f host_all=> ps -ef|grep postgres |wc -l[ sdw1] 1[sdw2] 1[ mdw] 1[ sdw3] 1[ smdw] 1[ sdw4] 1[ ftp1] 1=>exit3. 登陆数据库:psql登录数据库方式:psql –d 数据库名–u 用户名可以先使用psql -d template1登陆默认实例,然后使用select * from pg_database;查看已经安装的数据库名,然后登陆相应数据库。
退出psql 使用\q.使用应用模式访问单个数据实例():PGOPTIONS='-c gp_session_role=utility' psql template1 -p 54324. 查看实例配置和状态:gpstate常用参数:-c:显示primary instance和mirror instance的对应关系-m:显示mirror的状态-f:显示standby的状态(是否配置,是否同步)-e:显示错误节点的详细信息。
Greenplum数据库通过sql查询表结构,拼装建表语句Greenplum数据库通过sql查询表结构,拼装建表语句在greenplum中pg_catalog是存储数据库基本元数据的表,information_schema ⾥包含了⼤量的视图,实现了类似mysql中information_schema ⽐较易读的数据库元数据管理的功能。
greenplum 的pg_catalog 库包含的数据表基本都⽤oid关联,其中oid是全局id,最⼤42亿,可重置,也可循环使⽤。
1,查询表结构selectattname, -- 字段名typname,-- 类型CASE WHEN pg_truetypmod =-1/* default typmod */THEN nullWHEN pg_truetypid IN (1042, 1043) /* char, varchar */THEN pg_truetypmod -4WHEN pg_truetypid IN (1560, 1562) /* bit, varbit */THEN pg_truetypmodELSE null end type_max_length, -- 获取变长类型最⼤长度is_null, -- 是否空default_data, -- 默认值isunique, -- 是否唯⼀索引isprimary, -- 是否主键is_index, --是否索引distribution, -- 是否分布键description -- 注释from(SELECTt1.attname,t2.typname,case when t1.attnotnull=true then'Y'else''end is_null ,t3.description,t4.adbin as default_data, -- 默认值case when t5.attrnums is not null then'Y'else null end distribution, -- 分布键t6.indisunique isunique,t6.indisprimary isprimary,case when t6.indkey is not null then'Y'else null end is_index,t1.attnum, -- 字段位置顺序CASE WHEN t2.typtype ='d'THEN t2.typbasetype ELSE t1.atttypid END pg_truetypid,CASE WHEN t2.typtype ='d'THEN t2.typtypmod ELSE t1.atttypmod END pg_truetypmodFROMpg_attribute t1 -- 属性left join pg_type t2 on t1.atttypid = t2.oid -- 类型left join "pg_catalog"."pg_description" t3 on t1.attrelid=t3.objoid and t3.objsubid = t1.attnum -- 注释left join pg_attrdef t4 on t4.adrelid = t1.attrelid AND t4.adnum = t1.attnum -- 默认值left join gp_distribution_policy t5 on t5.localoid = t1.attrelid and t1.attnum =any(t5.attrnums) -- 分布键left join pg_index t6 on t6.indrelid=t1.attrelid and t1.attnum =any(t6.indkey) -- 索引,主键等WHEREt1.attnum >0AND t1.attisdropped <>'t'and t1.attrelid='table_schema.table_name'::regclass) ttorder by attnum;2,简洁版SELECTt1.attname,t2.typname,format_type (t1.atttypid, t1.atttypmod) AS TYPE,case when t1.attnotnull=true then'is not null 'else null end is_null ,col_description (t1.attrelid, t1.attnum) AS comment,t4.adbin as default_attr, -- 默认值case when t5.attrnums is not null then'Y'else null end distribution,end is_index,t1.attnum -- 字段位置顺序FROMpg_attribute t1 -- 属性left join pg_type t2 on t1.atttypid = t2.oid -- 类型left join pg_attrdef t4 on t4.adrelid = t1.attrelid AND t4.adnum = t1.attnum -- 默认值left join gp_distribution_policy t5 on t5.localoid = t1.attrelid and t1.attnum =any(t5.attrnums)left join pg_index t6 on t6.indrelid=t1.attrelid and t1.attnum =any(t6.indkey)WHEREt1.attnum >0AND t1.attisdropped <>'t'and t1.attrelid='resumes.base_common'::regclassorder by attnum;。
GreenPlum-数据存储⽬录迁移及常⽤操作⼀、环境介绍Greenplum5 3节点集群,Centos7.2虚拟机,⼆、需求因为/home⽬录磁盘空间已满,需要将Greenplum的数据存储⽬录转移到新的分区/opt⽬录下,虚拟机磁盘管理没有⽤LVM逻辑卷管理,⽆法动态扩容/home。
三、解决⽅案⼀般Greenplum不⽀持移动它的⽬录,但是可以通过以下两种⽅案实现Greenplum的数据存储⽬录的更改:1.移动⽬录并在其旧位置创建符号链接到新位置。
例如:#如果以前使⽤"/home/data/master"⽬录,需要移动到"/opt/data2/master",移动前备份mv /home/data/master /opt/data2/master#则可以⽤符号链接"/data/master - >/data2/master",创建软链接ln -s /opt/data2/master /home/data/master#这⾥讲解下软硬连接的区别:ln -s and ln硬连接(ln):⽂件名就相当于⼀个硬连接(指针),当为⼀个⽂件再建⽴⼀个硬连接后相当于⼜增加了⼀个指向⽂件存储地的指针,当原⽂件名⽂件删除后,新建硬连接依旧可以访问数据。
软连接(ln -s):当原⽂件名⽂件被删除后,软连接失效。
软硬连接都不会增加存储⼤⼩,这⾥使⽤软连接是因为硬连接⽆法跨分区建⽴。
2.如果为测试系统,不考虑数据。
使⽤“gpdeletesystem”删除旧系统并在新⽬录中重新初始化它四、常⽤操作重置环境:解决不能解决的⼀系列问题1.删除主节点中gpdata下的master与⽂件存储⽬录,副节点也同样删除⽂件存储⽬录。
2.切换gpadmin⽤户,配置.bash_profile环境,例如:source /opt/greenplum/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1export PGPORT=5432export PGDATABASE=postgres #默认进⼊的dbsource .bash_profile3.查看初始化init脚本是否正确4.初始化数据库,node4为master的备份节点,这⾥若不成功则配置有错。
Greenplum 日常简明维护手册1.数据库启动:gpstart常用参数:-a : 直接启动,不提示终端用户输入确认-m:只启动master 实例,主要在故障处理时使用访问单个数据实例:PGOPTIONS='-c gp_session_role=utility' psql template1 -p 5432启动某个segment instance :pg_ctl stop/start -D /datadir/取端口号:select * from gp_segment_configuration启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。
2.数据库停止:gpstop:常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
连接数,重启3.查看实例配置和状态select * from gp_segment_configuration order by content ;select * from pg_filespace_entry ;主要字段说明:Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror Instance)Isprimary:实例是否作为primary instance 运行Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。
Port:实例运行的端口Datadir:实例对应的数据目录4.gpstate :显示Greenplum数据库运行状态,详细配置等信息常用可选参数:-c:primary instance 和mirror instance 的对应关系-m:只列出mirror 实例的状态和配置信息-f:显示standby master 的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常巡检。
5.查看用户会话和提交的查询等信息select * from pg_stat_activity 该表能查看到当前数据库连接的IP 地址,用户名,提交的查询等。
另外也可以在master 主机上查看进程,对每个客户端连接,master 都会创建一个进程。
ps -ef |grep -i postgres |grep -i con杀进程:Linux:kill -11 PIDSql :pg_cancel_backend(pid)ps –ef |grep – i postgre |grep –i con6.查看数据库、表占用空间查询表大小:select pg_size_pretty(pg_relation_size('schema.tablename'));例: select pg_size_pretty(pg_relation_size('iidp_code.cf_load_state'));表和索引select pg_size_pretty(pg_total_relation_size('iidp_code.cf_load_state '));查询数据库大小select pg_size_pretty(pg_database_size('databasename'));例:select pg_size_pretty(pg_database_size('BDDJ_S_T'));--单个库select datname,pg_size_pretty(pg_database_size(datname)) from pg_database; --所有库分区表:Select *from pg_partitions where …查某个schema 占用的空间:select pg_size_pretty(pg_relation_size(tablename)) from pg_tables t inner join pg_namespace d on t.schemaname=d.nspname group by d.nspname必须在数据库所对应的存储系统里,至少保留30%的自由空间,日常巡检,要检查存储空间的剩余容量。
7.收集统计信息,回收空间定期使用Vacuum analyze tablename 回收垃圾和收集统计信息,尤其在大数据量删除,导入以后,非常重要将delete 或update 的“旧”数据放到Rollback Segment,与表分开存放。
并发事务为了保证数据一致性,需要从Rollback Segment 上恢复数据。
Greenplum:“旧数据”与表存放在一起,对旧的数据做了标志。
并发事务通过transaction ID(XID)判断数据是否可用系统表也是需要进行vacuum:#!/bin/bashDBNAME="databasename"VCOMMAND="VACUUM ANALYZE"#VCOMMAND="VACUUM FULL ANALYZE"psql -tc "select '$VCOMMAND' || ' pg_catalog.' || relname || ';' from pg_classa,pg_namespace b where a.relnamespace=b.oid and b.nspname= 'pg_catalog' anda.relkind='r'" $DBNAME | psql -a $DBNAME长期没有vaccum 的大表,使用重建表/drop 表的方式,消除垃圾空间。
Alter table xxx rename to yyyy.8.查看数据分布情况两种方式:Select gp_segment_id,count(*) from tablename group by 1 ;如数据分布不均匀,将发挥不了并行计算的优势,严重影响性能。
查看磁盘分布select dfhostname, dfspace,dfdevice from gp_toolkit.gp_disk_free order by dfhostname 9.实例恢复:gprecoverseg通过gpstate 或gp_segment_configuration 发现有实例down 掉以后,使用该命令进行回复,恢复时候不需要停机,不影响应用10.查看锁信息:SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, l.pid,l.mode, l.granted, a.current_queryFROM pg_locks l, pg_class c, pg_stat_activity aWHERE l.relation=c.oid AND l.pid=a.procpidORDER BY c.relname;主要字段说明:relname: 表名locktype、mode 标识了锁的类型MVCC: 读写相互不影响select / insert update delete避免死锁:delete 和update 是表级排他EXCLUSIVE锁。
11.数据库备份gp_dump, pg_dump常用参数:-s: 只导出对象定义(表结构,函数等)-n: 只导出某个schemagp_dump 默认在master 的data 目录上产生这些文件:gp_catalog_1_<dbid>_<timestamp> :关于数据库系统配置的备份文件gp_cdatabase_1_<dbid>_<timestamp>:数据库创建语句的备份文件gp_dump_1_<dbid>_<timestamp>:数据库对象ddl语句gp_dump_status_1_<dbid>_<timestamp>:备份操作的日志在每个segment instance 上的data目录上产生的文件:gp_dump_0_<dbid>_<timestamp>:用户数据备份文件gp_dump_status_0_<dbid>_<timestamp>:备份日志12.数据库恢复gp_restore pg_restore必选参数:--gp-k=key :key 为gp_dump 导出来的文件的后缀时间戳-d dbname :将备份文件恢复到dbname13.Master主机硬件故障时,如何切换至Stand by Master,切换成功后是否需要进行数据检查或恢复等HA答:在stand by master 主机上,运行gpactivatestandby -d /gpdata 进行切换。
由于Master 只存储系统元数据信息,切换成功后,一般不需要进行数据检查和恢复。
日常巡检中要检查Stand by master 是否同步,可以通过表gp_master_mirroring 确认,如果发现不同步,可以通过命令:gpinitstandby -sstandby_master_hostname –n 使得master和standby 重新同步。
14.当Master主机硬件故障排除时,如何由Stand by切换至原Master主机。
答:1,在standby master运行:gpinitstandby –s original_master_hostname2,在standby master 上运行:gpstop –m,注意这里只停止master 实例3,在原来的maste上运行:gpactivatestandby -d /gpdata。
4,在原来的master上运行:gpinitstandby -s original_standby_master_hostname15.日志:master 和segment 上分别有日志:$DATADIR/pg_log/*.csv$DATADIR:select * from pg_filespace_entry ;使用外部表将日志导入数据库,进行分析。
使用xfs 文件系统。