zoukankan      html  css  js  c++  java
  • 面试常问MySQL性能优化问题

    知识综述

    [1] MySQL中锁的种类:

    常见的表锁和行锁,也有Metadata Lock等等,表锁是对一整张表加锁,分为读锁和写锁,因为是锁住整张表,所以会导致并发能力下降,一般是做ddl处理时使用。

    行锁则是锁住数据行,这种加锁方法比较复杂,但是由于只锁住有限的数据,对于其它数据不加限制,所以并发能力强,MySQL一般都是用行锁来处理并发事务

        [2] MySQL四种隔离机制

    未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。

    提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。

    可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读。

    串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。

    [3]多版本并发控制MVCC

    MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC.

    MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RDBMS,都支持了MVCC。

    在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read).

         快照读:简单的select操作,属于快照读,不加锁。(当然,也有例外,下面会分析)

            select * from table where ?;

         当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。  

           select * from table where ? lock in share mode;

                        select * from table where ? for update;

                        insert into table values (…);

                        update table set ? where ?;

                        delete from table where ?;





    1、如何理解MySQL中加锁原理

    mysql加锁机制 :

    根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。

    根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。

    2、MySQL最终死锁形成的原因 

    争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.
    此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.
    表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB.

    死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。

    那么对应的解决死锁问题的关键就是:让不同的session加锁有次序

     

    3、MySQL连接池的连接数说爆就爆了?

      出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;

      当大量的connect之后,就会出现Too many connections的错误。

      

  • 相关阅读:
    N*N内递矩阵算法
    四舍五入算法C语言
    springboot整合hivejdbc遇到的坑
    Gradle 中 exclude group 关键字运用
    sparklocal运行异常Could not locate executable null\bin\winutils.exe in the Hadoop binaries
    大数据的五大关键技术
    opencv+python+pycharm实现人脸识别
    Python开源人脸识别库,识别率达99.38%!内附教程+源码分享
    Python实时语音识别控制
    JAVA操作鼠标和键盘
  • 原文地址:https://www.cnblogs.com/yswyzh/p/10681628.html
Copyright © 2011-2022 走看看