您的位置:金沙游乐场85155 > 大数据库 > mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需

mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需

发布时间:2019-10-07 14:52编辑:大数据库浏览(122)

    1. 恢复和复制的需要,对innodb锁机制的影响

    获取锁等待情况
    可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:mysql> show status like 'Table%';+----------------------------+----------+| Variable_name | Value |+----------------------------+----------+| Table_locks_immediate | 105 || Table_locks_waited | 3 |+----------------------------+----------+2 rows in set (0.00 sec) 可以通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况:mysql> show status like 'innodb_row_lock%';+----------------------------------------+----------+| Variable_name | Value |+----------------------------------------+----------+| Innodb_row_lock_current_waits | 0 || Innodb_row_lock_time | 2001 || Innodb_row_lock_time_avg | 667 || Innodb_row_lock_time_max | 845 || Innodb_row_lock_waits | 3 |+----------------------------------------+----------+5 rows in set (0.00 sec) 另外,针对Innodb类型的表,如果需要察看当前的锁等待情况,可以设置InnoDB Monitors,然后通过Show innodb status察看,设置的方式是: CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;监视器可以通过发出下列语句来被停止: DROP TABLE innodb_monitor;设置监视器后,在show innodb status的显示内容中,会有详细的当前锁等待的信息,包括表名、锁类型、锁定记录的情况等等,便于进行进一步的分析和问题的确定。打开监视器以后,默认情况下每15秒会向日志中记录监控的内容,如果长时间打开会导致.err文件变得非常的巨大,所以我们在确认问题原因之后,要记得删除监控表以关闭监视器。或者通过使用--console选项来启动服务器以关闭写日志文件。什么情况下使用表锁
    表级锁在下列几种情况下比行级锁更优越:很多操作都是读表。
    在严格条件的索引上读取和更新,当更新或者删除可以用单独的索引来读取得到时:
    UPDATE tbl_name SET column=value WHERE unique_key_col=key_value;
    DELETE FROM tbl_name WHERE unique_key_col=key_value;
    SELECT 和 INSERT 语句并发的执行,但是只有很少的 UPDATE 和 DELETE 语句。
    很多的扫描表和对全表的 GROUP BY 操作,但是没有任何写表。

      mysql 通过binlog文件对增删除改等更新数据的sql语句,实现数据库的恢复和主从复制。mysql的恢复机制(复制其实就是在slave mysql不断做基于binglog的恢复)特点有如下:
      (1) mysql 的恢复是sql语句级的,也就是重新执行binlog中的sql语句, oracle数据库则是基于数据库文件块的。
      (2) mysql 的binlog是按照事务提交的先后顺序记录的,恢复也是按这个顺序进行的。这也与oracle不同,oracle是按照系统更新号(SCN)来恢复数据的。

    什么情况下使用行锁
    行级锁定的优点:当在许多线程中访问不同的行时只存在少量锁定冲突。
    回滚时只有少量的更改。
    可以长时间锁定单一的行。

    2.  insert into 和create table对于原表也会加共享锁   下面演示原表加锁的例子:

    行级锁定的缺点:比页级或表级锁定占用更多的内存。
    当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。
    如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。
    用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。

    本文由金沙游乐场85155发布于大数据库,转载请注明出处:mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需

    关键词:

上一篇:数据库SQL语句的操作

下一篇:没有了