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语句执行的资源消耗情况
本文详细介绍了MVCC的工作原理,数据库中间件如Sharding-JDBC和Mycat的区别,以及如何处理MySQL主从延迟、大表查询优化、数据库连接池、SQL执行过程、InnoDB索引策略和时区转换,还探讨了SQL执行过长时的优化方法和MySQL性能分析工具。
45万+

被折叠的 条评论
为什么被折叠?



