Paul Jiang's Blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

二项随机变量

发表于 2018-05-26 | 更新于 2020-05-17 | 分类于 数学


设进行n次独立重复实验,每次试验成功的概率为p,失败的概率为1-p。若以X表示n次试验中成功的次数,那么X称为参数为(n, p)的二项随机变量。
参数为(n, p)二项随机变量的分布列为
$$p(i)=(_i^n)p^i(1-p)^{n-i} $$

PostgreSQL-锁

发表于 2018-05-26 | 更新于 2020-05-17 | 分类于 数据库

在PostgreSQL数据库中有两类锁:表级锁和行级锁。当要查询、插入、更新、删除表中的数据时,首先是要获得表上的锁,然后再获得行上的锁。

表级锁模式

锁模式 解释
ACCESS SHARE 多版本控制功能,修改数据下也允许读数据
ROW SHARE 意向共享锁
ROW EXCLUSIVE 意向独占锁
SHARE UPDATE EXCLUSIVE 在意向独占锁的基础上,自身会排斥
SHARE 读锁,表的内容不能再变化
SHARE ROW EXCLUSIVE SHARE+ROW EXCLUSIVE
EXCLUSIVE 写锁,其他进程不能写也不能读
ACCESS EXCLUSIVE 多版本控制功能,也不允许访问数据

PostgreSQL中有8种表锁,最普通的是共享锁“SHARE”和排他锁“EXCLUSIVE”,因为多版本的原因,修改一条语句的同时,允许了读数据,为了处理这种情况,又增加了两种锁“ACCESS SHARE”和“ACESS EXCUSIVE”,锁中的关键字“ACCESS”是与多版本相关的。此外,为了处理表锁和行锁之间的关系,有了“意向锁”的概念,这时又加了两种锁,即“意向共享锁”和“意向排他锁”,由于意向锁之间不会产生冲突,而且意向排它锁相互之间也不会产生冲突,于是又需要更严格一些的锁,这样就产生了“SHARE UPDATE EXCLUSIVE” 和 “SHARE ROW EXCLUSIVE”

行级锁模式

只有共享锁和独占锁。

死锁

PostgreSQL能够自动侦测到死锁,然后会退出其中一个事务,从而允许其他事务完成。不过,到底哪个事务会被退出是很难估计的。

表级锁命令

1
LOCK TABLE name [NOWAIT]

在PostgreSQL中,事务自己的锁是从不冲突的。

行级锁命令

1
SELECT FOR [UPDATE | SHARE] [OF table_name] [NOWAIT]

多表关联时,可以使用of table指定表名。

锁的查看

1
SELECT * FROM pg_locks
1…2122

Paul Jiang

212 日志
26 分类
26 标签
Links
  • 褚霸
  • 章亦春
  • Martin Fowler
© 2020 Paul Jiang
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.5.0