当前位置: 首页 > news >正文

网站是由什么组成的网络营销和推广的方法

网站是由什么组成的,网络营销和推广的方法,域名网站建设,做推广适合哪些网站吗专栏内容:postgresql内核源码分析个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 表数据膨胀的由来 什么时候产生膨胀 首先是update 还有delete 如何消…

 74ac905cfa3740079f2f66a445a3d7c2.gif#pic_center

 

 

  • 专栏内容:postgresql内核源码分析
  • 个人主页:我的主页
  • 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

目录

前言

表数据膨胀的由来

什么时候产生膨胀

首先是update

还有delete

如何消除膨胀

结尾


前言

本文是基于postgresql 15的代码进行分析解读,演示是在centos8系统上进行。

在我们使用postgresql数据库时,总会产生一些数据膨胀,导致查询变慢,索引失效,为什么会有数据膨胀呢?产生后我们怎么做才能让数据库恢复正常呢?


 

表数据膨胀的由来

话说数据库的四大特性ACID,postgresql采用了一种MVCC(Multi Version Concurrency Control)机制来保证事务的原子性和隔离性。

 

那什么是MVCC呢,简单说就是利用事务号递增性来标识tuple的新旧版本,达到不同事务内看到的tuple隔离;下面我们用一个例子来看一下:

 

查看一张表的当前数据;

postgres=# select ctid,xmin,xmax,id from t1;

 ctid  | xmin | xmax | id

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

 (0,1) | 1699 |    0 |  1

 (0,2) | 1700 |    0 |  2

(2 rows)

 

我们在一个事务中执行更新并回滚

postgres=*begin;

BEGIN

postgres=*# select txid_current();

 txid_current

--------------

         1702

(1 row)

postgres=*update t1 SET name='a' where id=1;

UPDATE 1

postgres=*rollback;

ROLLBACK

 

我们在插入数据

insert into t1(id) values(3);

insert into t1(id) values(4);

 

postgres=# select ctid,xmin,xmax,id from t1;

 ctid  | xmin | xmax | id

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

 (0,1) | 1699 | 1702 |  1

 (0,2) | 1700 |    0 |  2

 (0,4) | 1703 |    0 |  3

 (0,5) | 1704 |    0 |  4

(4 rows)

发现ctid为(0,3)的位置被跳过了,因为有一个id=1的tuple版本占了,只是它可见性判断时被判定为不可见,所以我们看不到它,但确实是占用了一个位置。


什么时候产生膨胀

 

那些常见情况下为产生多版本数据呢?

 

  • 首先是update

我们来看一下update的演示:

我们update一条数据后,它的位置变到了最后,说明又一条旧版本;详细表的update代码解析详见我的专栏;

postgres=# update t1 SET name='a' where id=1;

UPDATE 1

postgres=# select ctid,xmin,xmax,id from t1;

 ctid  | xmin | xmax | id

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

 (0,2) | 1700 |    0 |  2

 (0,4) | 1703 |    0 |  3

 (0,5) | 1704 |    0 |  4

 (0,6) | 1705 |    0 |  1

(4 rows)

 

  • 还有delete

这里不会产生多版本,但是delete后,tuple并不会从表里真正删掉,而是打了一个标记,这样做的目的其它和多版本是一致的,因为可能还有其它事务在引用。

下面我们看一下例子:

postgres=# delete from t1 where id = 1;

DELETE 1

postgres=# select ctid,xmin,xmax,id from t1;

 ctid  | xmin | xmax | id

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

 (0,2) | 1700 |    0 |  2

 (0,4) | 1703 |    0 |  3

 (0,5) | 1704 |    0 |  4

(3 rows)

postgres=# insert into t1(id) values(5);

INSERT 0 1

postgres=# select ctid,xmin,xmax,id from t1;

 ctid  | xmin | xmax | id

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

 (0,2) | 1700 |    0 |  2

 (0,4) | 1703 |    0 |  3

 (0,5) | 1704 |    0 |  4

 (0,7) | 1707 |    0 |  5

(4 rows)

我们delete后又insert,发现空闲(0,6)没有被利用,而是从(0,7)开始;

 

如何消除膨胀

postgresql在运行过程中,采用了两种方式:

一是页面裁剪;

二是autovacuum;

那它们是如何做的呢?请看本专栏内容。

 


结尾

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

 

http://www.pjxw.cn/news/25524.html

相关文章:

  • 重庆九龙坡区网站建设网站优化策略分析
  • 怎么做网站推广世界杯google浏览器官网
  • 要学做游戏上什么网站学好搜索引擎优化主要包括
  • 常州建设网站济南网站优化排名
  • 怎样做网站表白墙百度超级链
  • 歙县建设银行网站网页制作图片
  • 潍坊做网站联系方式seo搜索引擎优化名词解释
  • 高端定制网站设计seo点击工具
  • 手机做网站时时彩赌博今日财经新闻
  • 帮别人做网站制作电脑培训学校哪家好
  • 做网站找个人还是找公司好网络营销策划总结
  • 二级建造师挂靠seo优化6个实用技巧
  • 嘉兴cms建站模板软文范例大全100字
  • idc新人如何做自己的网站个人网站建设
  • 苏州做商城网站网站产品怎么优化
  • 减肥养生网站建设友情链接适用网站
  • 深圳西乡做网站竞价防恶意点击
  • 文秘写作网站seo英文怎么读
  • 西安哪里做网站最大互联网平台有哪些
  • 那个网站做图片好看的排名公式
  • 在哪里找人做公司网站百度惠生活商家怎么入驻
  • 天元建设集团有限公司张琥超seo优化工作有哪些
  • 沈阳商城网站建设兰州关键词快速上首页排名
  • 中国做视频网站有哪些内容宜兴网站建设
  • 设计网站的意义营销型网站建设模板
  • 网站建设视觉效果整合营销包括哪些内容
  • 向客户介绍网站建设的话本百度网址导航
  • 做网站正规公司免费的网站关键词查询工具
  • 建设嘉陵摩托车官方网站手机seo排名软件
  • 做ppt找图片的网站百度地图推广