首页 > 数据库 >MySQL DBA 面试问题

MySQL DBA 面试问题

时间:2024-05-06 09:34:18浏览次数:19  
标签:thread DBA 数据库 mysql current 面试 innodb MySQL

1、MySQL适用的场景是什么?

数据量建议单实例T级或以内,不依赖存储过程、函数、触发器的传统oltp场景都适用,因为是一个相对轻量级的数据库

灾备使用MySQL各类的高可用方案即可,比如主从、mha、mgr等。

2、MySQL巡检应该怎么做?优先关注哪些参数?

可以从以下几个方面去做:

  • 服务器配置
  • 操作系统配置及重要参数
  • MySQL层配置及重要参数
  • MySQL对象
  • MySQL运行时的重要状态(日志、锁)

3、MySQL如何排查CPU占用高的问题?

重点是关于通过哪些系统表或者常用的sql来确定导致问题的sql?

方案一、通过pidstat命令定位

首先我们先找到mysqld进程的PID,然后执行pidstat -t -p $PID,结果如下图:

 

 

进入mysql交互命令,通过以下命令查询具体SQL。

select * from performance_schema.threads where thread_os_id = '1';

定位到了具体定位sql接下来就可以分析优化了。

方案二、通过TOP命令定位

  • 首先执行TOP命令,输入H,可以按照显示线程状态。
  • 输入P,可以按照cpu的使用时间份额进行排序,这时候我们就可以看下是否有超过70%-90%以上的线程了。

登录mysql,执行以下命令

select * from performance_schema.threads where THREAD_OS_ID=4461 \G

4、MySQL数据库内存使用率高,应该如何进行排查?

Mysql Server Memory Usage= Sum of Global Buffers + (number of Connection * Per thread memory variables)

单个mysql连接线程的内存消耗统计,这里只是统计分配值(具体驻留内存占用值统计不到)

SELECT b.thd_id, b.user, current_count_used, current_allocated, current_avg_alloc
  , current_max_alloc, total_allocated, current_statement
FROM memory_by_thread_by_current_bytes a, session b
WHERE a.thread_id = b.thd_id
LIMIT 1;

统计 top 10 的buffer pool占用内存的表

SELECT * 
FROM 
innodb_buffer_stats_by_table 
ORDER BY pages DESC
LIMIT 10;

5、MySQL数据库磁盘IO使用高,请问如何进行排查?

mysql5.7版本为例,结合performance_schema来查看MySQL数据库的各种指标。相当于Oracle数据库中的各种性能视图,可以查看几乎所有的数据库状态。

IO的话,可以查看这张表:

performance_schema.file_instances:列出了文件I / O操作及其相关文件的工具实例

排查思路:

1、慢SQL排除

2、硬件问题-RAID降级,磁盘故障等排除

2、innodb_log、innodb_buffer_pool_wait相关配置和等待

3、IO相关参数配置

innodb_flush_method = O_DIRECT

innodb_file_per_table = 1

innodb_doublewrite = 1

delay_key_write

innodb_read_io_threads

innodb_read_io_threads

innodb_io_capacity

innodb_flush_neighbors

sync_binlog

对比历史性能记录,结合业务以及负载来分析。

6、有哪些工具可以帮助优化MySQL的?

以下工具可以参考:

pt-mysql-summary

pt-variable-advisor

pt-duplicate-key-checker

pt-deadlock-logger 

或者

tuning-primer.sh

https://github.com/major/MySQLTuner-perl

7、目前主流的MySQL高可用采用哪种方式,MHA还是MGR?

由于MGR技术相对较新,目前使用MHA更多。但个人认为,MGR或者基于此的innodb cluster架构(或替代方案)会成为未来主流。

MHA:

优点:成熟稳定,自动切换主从,主节点宕机后尽可能少丢失数据(自动抓取未复制的binlog)。

缺点:管理节点单点、可能脑裂、可能有不必要切换、还是有丢数据风险、组件多维护相对麻烦

MGR:

优点:基于paxos的高可用架构,支持多主(不建议),强一致

缺点:需要innodb引擎(丢业务有改造代价),应用端没有自动切换(可以通过中间件解决),技术太新可能有未知bug。

标签:thread,DBA,数据库,mysql,current,面试,innodb,MySQL
From: https://www.cnblogs.com/ataoxz/p/18174281

相关文章

  • mysql忘记密码
      mysql修改用户密码的方法及命令 方法1:用SETPASSWORD命令 首先登录MySQL。 格式:mysql>setpasswordfor用户名@localhost=password('新密码'); 例子:mysql>setpasswordforroot@localhost=password('123'); 方法2:用mysqladmin 格式:mysqladmin-u用户名......
  • 面试必问并发编程内存模型JMM与内存屏障剖析 学习
    总课程:1、JMM。每个线程会产生一个变量副本。如下图所示,第二个变量修改了变量initFlag,但线程1并不会退出,是因为每个线程产生了副本。----解决方法:volatileCPU缓存一致性协议:MESI机制,以及内存模型底层八大原子操作。Volatile缓存可见性实现原理:底层实现主要通过汇编lock前......
  • Mysql权限管理,备份与三大范式
    mysql访问权限系统表mysql的权限由四个表来控制权限,分别是user表,db表,tables_priv表,columns_priv表表名作用user存放用户账号、密码、主机信息和全局权限db数据库级别的权限表tables_priv表级别的权限表columns_priv列级权限表procs_priv函数/存储过......
  • Mysql索引
    索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引的优缺点:优点:所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引。大大加快数据的查询速度。缺点:......
  • java面试-mybatis篇
    1.#{}和${}的区别是什么#{}是预编译处理,在mybatis处理#{}时,会将其转换为?,这种方式可以有效避免sql注入。${}是字符串替换,在mybatis处理${}时,会将其替换成变量的值。2.通常一个xml映射文件,都会有一个对应的dao接口。请问这个dao接口原理是什么,dao接口的方法参数不同时,支......
  • mysql执行update语句流程
    客户端发送更新命令到MySQL服务器,经过处理连接、解析优化等步骤;Server层向InnoDB存储引擎要id=1的这条记录;存储引擎先从bufferpoll中查找这条记录,有的话直接返回,没有则从磁盘加载到bufferpoll中然后返回;Server层执行器修改这条记录的name字段值;存储引擎更新修改到内存中;存储......
  • Mysql中的事务
    事务的四大特性:特性解释原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。一致性(Consistency)事务发生前后,数据的完整性要保持一致。隔离性(Isolation)隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的......
  • 解析mysql奇葩语句
    首先看看完整的表如下图那么看看一个比较奇葩的语句select*fromuserswherename='aa'='bb'这个语句为啥能执行成功以及为什么打印出了除了两个aa之外的所有行数据呢。我们来解释一下原理。当我们使用where语句的时候,where是会一行一行的匹配的,同时where的执......
  • 如何选择配置 MySQL innodb_log_file_size
    配置InnoDB的redo空间大小是写密集型工作负载最重要的配置选项之一。不过,这需要权衡利弊。配置的redo空间越大,InnoDB就能更好地优化写IO。不过,增加redo空间也意味着在系统断电或因其他原因崩溃时需要更长的恢复时间。 对于特定的innodb_log_file_size值,要预测系统......
  • 构建包含mysql和redis服务的docker镜像
    直接上dockerfile代码1FROMcentos:centos7.9.20092RUNyuminstall-ywget&&\3wgethttps://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm&&\4yum-ylocalinstallmysql80-community-release-el7-11.noarch.rpm......