mysql基础面试100题之(21-30)

本文详细介绍了MVCC的工作原理,数据库中间件如Sharding-JDBC和Mycat的区别,以及如何处理MySQL主从延迟、大表查询优化、数据库连接池、SQL执行过程、InnoDB索引策略和时区转换,还探讨了SQL执行过长时的优化方法和MySQL性能分析工具。
摘要由CSDN通过智能技术生成

21. MVCC熟悉吗,它的底层原理?

MVCC,多版本并发控制,它是通过读取历史版本的数据,来降低并发事务冲突,从而提高并发性能的一种机制。

MVCC需要关注这几个知识点:

  • 事务版本号

  • 表的隐藏列

  • undo log

  • read view

22. 数据库中间件了解过吗,sharding jdbc,mycat?

sharding-jdbc目前是基于jdbc驱动,无需额外的proxy,因此也无需关注proxy本身的高可用。 Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的。

23. MYSQL的主从延迟,你怎么解决?

主从复制分了五个步骤进行:

  • 步骤一:主库的更新事件(update、insert、delete)被写到binlog

  • 步骤二:从库发起连接,连接到主库。

  • 步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。

  • 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log

  • 步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

主从同步延迟的原因

一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取binlog的线程仅有一个,当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。

主从同步延迟的解决办法

  • 主服务器要负责更新操作,对安全性的要求比从服务器要高,所以有些设置参数可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置等。

  • 选择更好的硬件设备作为slave。

  • 把一台从服务器当度作为备份使用, 而不提供查询, 那边他的负载下来了, 执行relay log 里面的SQL效率自然就高了。

  • 增加从服务器喽,这个目的还是分散读的压力,从而降低服务器负载。

24. 说一下大表查询的优化方案

  • 优化shema、sql语句+索引;

  • 可以考虑加缓存,memcached, redis,或者JVM本地缓存;

  • 主从复制,读写分离;

  • 分库分表;

25. 什么是数据库连接池?为什么需要数据库连接池呢?

连接池基本原理:

数据库连接池原理:在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。

应用程序和数据库建立连接的过程:

  • 通过TCP协议的三次握手和数据库服务器建立连接

  • 发送数据库用户账号密码,等待数据库验证用户身份

  • 完成身份验证后,系统可以提交SQL语句到数据库执行

  • 把连接关闭,TCP四次挥手告别。

数据库连接池好处:

  • 资源重用 (连接复用)

  • 更快的系统响应速度

  • 新的资源分配手段 统一的连接管理,避免数据库连接泄漏

26. 一条SQL语句在MySQL中如何执行的?

先看一下Mysql的逻辑架构图吧~

查询语句:

  • 先检查该语句是否有权限

  • 如果没有权限,直接返回错误信息

  • 如果有权限,在 MySQL8.0 版本以前,会先查询缓存。

  • 如果没有缓存,分析器进行词法分析,提取 sql 语句select等的关键元素。然后判断sql 语句是否有语法错误,比如关键词是否正确等等。

  • 优化器进行确定执行方案

  • 进行权限校验,如果没有权限就直接返回错误信息,如果有权限就会调用数据库引擎接口,返回执行结果。

27. InnoDB引擎中的索引策略,了解过吗?

  • 覆盖索引

  • 最左前缀原则

  • 索引下推

  • 索引下推优化是 MySQL 5.6 引入的, 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

28. 数据库存储日期格式时,如何考虑时区转换问题?

  • datetime类型适合用来记录数据的原始的创建时间,修改记录中其他字段的值,datetime字段的值不会改变,除非手动修改它。

  • timestamp类型适合用来记录数据的最后修改时间,只要修改了记录中其他字段的值,timestamp字段的值都会被自动更新。

29. 一条sql执行过长的时间,你如何优化,从哪些方面入手?

  • 查看是否涉及多表和子查询,优化Sql结构,如去除冗余字段,是否可拆表等

  • 优化索引结构,看是否可以适当添加索引

  • 数量大的表,可以考虑进行分离/分表(如交易流水表)

  • 数据库主从分离,读写分离

  • explain分析sql语句,查看执行计划,优化sql

  • 查看mysql执行日志,分析是否有其他方面的问题

30. MYSQL数据库服务器性能分析的方法命令有哪些?

  • Show status, 一些值得监控的变量值: Bytes_received和Bytes_sent 和服务器之间来往的流量。 Com*服务器正在执行的命令。 Created在查询执行期限间创建的临时表和文件。 Handler_存储引擎操作。 Select*不同类型的联接执行计划。 Sort*几种排序信息。

  • Show profiles 是MySql用来分析当前会话SQL语句执行的资源消耗情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值