开发者社区> 问答> 正文

[专家问答]阿里数据库专家曾文旌为你解决数据库那些事

本周问答专区为大家请来了阿里数据库专家曾文旌
与大家交流话题:

什么应用类型的后端数据库合适PostgreSQL / PPAS

欢迎大家围绕这一话题尽情提问,专家曾文旌还将每天选出一个优质的提问授予最佳思考奖,将获得优质技术书籍一本

活动规则:

在本问答贴下回复提问即可,严禁灌水及发表非技术言论
活动时间: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

展开
收起
管理贝贝 2016-07-08 15:32:58 11387 0
20 条回答
写回答
取消 提交回答
  • 曾工 您好!
    开源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

    2019-07-17 19:53:33
    赞同 1 展开评论 打赏
  • 打算问下,我用的是pg9.2.4版本的,pg有的时间突然系统负载达到好几十甚至好几百,整个数据库无响应,然后瞬间就好,磁盘I/o 流量都正常,目前处理方法是清理内存,定期清理内存不会出现该问题,错误日志中没有异常错误

    2019-07-17 19:53:33
    赞同 展开评论 打赏
  • 进阿里云服务器出现这个是什么鬼?
    online/3b886caae8a1440f82ad56a645cf2d8c_2_1471777205.271690.jpg

    2019-07-17 19:53:33
    赞同 展开评论 打赏
  • 是这样吗?
    pre/ed3a2fb0978040f391a52db97b4ee582_bb3b6cab7e534e159b7f95ce675820d8.jpg

    2019-07-17 19:53:33
    赞同 展开评论 打赏
  • PostgreSQL 在阿里内部的使用范围广么? 是不是主要起取代 Oracle 的地位呢? 

    2019-07-17 19:53:33
    赞同 1 展开评论 打赏
  • 我们在阿里云上使用ECS和RDS,在ECS的CPU、网络带宽都占用很低的情况下,以尽量多的并发来调用RDS,但是发现有时并不能耗尽RDS的CPU占用(IOPS并不高),由于RDS此时无法提供高QPS,这就反过来导致我们的业务TPS上不去,请问,在IOPS、网络带宽都不是问题的情况下,CPU占用只有70%,阿里云的RDS还会有什么限制会约束其QPS能力?

    2019-07-17 19:53:32
    赞同 1 展开评论 打赏
  • 请问 在postgresql 中,我有多个表继承了父表,每个子表的表结构不同,怎么通过查询父表来获得所有子表的数据

    2019-07-17 19:53:32
    赞同 1 展开评论 打赏
  • pg数据库的存储是如何体现的,在实际应用中使用pg数据库需要考虑哪些方面的性能

    2019-07-17 19:53:32
    赞同 1 展开评论 打赏
  • 咨询一下,当前一主一备(通过流复制),当主机A宕机、备机B切换为主机,A机器重启恢复后变为备机,待数据和B机器同步后再次升级为主机,B再次变为备机。目前这种有什么好的中间件或者其他方案来实现。 (目前为纯脚本各种触发、修改,配置也麻烦)


    mem

    曾老师,pg内存分配这块不是很明白,我有一些函数业务比较复杂并且数据量比较大(千万级,部分亿级),当执行这些函数的过程中,内存占用很厉害,并且在函数执行完毕之后这块内存感觉一直不被释放,一直到这个会话被终止。

    我的配置是sharedbuffer=21GB,effective_cache_size=80GB ,work_mem=16MB(某些函数内会临时修改),数据库连接比较小,通常的连接为20个左右。

    注意看其中存在当前已经是 “idle”的会话占用内存依然几百兆,正在执行查询的会话内存占用20GB,感觉很奇怪,曾老师能详细说说pg内存分配和回收到底是如何进行的,或者给一些比较详细的文章看看。

    2019-07-17 19:53:32
    赞同 1 展开评论 打赏
  • 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流复制的备库的性能要比主库差呢?我看了部分流复制的官方文档,是不是因为在 读备库数据的时候,并且在读的表需要恢复,是不是会导致性能受到损失?

    2019-07-17 19:53:32
    赞同 3 展开评论 打赏
  • 远程备份pg 怎么创建只有备份权限的账号?

    最近在做远程备份pg,是不是可以像mysql一样创建一个只有备份权限的账号去备份.
    不想用supper账号备份(也不想用隐藏密码的方式)


    今天用$psql testdb < /usr/local/pgsql/backups/testdb.dmp 方式恢复数据库,dump文件大小45G
    一个表有1.8亿,记录都插好了,创建索引3个小时还没玩,怎么这么慢的?


    pg


    今天做备份时,pg_dump 加上了 -Ft,想试试pg_restore 的恢复速度

    su postgres -c "/home/pgsql/bin/pg_dump -h 192.168.11.100 -U postgres -Ft -d testgold >/home/pgbackup/testgold201607151530.tar"

    pg_dump: [tar archiver] could not write to output file: No space left on device
    但是报了上面的错,提示空间不足,但是我的备份目录还剩700G,平时不加-Ft 正常备份45G,这是为什么?

    2019-07-17 19:53:32
    赞同 3 展开评论 打赏
  • 作为一名python工程师想知道哪个数据库是和python最配的?

    2019-07-17 19:53:32
    赞同 1 展开评论 打赏
  • 为什么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);
    会提示 不支持嵌套数据类型,这样的情况能用什么方法解决呢?

    2019-07-17 19:53:32
    赞同 3 展开评论 打赏
  • 数据库具体表现出来是什么样的,到底怎么样东西就叫数据库,有什么具体实例吗
    2019-07-17 19:53:31
    赞同 1 展开评论 打赏
  • 请教前辈:
    PG当前有哪些成熟的集群方案,能够很好的支持主备切换、负载均衡、数据分片等,来解决大数据量、高QPS的需求,或者从其他角度,有没有较为成熟的解决方案来应对这些问题,并且有完善的资料。
    谢谢。

    2019-07-17 19:53:31
    赞同 1 展开评论 打赏
  • 社区爱好者,专为云栖社区服务!

    pg 的流复制 因为其他原因 失效了 怎么恢复呢


    postgis怎么装到postgresql9.6上?

    2019-07-17 19:53:31
    赞同 4 展开评论 打赏
  • O1Z_A_JN_7_P_9A_Y60_3IF
    我这个是第一次用!已输入密码就这样了


    我是把Postgresql卸载后重新装的到这一步出现这个警告111

    2019-07-17 19:53:31
    赞同 3 展开评论 打赏
  • 天道酬勤!

    请教一个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外部表中我应该写成什么类型?

    2019-07-17 19:53:31
    赞同 1 展开评论 打赏
  • 问个问题 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;

    ?column?

        4

    (1 row)

    Time: 0.457 ms

    integer 占4字节
    text 变长,但这里测试 每行都是11个字符,每行占4+11=15字节

    postgres=# select (4+4+11)*100000/1024/1024;

    ?column?

        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

    2019-07-17 19:53:31
    赞同 6 展开评论 打赏
  • PostgreSQL的优势是什么?另外不足有哪些?具体的优化方案请列举一下

    2019-07-17 19:53:31
    赞同 2 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载