Mysql 面试实战系列(四)——快马扬鞭(mysql面试题经典)

新闻资讯2024-08-08 22:20小乐

Mysql 面试实战系列(四)——快马扬鞭(mysql面试题经典)

路过时不要错过。错过一分,就可能错过一万、两万,就错过了一个好机会。如果您有什么好的建议或者疑问,请留言,我们一起讨论。

告诉我们如何进行sql优化

解释各个项目的含义

profile的含义及使用场景。

explain 中的索引问题。

(1)解释各项目的含义

id: 每个独立执行的操作的标志,表示操作对象的顺序。一般来说,值较大的先执行;

如果id值相同,则顺序是从上到下。

select_type:查询中每个select子句的类型。详细信息将于明天添加。

table:名称,正在操作的对象的名称,通常的表名称(或别名),但还有其他格式。

与partition:匹配的分区信息。

type:连接类型。具体说明将于明天添加。

possible_keys:列出可能使用的索引。

key:实际使用的索引。

key_len: 使用的索引键的平均长度(以字节为单位)。

ref:表示该行正在操作的对象的引用对象。它可能是const表示的常量,也可能来自其他表。

key指向的对象,比如驱动表的连接列。

rows: 估计每次需要扫描的行数。

Filtered:rows*filtered/100 表示这一步最终得到的行数(估计值)。

extra:重要的附加信息。详细信息将于明天添加。

(2) Profile的含义及使用场景。

Profile用于分析SQL性能的消耗分布。当explain无法解决慢SQL时,需要使用

profile 对sql进行更详细的分析,找出哪部分sql花费时间最多,并确认该sql

性能瓶颈。 (我用的不多,期待更好的答案)

(3)解释中的索引问题。

在Explain结果中,一般来说,应该尽量使用索引(类型为const、ref等,键列有值)而避免

无需使用全表扫描(类型明确为ALL)。例如,具有where条件和良好选择性的列需要建立索引。

驱动表的连接列也需要建立索引。从动表的连接列也可以与where条件列一起创建

联盟索引。当需要排序或分组时,还可以考虑建立索引来实现直接排序和汇总。

需要

2. 告诉我们您做了什么样的备份以及相关计划

备份计划

备份恢复时间

备份和恢复失败如何处理

原则:

mysqldump 是逻辑备份。添加--single-transaction 选项可实现一致的备份。后台流程

会话的事务隔离级别首先会被设置为RR(SET SESSION TRANSACTION ISOLATION LEVEL

REPEATABLE READ),然后显式启动事务(START TRANSACTION /*!40100 WITH CONSISTENT

SNAPSHOT */),这样可以保证事务中读取到的数据是事务的快照。然后把桌子放在桌子上

数据被读出。如果加上--master-data=1,则会在开头加上数据库读锁。

(FLUSH TABLES WITH READ LOCK),事务打开后,记录此时数据库的binlog位置(show

master状态),立即解锁,然后读取表数据。全部数据导入后,即可结束交易。

Xtrabackup:

xtrabackup是物理备份,直接复制表空间文件并不断扫描生成的重做日志并保存。

来。 innodb备份完成后,会进行一次flush引擎日志操作(旧版本有bug,

如果在5.6上不这样做,数据会丢失),确保所有重做日志都已放置(涉及事务的两阶段提交)

概念,因为xtrabackup不复制binlog,所以必须保证所有redo日志都放在磁盘上,否则

最后一组提交的交易数据可能会丢失)。这个时间点就是innodb完成备份的时间点。虽然数据文件

虽然不一致,但是通过这段时间的redo,数据文件可以达到一致性(恢复时做了什么)

感情)。然后,您需要使用读锁刷新表并从其他引擎(例如myisam)备份表。

备份完成后解锁。这样就形成了完美的热备。

后备方案:

这取决于图书馆的规模。一般来说,对于100G以内的库,可以考虑使用mysqldump,因为mysqldump

更加轻量灵活,备份时间选择在业务低峰时期,每天可以进行全量备份(mysqldump备份

生成的文件更小,压缩后更小)。

对于100G以上的库,可以考虑使用xtranbackup。备份速度明显比mysqldump快。一般来说

每周选择一次全量备份,其余的每天进行增量备份。备份时间为业务非高峰期。

备份恢复时间:

物理备份恢复快,逻辑备份恢复慢

备份与恢复失败如何处理:

首先,恢复前要做好充足的准备,避免恢复过程中出现错误。例如备份后的有效性检查,

权限检查、空间检查等,如果报错,根据错误提示进行相应调整。

3.500db,最快时间重启

您可以使用批量ssh工具pssh在需要重启的机器上执行重启命令。还可以使用salt(前提是客户端安装了salt)或者ansible(ansible只需要ssh登录)等多线程工具来同时操作多台服务器。

4、innodb读写参数优化

读取参数、全局缓冲池和本地缓冲区

写入参数

IO相关参数

缓存参数及缓存适用场景

(1)读取参数、全局缓冲池和本地缓冲区

全局缓冲区:

Innodb_buffer_pool_size

innodb_log_buffer_size

innodb_additional_mem_pool_size

local buffer(以下都是server层的session变量,不是innodb):

读取缓冲区大小

连接缓冲区大小

排序缓冲区大小

键缓冲区大小

Binlog_cache_size

(2)写入参数

insert_buffer_size资源由www.eimhe.com美禾学习在线合集提供

innodb_double_write

innodb_write_io_thread

innodb_flush_method

(3)IO相关参数

同步_binlog

Innodb_flush_log_at_trx_commit

Innodb_lru_scan_深度

Innodb_io_capacity

Innodb_io_capacity_max

innodb_log_buffer_size

innodb_max_dirty_pages_pct

(4)缓存参数及缓存适用场景

你的意思是查询缓存吗?用于多读少写,比如分析报告等。

查询缓存大小

查询缓存类型

查询缓存限制

最大查询缓存大小

如果对你有帮助的话请给我点个赞

猜你喜欢