假设执行下面的sql语句
update tb_user set age = age + 1;
以MySQL为例,按照两阶段锁协议,会先给tb_user加上表意向锁,然后对tb_user的所有行加上行锁,但是当tb_user数据量非常多的时候,频繁的获取行锁会影响性能,所以会将表意向锁升级为表锁,后续访问的时候不需要再加锁,这样导致的结果是并发性能降低,因为其他线程访问该表会被阻塞。
因此得出建议:操作表的时候尽量带仨很where与limit条件,分批去操作数据,尽量防止全表扫描
假设执行下面的sql语句
update tb_user set age = age + 1;
以MySQL为例,按照两阶段锁协议,会先给tb_user加上表意向锁,然后对tb_user的所有行加上行锁,但是当tb_user数据量非常多的时候,频繁的获取行锁会影响性能,所以会将表意向锁升级为表锁,后续访问的时候不需要再加锁,这样导致的结果是并发性能降低,因为其他线程访问该表会被阻塞。
因此得出建议:操作表的时候尽量带仨很where与limit条件,分批去操作数据,尽量防止全表扫描