电子信息工程系部网站建设方案,政务服务网站建设标准,策划方案免费网站,七台河新闻联播视频1、对于MySQL来说#xff0c;有三种锁的级别#xff1a;页级、表级、行级。
页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INNODB。
2、我们实际应用中用的最多的就是行锁。 行级锁的优点如下#xff1a; 1有三种锁的级别页级、表级、行级。
页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INNODB。
2、我们实际应用中用的最多的就是行锁。 行级锁的优点如下 1、当很多连接分别进行不同的查询时减小LOCK状态。 2、如果出现异常可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。 行级锁的缺点如下 1、比页级锁和表级锁要占用更多的内存。 2、进行查询时比页级锁和表级锁需要的I/O要多所以我们经常把行级锁用在写操作而不是读操作。 3、容易出现死锁。
3、MySQL用写队列和读队列来实现对数据库的写和读操作。
对于写锁定如下 1、如果表没有加锁那么对其加写锁定。 2、否则那么把请求放入写锁队列中。 对于读锁定如下 1、如果表没有加写锁那么加一个读锁。 2、否则那么把请求放到读锁队列中。 当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。
4、下面我来一个简单的例子解释上面的说法。
我们来运行一个时间很长的查询 1、客户端1 mysql select count(*) from content group by content; … 客户端2 mysql update content set content ‘I love you’ where id 444; Query OK, 1 row affected (30.68 sec) Rows matched: 1 Changed: 1 Warnings: 0 用了半分钟。 2、我们现在终止客户端1。 此时客户端2 mysql update content set content ‘I hate you’ where id 444; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 仅仅用了20毫秒。
这个例子很好的说明了读写队列的运行。 对于1中的客户端1此时表没有加锁当然也没有加写锁了那么此时客户端1对表加了一个读锁。 对于1中的客户端2此时因为表有一个读锁所以把UPDATE请求放到写锁定队列中。 当读锁释放的时候也就是SHOW PROCESSLIST中STATUS 为COPY TO TMP TABLE的时候UPDATE操作开始执行。
5、可以在REPLICATION中对MASTER 和SLAVE运用不同的锁定使系统达到最佳的性能。当然这个前提是SQL语句都是最优的。