暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

PostgreSQL千万数据量下的DDL变更影响

原创 薛晓刚 2024-03-05
334

 

   之前做过Oracle和MySQL DDL的时候有哪些情况要注意的。一直没有做PostgreSQL的,今天这个用实验说明一下。这里用的是15版本。

   Oracle是从11G版本支持的,MySQL是从8版本以后支持的。

   这些年PostgreSQL发展也迅速,他一年一个大版本的节奏。至于最早是哪个版本?什么时间的实在说不清楚。不过有一点就是数据库都应该尽快跟着官方走。紧跟官方脚步。

[pg15@dev-dbteam-148180 ~]$ psql

psql (15.3)

Type "help" for help.

postgres=# \d

               List of relations

 Schema |       Name        | Type  |  Owner  

--------+-------------------+-------+----------

 public | walminer_contents | table | postgres

(1 row)

创建一个空的数据库

postgres=# create database p;

CREATE DATABASE

postgres=# \c p

You are now connected to database "p" as user "postgres".

                                                             ^

创建一个和MySQL实验时候一模一样表结构的表。

p=# create table thousand (id int,a int,name varchar(10),time date);

CREATE TABLE

写了一个存储过程,批量写入1000万数据。

增加一个不带默认值的字段。

从实验得出结论,DDL在不到2毫秒完成。没有问题。

增加一个非空且带有默认值的字段,实验观察该DDL1毫秒完成,没有问题。

在这个千万级别的表上增加一个带默认值,但是没有非空的DDL。

从实验结果看只用1毫秒,DDL没有阻塞,没有问题。

最后一个场景,增加一个字段,并且对字段进行扩容,而且超过之前在MySQL中256的界限。

从实验结果看都不超过2毫秒,DDL没有阻塞,没有问题。

总体说来至少从PostgreSQL15版本的使用来看表结构变更的DDL,是没有问题的。


最后做一点总结,且不管用的是Oracle、MySQL还是PostgreSQL,现在主流数据库的主流版本都已经或者说早已经解决了大表字段增加的问题。

不过我这里提一点其实DDL不仅仅是加字段,还有建立索引。Oracle 建立索引时候有online和并行。但是MySQL在大表加索引的时候,还是会有锁的情况。索引这个问题最好不是事后加。



  

最后修改时间:2024-03-20 17:28:51
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论