小编icu*_*ken的帖子

PostgreSQL写放大

我试图找出PostgreSQL对磁盘施加了多大的压力,结果到目前为止令人沮丧.请看一下方法论,显然我错过了一些东西或以错误的方式计算数字.

环境

PostgreSQL 9.6.0-1.pgdg16.04 + 1在一个单独的LXC容器内运行,Ubuntu 16.04.1 LTS(内核版本4.4.0-38-通用,SSD上的ext4文件系统),只有一个客户端连接来自我运行测试.

我禁用autovacuum以防止不必要的写入.写入字节的计算是通过以下命令完成的,我想查找所有PostgreSQL进程(包括WAL编写器)写入的总字节数:

pgrep postgres | xargs -I {} cat /proc/{}/io | grep ^write_bytes | cut -d' ' -f2 | python -c "import sys; print sum(int(l) for l in sys.stdin)"
Run Code Online (Sandbox Code Playgroud)

测试

使用#符号我标记了一个数据库命令,?在数据库命令之后我标记了write_bytes sum的结果.测试用例很简单:只有一int4列填充10000000值的表.

在每次测试之前,我运行一组命令来释放磁盘空间并防止其他写入:

# DELETE FROM test_inserts;
# VACUUM FULL test_inserts;
# DROP TABLE test_inserts;
Run Code Online (Sandbox Code Playgroud)

测试#1:未记录的表

正如文档所述,UNLOGGED表中的更改不会写入WAL日志,因此这是一个很好的开始:

# CREATE UNLOGGED TABLE test_inserts (f1 INT);
? 1526276096
# INSERT INTO test_inserts SELECT generate_series(1, 10000000); …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.6

5
推荐指数
0
解决办法
682
查看次数

PostgreSQL 递归 CTE 性能问题

我试图理解两个查询在性能上的巨大差异。

假设我有两张桌子。第一个包含某些域集的 A 记录:

                                Table "public.dns_a"
 Column |          Type          | Modifiers | Storage  | Stats target | Description
--------+------------------------+-----------+----------+--------------+-------------
 name   | character varying(125) |           | extended |              |             
 a      | inet                   |           | main     |              |             
Indexes:
    "dns_a_a_idx" btree (a)
    "dns_a_name_idx" btree (name varchar_pattern_ops)  
Run Code Online (Sandbox Code Playgroud)

第二个表处理 CNAME 记录:

                              Table "public.dns_cname"
 Column |          Type          | Modifiers | Storage  | Stats target | Description
--------+------------------------+-----------+----------+--------------+-------------
 name   | character varying(256) |           | extended |              |             
 cname  | character varying(256) |           | extended |              | …
Run Code Online (Sandbox Code Playgroud)

postgresql common-table-expression

4
推荐指数
1
解决办法
1354
查看次数

如何将Postgres数据库表的主键从票据编号更改为票据编号和购买日期列的年份部分(是OIF类型日期)?

product_details在PostgreSQL数据库中有一个表,该表的两列是bill_no INTpurchase_date DATE

当前bill_no是主键,但是我的客户希望将其更改为bill_no购买年份,因为账单号在每年年初以1开头。

有没有办法来改变表的主键bill_no,只有一年的一部分purchase_date

sql database postgresql

4
推荐指数
1
解决办法
3088
查看次数