MySQL 死锁产生的原因和“超卖”现象

死锁其实很好理解,就是两个会话分别在等待对方占有锁的释放。这个概念不仅仅是MySQL数据库中的,计算机中一些资源的占有和释放,都可能会产生死锁。

在MySQL数据库中,举个例子,由于代码设计不当,比如两个事务会话中, 都使用读锁去占有一条数据,但是两个会话却都想更新这条数据,如果是并发请求,则会产生死锁,看以下SQL执行顺序:

begin;
select * from goods_sku where id = 1 in share mode;
update goods_sku set stock = stock - 1 where id = 1 and stock > 0;
commit; 

Continue reading "MySQL 死锁产生的原因和“超卖”现象"

查看Linux服务器的负载

服务器性能指标一般是指CPU、内存、磁盘IO、网络连接等相关信息,下面介绍几个命令用来查看CPU和内存的信息。

w命令

➔ w
 11:37:56 up 639 days, 12:46,  1 user,  load average: 0.33, 0.12, 0.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/3    58.32.4.73       11:25    4.00s  0.18s  0.00s w

第一行:当前时间 启动时长(没有关机和重启),当前用户数量,过去1分钟、5分钟、15分钟前的负载,一般来说,负载的值小于cpu数量*2时,服务器可以流畅运行,当大于这个值时,服务器就有一定压力了。

Continue reading "查看Linux服务器的负载"

编译安装PHP8.0-alpha3

后续

目前发现几个问题:

  1. --with-config-file-scan-dir选项无效,因此无法扫描到/usr/local/etc/php/8.0-alpha/conf.d中的ini文件(在centos7上尝试没有发现这个问题)
  2. 交互式运行无效,/usr/local/opt/php@8.0-alpha/bin/php -a执行后,输出Interactive mode enabled后卡住了,无法输入代码。 (通过指定--with-readline=/usr/local/opt/readline解决)

正文

我写了一系列文章记录我编译安装PHP7.3、PHP7.4的过程,这一次我尝试编译安装PHP8.0,当前PHP8.0处于测试中,请勿直接在您的线上环境使用此版本。

Continue reading "编译安装PHP8.0-alpha3"

MySQL四种事务隔离级别

事务是一系列数据操作的过程。事务具有四个特征,分别足原子性(Atomicity )、一致性(Consistency )、隔离性(Isolation) 和持久性(Durability),简称为事务的ACID特性。

先了解几种场景的名词定义:

脏读(Drity Read):A事务更新了一份数据,但是未提交(commit),B事务此时读到了这份未提交的更新数据,称之为脏读。如果事务A不回滚,基本上也没什么问题,如果事务A回滚了,问题可能就会非常大。

不可重复读(Non-repeatable read):A事务在执行过程中,B事务对数据进行了修改或删除,导致A两次读取的数据不一致;重点在于update和delete(锁行即可解决)。

幻读(Phantom Read):A事务在执行过程中,B事务新增了符合A事务要查询的数据,导致A两次读取的数据不一致;重点在于insert(需要锁表解决)。

Continue reading "MySQL四种事务隔离级别"