返回顶部
首页 > 资讯 > 数据库 >怎么理解PostgreSQL创建数据表时的参数fillfactor
  • 740
分享到

怎么理解PostgreSQL创建数据表时的参数fillfactor

2024-04-02 19:04:59 740人浏览 八月长安
摘要

这篇文章主要讲解了“怎么理解postgresql创建数据表时的参数fillfactor”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Postgres

这篇文章主要讲解了“怎么理解postgresql创建数据表时的参数fillfactor”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Postgresql创建数据表时的参数fillfactor”吧!

下面创建不同fillfactor的数据表,执行update操作

[local]:5432 pg12@testdb=# create table t_fillfactor_100(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=100);
CREATE TABLE
Time: 2.462 ms
[local]:5432 pg12@testdb=# create table t_fillfactor_70(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=70);
CREATE TABLE
Time: 3.437 ms
[local]:5432 pg12@testdb=# create table t_fillfactor_50(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=50);
CREATE TABLE
Time: 28.553 ms
[local]:5432 pg12@testdb=# insert into t_fillfactor_100(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 3583.216 ms (00:03.583)
[local]:5432 pg12@testdb=# insert into t_fillfactor_70(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 6506.113 ms (00:06.506)
[local]:5432 pg12@testdb=# insert into t_fillfactor_50(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 3113.901 ms (00:03.114)
[local]:5432 pg12@testdb=# update t_fillfactor_100 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 10641.794 ms (00:10.642)
[local]:5432 pg12@testdb=# update t_fillfactor_70 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 8563.046 ms (00:08.563)
[local]:5432 pg12@testdb=# update t_fillfactor_50 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 4036.735 ms (00:04.037)

可以看到,在插入时,fillfactor较高的数据表耗时较短,而在update时(全量),fillfactor的则有较大的优势.但,经过多次update后,耗时并不明显,原因在于经过多次update,每个块的空闲空间跟fillfactor=100的设定已相差无几.

[local]:5432 pg12@testdb=# update t_fillfactor_100 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 4276.404 ms (00:04.276)
[local]:5432 pg12@testdb=# update t_fillfactor_70 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 3856.575 ms (00:03.857)
[local]:5432 pg12@testdb=# update t_fillfactor_50 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3');
UPDATE 1000000
Time: 4364.962 ms (00:04.365)
[local]:5432 pg12@testdb=#

重新创建表,使用pgbench进行测试

[local]:5432 pg12@testdb=# drop table if exists t_fillfactor_100;
t,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=70);
create table t_fillfactor_50(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=50);
insert into t_fillfactor_100(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
insert into t_fillfactor_70(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
insert into t_fillfactor_50(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
DROP TABLE
Time: 191.706 ms
[local]:5432 pg12@testdb=# drop table if exists t_fillfactor_70;
DROP TABLE
Time: 35.313 ms
[local]:5432 pg12@testdb=# drop table if exists t_fillfactor_50;
DROP TABLE
Time: 30.078 ms
[local]:5432 pg12@testdb=# 
[local]:5432 pg12@testdb=# create table t_fillfactor_100(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=100);
CREATE TABLE
Time: 40.443 ms
[local]:5432 pg12@testdb=# create table t_fillfactor_70(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=70);
CREATE TABLE
Time: 1.334 ms
[local]:5432 pg12@testdb=# create table t_fillfactor_50(id int,c1 varchar(30),c2 varchar(30),c3 varchar(30)) with (fillfactor=50);
CREATE TABLE
Time: 1.024 ms
[local]:5432 pg12@testdb=# 
[local]:5432 pg12@testdb=# insert into t_fillfactor_100(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 2623.943 ms (00:02.624)
[local]:5432 pg12@testdb=# insert into t_fillfactor_70(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 2543.045 ms (00:02.543)
[local]:5432 pg12@testdb=# insert into t_fillfactor_50(id,c1,c2,c3) select x,'c1'||x,'c2'||x,'c3'||x from generate_series(1,1000000) as x;
INSERT 0 1000000
Time: 2662.223 ms (00:02.662)
[local]:5432 pg12@testdb=#

使用pgbench进行测试

[pg12@localhost script]$ cat update_100.sql 
\set id random(1,1000000)
begin;
update t_fillfactor_100 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3') where id= :id;
end;
[pg12@localhost script]$ cat update_70.sql 
\set id random(1,1000000)
begin;
update t_fillfactor_70 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3') where id= :id;
end;
[pg12@localhost script]$ cat update_50.sql 
\set id random(1,1000000)
begin;
update t_fillfactor_50 set c1=lpad('c1',30,'c1'),c2=lpad('c2',30,'c2'),c3=lpad('c3',30,'c3') where id= :id;
end;
[pg12@localhost script]$ pgbench -c 2 -C -f ~/script/update_100.sql -j 1 -n -T 60 -U pg12 testdb
transaction type: /home/pg12/script/update_100.sql
scaling factor: 1
query mode: simple
number of clients: 2
number of threads: 1
duration: 60 s
number of transactions actually processed: 691
latency average = 174.136 ms
tps = 11.485277 (including connections establishing)
tps = 11.625959 (excluding connections establishing)
[pg12@localhost script]$ pgbench -c 2 -C -f ~/script/update_70.sql -j 1 -n -T 60 -U pg12 testdb
transaction type: /home/pg12/script/update_70.sql
scaling factor: 1
query mode: simple
number of clients: 2
number of threads: 1
duration: 60 s
number of transactions actually processed: 652
latency average = 184.293 ms
tps = 10.852275 (including connections establishing)
tps = 10.981136 (excluding connections establishing)
[pg12@localhost script]$ pgbench -c 2 -C -f ~/script/update_50.sql -j 1 -n -T 60 -U pg12 testdb
transaction type: /home/pg12/script/update_50.sql
scaling factor: 1
query mode: simple
number of clients: 2
number of threads: 1
duration: 60 s
number of transactions actually processed: 627
latency average = 191.700 ms
tps = 10.432967 (including connections establishing)
tps = 10.551899 (excluding connections establishing)
[pg12@localhost script]$

使用pgbench使用随机值进行测试,时长为60s,结果差别不大.

数据表大小的比较:

[local]:5432 pg12@testdb=# select pg_size_pretty(pg_relation_size('t_fillfactor_100'));
 pg_size_pretty 
----------------
 58 MB
(1 row)
Time: 2.034 ms
[local]:5432 pg12@testdb=# select pg_size_pretty(pg_relation_size('t_fillfactor_70'));
 pg_size_pretty 
----------------
 82 MB
(1 row)
Time: 1.469 ms
[local]:5432 pg12@testdb=# select pg_size_pretty(pg_relation_size('t_fillfactor_50'));
 pg_size_pretty 
----------------
 117 MB
(1 row)
Time: 2.531 ms
[local]:5432 pg12@testdb=#

分别是58MB vs 82MB vs 117MB ≈ 100 vs 70 vs 50

感谢各位的阅读,以上就是“怎么理解PostgreSQL创建数据表时的参数fillfactor”的内容了,经过本文的学习后,相信大家对怎么理解PostgreSQL创建数据表时的参数fillfactor这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解PostgreSQL创建数据表时的参数fillfactor

本文链接: https://lsjlt.com/news/63645.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解PostgreSQL创建数据表时的参数fillfactor
    这篇文章主要讲解了“怎么理解PostgreSQL创建数据表时的参数fillfactor”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解PostgreS...
    99+
    2024-04-02
  • 云数据库PostgreSQL创建参数模板
    创建参数模板可以帮助我们在创建数据库实例时快速配置参数,提高数据库的性能和安全性。以下是创建云数据库PostgreSQL参数模板的步...
    99+
    2023-09-21
    数据库
  • postgresql怎么创建数据库
    要在PostgreSQL中创建数据库,可以使用CREATE DATABASE语句。例如,要创建一个名为"mydatabas...
    99+
    2024-04-22
    postgresql
  • oracle怎么创建临时表并传参数
    在Oracle中,可以通过使用GLOBAL TEMPORARY TABLE来创建临时表并传参数。以下是创建临时表并传参数的示例代码:...
    99+
    2024-04-09
    oracle
  • 详解Oracle创建表的参数
    详解Oracle创建表的参数   create table mytable (   id number(3),   n...
    99+
    2024-04-02
  • PostgreSQL中怎么创建和管理数据库
    要在PostgreSQL中创建和管理数据库,可以按照以下步骤进行操作: 创建数据库: 可以使用以下命令在PostgreSQL中创建...
    99+
    2024-04-02
  • 怎么在postgresql中创建数据库
    在postgresql中创建数据库的方法:1.启动postgresql服务;2.登录postgresql数据库;3.使用createdb命令创建;具体步骤如下:首先,在命令行中启动postgresql服务;net start postgre...
    99+
    2024-04-02
  • 怎么理解PostgreSQL中的参数autovacuum_max_workers
    这篇文章主要介绍“怎么理解PostgreSQL中的参数autovacuum_max_workers”,在日常操作中,相信很多人在怎么理解PostgreSQL中的参数autovacuum_max_worker...
    99+
    2024-04-02
  • oracle创建临时表怎么备份数据
    要备份临时表的数据,可以使用以下步骤: 使用CREATE TABLE语句创建一个新的表,用来存储临时表的数据备份。例如: CRE...
    99+
    2024-04-09
    oracle
  • mysql创建数据表怎么建
    如何在 MySQL 中创建数据表 在 mysql 中创建数据表是一个通过 create table 语句指定表结构和属性的过程。 语法 CREATE TABLE table_name (...
    99+
    2024-06-24
    mysql
  • 数据库中怎么创建数据表
    这篇文章主要介绍了数据库中怎么创建数据表的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇数据库中怎么创建数据表文章都会有所收获,下面我们一起来看看吧。创建数据表创建数据表使用 "CREATE ...
    99+
    2023-06-08
  • mysql数据库怎么创建数据表
    要创建一个MySQL数据库中的数据表,你可以使用CREATE TABLE语句。以下是一个示例: CREATE TABLE 表名 ( ...
    99+
    2024-04-09
    mysql 数据库
  • Mysql怎么创建数据表
    这篇文章主要介绍“Mysql怎么创建数据表”,在日常操作中,相信很多人在Mysql怎么创建数据表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql怎么创建数据表”的疑惑...
    99+
    2024-04-02
  • navicat怎么创建数据表
    navicat 中创建数据表:在 navicat 中打开数据库。在对象列表中右键单击数据库名称,选择 "新建" > "表"。输入表名。定义列类型、大小和约束。将唯一标识符设为主键。...
    99+
    2024-04-06
    navicat
  • sqlserver创建表时怎么选择数据类型
    在SQL Server中,创建表时选择数据类型需要根据要存储的数据类型而定。以下是一些常用的数据类型及其用途: INT:用于存储整...
    99+
    2024-04-09
    sqlserver
  • sql怎么创建临时表并导入数据
    要创建临时表并导入数据,可以按照以下步骤操作: 创建临时表:使用CREATE TABLE语句创建临时表,可以指定表的结构,例如: ...
    99+
    2024-04-09
    sql
  • PostgreSQL怎么创建分区表详解
    目录前言列分区表范围分区表总结前言 PG 假如我们想像Hive那也创建动态分区是不能实现的。         那么需要我们手动通过脚本来创建分区表,创建分区表必须要创建主表和分区表...
    99+
    2022-06-23
    pg数据库创建分区表 pg分区表创建 pg10创建分区表
  • mongodb的数据库表怎么创建
    MongoDB是一个文档数据库,不使用传统的表和行的概念,而是使用集合(collection)和文档(document)的概念。要创...
    99+
    2023-08-24
    mongodb 数据库
  • MySQL怎么创建数据库和数据表
    本文小编为大家详细介绍“MySQL怎么创建数据库和数据表”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL怎么创建数据库和数据表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。MySQL 创建数据库和创建数...
    99+
    2023-07-05
  • Docker启动PostgreSQL时创建多个数据库的解决方案
    1 前言 在文章《Docker启动PostgreSQL并推荐几款连接工具》中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个D...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作