赞
踩
高斯数据库(GaussDB),是华为发布的国产自主研发数据库。核心可以算是在PostgreSQL9.2基础上的魔改,但自研比例已经相当高。现在基于分布式的关系型数据库GaussDB 200/300已在金融企业较多使用。
因版权要求这里对于其细节没有过多描述,建议学习高斯前先学习MySQl与Oracle,其内容都差不多。
客户端 | CN | GTM | DN |
---|---|---|---|
1监听服务 | |||
2请求链接服务 | |||
3权限验证 | |||
4发送执行脚本请求 | |||
5分配服务线程 | |||
6请求分配全局事物 | |||
7返回全局事物 | |||
8脚本解析优化 | |||
9发送执行计划给DN | |||
10启动线程执行脚本 | |||
11返回执行结果 | |||
12返回执行结果 | 12销毁线程 | ||
13关闭连接 | |||
14销毁线程 |
支持事务的启动、设置、提交、回滚。支持读已提交、读未提交两种隔离级别。采用MVCC两阶段锁方式,实现读写不堵塞。
可以采用客户端工具gspl、应用程序接口(JDBC、ODBC)、psql连接。
初始包含两个模板数据库template0、template1,和一个默认用户数据库postgres。使用命令创建数据库实际上是通过拷贝template0来实现。创建后可以查看、修改、删除数据库。注意:不支持跨库查询。
数据库字典表pg_database。
支持行存储或列存储。
存储方式 | 描述 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
行存 | 将表按行存储在磁盘 | 数据保存在一起,DML方便 | 查询时几列时所有数据都会涉及 | 1返回记录少,基于索引的点查询2DML操作多 |
列存 | 将表按列存储在磁盘 | 1查询时只有涉及的列会被读取2高效投影3任何列都可以为索引 | 1DML麻烦2选择后需重新组装 | 1关联、分组操作较多的统计分析查询2DML少3一次批量插入后查询4列较多5查询时涉及少数列 |
默认两个表空间pg_default、pg_global。也可以用户自定义表空间。
pg_default | 默认表空间,存储非共享系统表、用户表、用户索引、临时表、临时索引、内部临时表 |
pg_global | 共享表空间,存储共享系统表 |
表空间字典表:pg_tablespace
查询表空间使用率:select PG_TABLESPACE_SIZE(‘表空间名’)
schema又叫模式,用于管理权限。高斯同样存在用户与角色,与模式类似但管理权限角度不同。
每个库中都有一个pg_catalog_schema,包含系统表和所有内置数据类型、函数、操作符。
支持范围分区:将数据基于范围映射到每一个分区。
按索引方式分支持:唯一索引、多字段索引、部分索引(建立在一个表的子集上,这种索引方式只包含满足条件表达式的元组)、表达式索引。
可以在分区表上建立分区索引。
通过序列使某字段成为唯一标识符有两种方法:
1声明字段类型为序列整型,由数据库在后台自动创建一个对应的Sequence
2使用CREATE SEQUENCE创建一个序列,然后将nextval(‘序列名’)函数值作为字段值。
兼容Oracle定时任务功能。
1.先建存储过程 create or replace procedure xxx;
2.建定时任务 call dbe_task_submit(‘call 存储过程名’,sysdate,‘interval “1 minute”’,a);
1分钟调用一次存储过程。
视图my_jobs可以查看当前用户创建的任务信息。
停止任务 call dbe_task.finish(1,true);
启动任务 call dbe_task.finish(1,false);
修改任务 call dbe_task_next_time(1,sysdate+1.0/24);改成1小时后执行
pg_job表存储了任务的权限信息。
参数job_queue_processes为0时表示关闭定时任务功能,大于0时表示其并发数。
与Mysql类似
方式 | 描述 | 适用 |
---|---|---|
Hash | 通过Hash方式散列到集群中多有DN上 | 数据量大 |
Replication | 每个DN全量复制 | 数据量小 |
Range | 对指定列进行范围映射到不同DN,范围分布 | 根据范围部分 |
List | 对指定列进行值规则映射,值规则分布 | 根据值类型分布 |
分布键的选择非常重要,选择不当会导致数据倾斜。
表分区为物理数据分散,表分布为逻辑分布。互不影响。
1.查询系统中长时间运行语句
SELECT current_timestamp - query_start AS runtime,datname,usename,query FROM pg_stat_activity WHERE state !=‘idle’ ORDER BY 1 DESC;
2.设置参数track_activities为on。
3.查看正在运行查询,查看视图pg_stat_activity
4.查询阻塞语句。
SELECT datname,usename,state,query FROM pg_stat_activity WHERE waiting = true;
5.查看阻塞信息。
SELECT w.query as waiting_query,
w.pid as w_pid,
w.usename as w_user,
l.query as locking_query,
l.pid as l_pid,
l.usename as l_user,
t.schemaname ||'.'|| t.relname as tablename
from pg_stat_activity w
join pg_locks l1 on w.pid = l1.pid
and not l1.granted join pg_locks l2 on l1.relation = l2.relation
and l2.granted join pg_stat_activity l on l2.pid = l.pid
join pg_stat_user_tables t on l1.relation = t.relid
where w.waiting;
6.结束会话
SELECT PG_TERMINATE_BACKEND(线程ID);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。