本周问答专区为大家请来了阿里数据库专家曾文旌
与大家交流话题:
欢迎大家围绕这一话题尽情提问,专家曾文旌还将每天选出一个优质的提问授予最佳思考奖,将获得优质技术书籍一本
在本问答贴下回复提问即可,严禁灌水及发表非技术言论
活动时间:7月11日-7月15日
专家曾文旌每天将在提问中挑选一个最有技术含金量的提问,小编会在提问下面评论告知获奖信息
曾文旌,花名义从,阿里巴巴 数据库专家
从事数据库内核开发工作5年.深入理解关系数据库理论和实现.熟悉关系数据库再传统领域和互联网领域的应用,擅长查询优化,数据库调优,目前从事阿里云 PostgreSQL/PPAS 相关产品的内核开发和服务
曾文旌在社区分享过多篇高质量技术博文,广受好评:
1、迁移DB到PPAS时,碰到的一个JDBC 问题的解决方法
https://yq.aliyun.com/articles/34828
2、从 oss 装载数据到 GreenPlum
https://yq.aliyun.com/articles/31632
3、使用 www_fdw 插件向PG/PPAS导入数据
https://yq.aliyun.com/articles/7711
4、PPAS 替换oracle JDBC驱动配置
https://yq.aliyun.com/articles/7469
5、Greenplum 通过gpfdist + EXTERNAL TABLE 并行导入数据
https://yq.aliyun.com/articles/7457
6、PPAS 兼容oracle部分函数表达式索引
https://yq.aliyun.com/articles/4795
7、PPAS 外部插件管理
https://yq.aliyun.com/articles/262
8、PostgreSQL 路径规划插件 pgruoting 介绍
https://yq.aliyun.com/articles/256
曾工 您好!
开源gp使用gpload加载数据时发现segment中数据文件大小不是始终逐渐增加,会出现回落变小最终稳定。请问这是什么原因,期间gp数据库内部做了处理?
通过shell脚本每隔一秒中查询一次大小/data/primary/gpseg0/base/16384中文件大小,其中只有16391.6文件大小764M->869M->664M , 880M ->1.2G->940M等几次变小的情况。
32M 16391.6
32M 16391.6
64M 16391.6
64M 16391.6
128M 16391.6
128M 16391.6
128M 16391.6
128M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
256M 16391.6
284M 16391.6
316M 16391.6
316M 16391.6
316M 16391.6
316M 16391.6
380M 16391.6
380M 16391.6
380M 16391.6
380M 16391.6
380M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
508M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
764M 16391.6
895M 16391.6
664M 16391.6
664M 16391.6
696M 16391.6
696M 16391.6
760M 16391.6
760M 16391.6
760M 16391.6
760M 16391.6
760M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
888M 16391.6
1.2G 16391.6
1.2G 16391.6
1.2G 16391.6
1.2G 16391.6
1.2G 16391.6
1.2G 16391.6
1.2G 16391.6
940M 16391.6
940M 16391.6
打算问下,我用的是pg9.2.4版本的,pg有的时间突然系统负载达到好几十甚至好几百,整个数据库无响应,然后瞬间就好,磁盘I/o 流量都正常,目前处理方法是清理内存,定期清理内存不会出现该问题,错误日志中没有异常错误
我们在阿里云上使用ECS和RDS,在ECS的CPU、网络带宽都占用很低的情况下,以尽量多的并发来调用RDS,但是发现有时并不能耗尽RDS的CPU占用(IOPS并不高),由于RDS此时无法提供高QPS,这就反过来导致我们的业务TPS上不去,请问,在IOPS、网络带宽都不是问题的情况下,CPU占用只有70%,阿里云的RDS还会有什么限制会约束其QPS能力?
请问 在postgresql 中,我有多个表继承了父表,每个子表的表结构不同,怎么通过查询父表来获得所有子表的数据
咨询一下,当前一主一备(通过流复制),当主机A宕机、备机B切换为主机,A机器重启恢复后变为备机,待数据和B机器同步后再次升级为主机,B再次变为备机。目前这种有什么好的中间件或者其他方案来实现。 (目前为纯脚本各种触发、修改,配置也麻烦)
曾老师,pg内存分配这块不是很明白,我有一些函数业务比较复杂并且数据量比较大(千万级,部分亿级),当执行这些函数的过程中,内存占用很厉害,并且在函数执行完毕之后这块内存感觉一直不被释放,一直到这个会话被终止。
我的配置是sharedbuffer=21GB,effective_cache_size=80GB ,work_mem=16MB(某些函数内会临时修改),数据库连接比较小,通常的连接为20个左右。
注意看其中存在当前已经是 “idle”的会话占用内存依然几百兆,正在执行查询的会话内存占用20GB,感觉很奇怪,曾老师能详细说说pg内存分配和回收到底是如何进行的,或者给一些比较详细的文章看看。
hi 您好。我们使用的是pg 9.3.5的版本,操作系统是centos7. 使用流复制做主备。
之前遇到了一个问题就是spin lock 导致cpu 很高。我简单描述一下我的疑问:
最早我们业务是直连pg 主库没有使用pgbouncer 主库连接数在400~500之间,业务繁忙时会出现spin lock 主库cpu很高,经常要重启业务。后来把所有只读的业务都迁移到了备库,结果备库也出现的spin lock 。上pg社区寻求帮组,他们建议我们降低连接数,所以在备库和主库都加了pgbouncer。备库还是会出现spin lock的问题。然后把一大部分的只读查询又迁移回了主库,spin lock的问题就没有出现了。所以是不是可以认为 pg流复制的备库的性能要比主库差呢?我看了部分流复制的官方文档,是不是因为在 读备库数据的时候,并且在读的表需要恢复,是不是会导致性能受到损失?
远程备份pg 怎么创建只有备份权限的账号?
最近在做远程备份pg,是不是可以像mysql一样创建一个只有备份权限的账号去备份.
不想用supper账号备份(也不想用隐藏密码的方式)
今天用$psql testdb < /usr/local/pgsql/backups/testdb.dmp 方式恢复数据库,dump文件大小45G
一个表有1.8亿,记录都插好了,创建索引3个小时还没玩,怎么这么慢的?
今天做备份时,pg_dump 加上了 -Ft,想试试pg_restore 的恢复速度
pg_dump: [tar archiver] could not write to output file: No space left on device
但是报了上面的错,提示空间不足,但是我的备份目录还剩700G,平时不加-Ft 正常备份45G,这是为什么?
为什么pg不支持嵌套复合类型? 例如
type x1 is record( b1 varchar,b2 varchar);
type xxx is table of x1 index by binary_integer;
type a is record (a1 varchar,a2 xxx);
会提示 不支持嵌套数据类型,这样的情况能用什么方法解决呢?
请教前辈:
PG当前有哪些成熟的集群方案,能够很好的支持主备切换、负载均衡、数据分片等,来解决大数据量、高QPS的需求,或者从其他角度,有没有较为成熟的解决方案来应对这些问题,并且有完善的资料。
谢谢。
pg 的流复制 因为其他原因 失效了 怎么恢复呢
postgis怎么装到postgresql9.6上?
请教一个oracle_fdw的问题:
在oracle中有表
SQL> desc pgtest1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
DTIME DATE
ELEC_ADDR VARCHAR2(256 CHAR)
SQL> select * from pgtest1;
ID DTIME ELEC_ADDR
---------- ------------------- ----------
1 2016-05-20 10:12:12 ss
2 2012-02-02 12:12:12 ss
通过fdw到postgresql这边查询结果是
postgres=# d pgtest1;
Foreign table "public.pgtest1"
Column | Type | Modifiers | FDW Options |
---|---|---|---|
id | integer | ||
dtime | timestamp without time zone | ||
elec_addr | character varying(256) |
Server: oracle_svr
FDW Options: (schema 'TEST', "table" 'PGTEST1')
postgres=# select * from pgtest1;
ERROR: error executing query: OCIStmtExecute failed to execute remote query
DETAIL: ORA-01406: 提取的列值被截断
把dtime字段写成date类型也是同样的错误
postgres=# d pgtest5;
Foreign table "public.pgtest5"
Column | Type | Modifiers | FDW Options |
---|---|---|---|
id | integer | ||
dtime | date | ||
elec_addr | character varying(256) |
Server: oracle_svr
FDW Options: (schema 'TEST', "table" 'PGTEST1')
postgres=# select * from pgtest5;
ERROR: error executing query: OCIStmtExecute failed to execute remote query
DETAIL: ORA-01406: 提取的列值被截断
在oracle中把数据TRUNCATE掉之后
SQL> TRUNCATE TABLE PGTEST1;
Table truncated.
SQL> select * from pgtest1;
no rows selected
在postgresql中查询
postgres=# select * from pgtest1;
(0 rows)
说明oracle_fdw是通信是OK的,
请问这是什么原因?oracle的date类型在postgresql外部表中我应该写成什么类型?
问个问题 pg一个数据块是8k,那一个数据块能存多少行数据,是不是要根据一张表的各字段的字节数来算,8k/各字段字节数的和,问这个问题向想知道怎么做容量规划 谢谢
postgres=# create table test01(id int primary key,note text);
CREATE TABLE
Time: 184.321 ms
postgres=# insert into test01 select generate_series(1,100000),'testcontent';
INSERT 0 100000
Time: 996.752 ms
postgres=# d+ test01
Table "public.test01"
Column | Type | Modifiers | Storage | Stats target | Descrip
id | integer | not null | plain | |
note | text | | extended | |
Indexes:
"test01_pkey" PRIMARY KEY, btree (id)
postgres=# dt+ test01
List of relations
Schema | Name | Type | Owner | Size | Description |
---|---|---|---|---|---|
public | test01 | table | postgres | 4360 kB |
(1 row)
postgres=# select 4360/1024;
4
(1 row)
Time: 0.457 ms
integer 占4字节
text 变长,但这里测试 每行都是11个字符,每行占4+11=15字节
postgres=# select (4+4+11)*100000/1024/1024;
1
(1 row)
我计算得出表大小是1MB,但实际上是4MB,不知道那里算错了?
slony-I做主从 在设置订阅者的时候包这个错,但日志中并没发现明显的错误,这个要怎么排除呢?
postgres@slave09:~$ slonik_subscribe_set 1 2 | slonik
waiting for events (2,5000000001) only at (2,0) to be confirmed on node 1
waiting for events (2,5000000001) only at (2,0) to be confirmed on node 1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。