按照锁的粒度(级别、密度)分,MySQL有三种级别的锁:页级、表级、行级。 1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高,并发度最低。 2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最 低,并发度也最高。 3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表 锁和行锁之间,并发度一般。 按禁止的操作可分为读锁和写锁,其中,
最近更新
按时间写下的文章
要不要使用分区表?
分区表是什么? 为了说明分区表的组织形式,我先创建一个表t; 1234567891011CREATE TABLE `t` ( `ftime` datetime NOT NULL, `c` int(11) DEFAULT NULL, KEY (`ftime`)) ENGINE=InnoDB DEFAULT CHARSET=latin1PARTITION BY RANGE (YEAR(ftime
grant之后要跟着flush privileges吗?
先说结论: 正常情况下,grant命令之后,没有必要跟着执行flush privileges命令。 那么,flush privileges是什么时候使用呢?显然,当数据表中的权限数据根内存中的权限数据不一样的时候,flush privileges语句可以用来重建内存数据,达到一致状态。 这种不一致往往是由不规范的操作导致的,比如直接用DML语句操作系统权限表。 直接操作系统表是不规范的操作。这个不
Python----socket编程
基于TCP的套接字编程: socket层的位置:socket在传输层和应用层之间 socket是什么: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/u
了解java GC过程
堆的空间是用来存储我们new出来的对象的。当new的对象填充满堆区的话,就会导致内存爆掉,我们的程序就会OOM。jvm 的 GC是清理堆上的对象的。 首先我们应该判断这个对象应不应该被删除。那判断的标准是什么呢?有一个标准叫GCRoot。被 栈 本地方法栈 方法区(全局变量) 直接或者间接引用的对象,是不能被删除的。 就引出了一个以GCRoot为根的树结构。 思路1:标记需要被删除,在扫描一遍
jvm内存模型全面解析
jvm在拿到操作系统分配的内存后,将内存分成了5个区域。 按线程私有和线程共有分为: 线程私有: 栈(函数运行过程中的临时变量,存储基本类型,对象类型的指针) 本地方法栈(C++native方法运行的栈区,C++基本类型,与C++对象类型的指针) 程序计数器(指向程序当前运行的位置,字节码序列的位置) 共有(属于同一进程): 方法区(元空间)(全局静态方法、变量、类加载器,等等一些全局信息)
怎么最快地复制一张表?
我在上一篇文章最后,给你留下的问题是怎么在两张表中拷贝数据。如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用insert..select语句即可实现。 当然,为了避免对源表加读锁,更稳妥的方案是先将数据写到外部文本文件,然后再写回目标表。这时,有两种常用的方法。接下来的内容,我会和你详细展开一下这两种方法。 为了便于说明,我还是先创建一个表db1.t,并插入1000行数据,同时创建一
insert语句的锁为什么这么多?
在上一篇文章中,我提到MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。 因此,insert语句是一个很轻量的操作。不过,这个结论是对于“普通的insert语句”才有效。也就是说,还有些insert语句是属于“特殊情况”的,在执行过程中需要给其他资源加锁,或者无法在申请到自增id以后就立马释放自增锁。 那么,今天这篇文章,我们就一起来聊聊这个话题。 1. insert...s
insert语句的锁为什么这么多?
在上一篇文章中,我提到MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。 因此,insert语句是一个很轻量的操作。不过,这个结论是对于“普通的insert语句”才有效。也就是说,还有些insert语句是属于“特殊情况”的,在执行过程中需要给其他资源加锁,或者无法在申请到自增id以后就立马释放自增锁。 那么,今天这篇文章,我们就一起来聊聊这个话题。 1. insert...s
MySQL自增主键为什么不是连续的?
为了便于说明,我们创建一个表t,其中id是自增主键字段、c是唯一索引。 12345678CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`))