首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

2020数据库面试题

我们把识别度最高的字段放到最前面 在创建多列索引,我们根据业务需求,where子句中使用最频繁的一列放在最左边,因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据从联合索引的最左边开始匹配...这个级别的性能没有足够大的优势,但是又有很多的问题,因此很少使用....SERIALIZABLE(可串行化) 这是最高的隔离级别,可以解决上面提到的所有问题,因为他强制将所以的操作串行执行,这会导致并发性能极速下降,因此也不是很常用. 6....3. mySql主从复制的原理 主库将变更的操作写入bin-log日志中(增,删,改操作)....来供MySQL排序的时候使用,而且尽量不要进行大结果集的GROUP BY操作,因为如果超出系统设置的临时表大小的时候会出现将临时表数据copy到磁盘上面再进行操作,这时候的排序分组操作性能将是成数量级的下降

72630

第二轮:从 Linux 内核事件看 MySQL 性能瓶颈

经过两轮优化后 MySQL 单个连接 tps 如下 优化前 第一轮 第二轮 158 tps 1673 tps 1924 tps 经过第两轮优化把性能提升到了原来的 12.18 倍(1924 / 158...---- 书接上回 上回我们通过 linux 内核的 ebpf 模块观测能力定位了 MySQL 的瓶颈,并通过调整相应的 MySQL参数把 tps 由 158 提升到了 1673 ;但是从性能上讲我们还有提升的空间...---- 调整参数验证性能 由于我们的目标是性能,所以压缩 BIN-LOG 在这个目标下对我们是没有意义的。...那么现在就调整 MySQL 参数,我们不再压缩 BIN-LOG ,不要让 CPU 做这种没有意义的事。...mysql> set @@global.binlog_transaction_compression = OFF; Query OK, 0 rows affected (0.00 sec) 再测试一下性能

49520

第十二章《mysql的日志优化》

二进制日志默认是关闭的,因为开启日志会消耗mysql性能。...通过二进制日志恢复或还原数据 使用二进制日志还原数据到最有一次备份的内容,也可以指定具体时间或者位置来还原数据; mysqlbinlog [option] 二进制日志文件 mysql -u 用户名...log dump线程: 当从节点连接主节点,主节点会创建一个log dump线程,用于发送bin-log的内容,当读取bin-log日志,此线程会对主节点上的bin-log加锁,当读取完成,甚至是发送给从节点之前...而从库上的I/O和sql线程他们负责的工作是分开的,这样从节点的I/O线程只要拉取到了主的bin-log并写入到relay-log中,即使在sql线程没有执行写入操作,从节点故障,也能保证数据的一致性...因此要实现主从复制,主节点必须要打开bin-log功能; GTID复制功能; 主节点更新数据,会在事务前产生GTID,一起记录到bin-log当中,从节点的I/O线程将变更的bin-log写入到本地的

35530

第十二章《mysql的日志优化》

show等语句;二进制日志以事件的格式记录日志主要包括时间、数据发生变化的内容以及位置;二进制日志的作用:用来恢复数据和数据的复制; 二进制日志默认是关闭的,因为开启日志会消耗mysql性能。.../usr/bin/ mysqlbinlog mysql-bin.000012 通过二进制日志恢复或还原数据 使用二进制日志还原数据到最有一次备份的内容,也可以指定具体时间或者位置来还原数据;...log dump线程: 当从节点连接主节点,主节点会创建一个log dump线程,用于发送bin-log的内容,当读取bin-log日志,此线程会对主节点上的bin-log加锁,当读取完成,甚至是发送给从节点之前...而从库上的I/O和sql线程他们负责的工作是分开的,这样从节点的I/O线程只要拉取到了主的bin-log并写入到relay-log中,即使在sql线程没有执行写入操作,从节点故障,也能保证数据的一致性...因此要实现主从复制,主节点必须要打开bin-log功能; GTID复制功能; 主节点更新数据,会在事务前产生GTID,一起记录到bin-log当中,从节点的I/O线程将变更的bin-log写入到本地的

38220

深度探索MySQL主从复制原理

MySQL 主从复制主要用途 l 读写分离 在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景...多主一从 (从5.7开始支持) 多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上。...主节点 binary log dump 线程 当从节点连接主节点,主节点会创建一个log dump 线程,用于发送bin-log的内容。...在读取bin-log中的操作,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。...在MySQL 5.6里面,我们可以把多个表放在多个库,这样就可以使用多线程复制。 基于GTID复制实现的工作原理 主节点更新数据,会在事务前产生GTID,一起记录到binlog日志中。

62920

Mysql主从复制搭建与深度原理分析

首先,在docker下进行搭建mysql可以当做学习数据库搭建的测试使用,docker的hub中有已经封装好的mysql可以避免我们进行数据库安装的复杂步骤,而且docker容器之间相互独立,拥有自己的...server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin 配置 server-id 完后,需要重启mysql 使用service mysql restart...填写在从库sql中 配置slave [mysqld] ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master使用...bin-log的时候,会对bin-log进行加锁,读取完毕就释放。...dump 没有什么相关性 说明 Mysql 主从复制是mysql 高可用,高性能的基础,有了这个基础,mysql 的部署会变得简单、灵活并且具有多样性,从而可以根据不同的业务场景做出灵活的调整。

39110

1-MYSQL基础理论知识总结

不支持事务 表级锁定:数据库更新锁整个表,锁定机制是表级索引,让锁定的实现成本很小但是也同时大大降低了并发性能; 读写相互阻塞 只会缓存索引:通过key_buffer_size 缓存索引,以提高风闻性能减少磁盘...启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入) 尽量顺序操作让insert数据都写入到尾部(减少阻塞) 分解大的时间长的操作,降低单个操作的阻塞时间。...优点:解决row level的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO提高性能(只需要记录master执行的语句的细节,以及执行语句时候的上下文的信息)。...database:是数据库服务器中某个库使用的字符集设定,如果建库没有指明,将使用服务器安装指定的字符集设置。...results:是数据库给客户端返回使用的字符集设定,如果没有指明,使用服务器默认的字符集。 server:是服务器安装指定的默认字符集设定。

34530

一张图看懂 SQL 执行过程

这些 SQL 语句首先被送到分析器,分析器的任务是解析 SQL 语句,确定其语法是否正确,并将其转化为一个内部数据结构,以供 MySQL 后续使用。...回滚日志用于记录修改前的数据,以便在事务回滚恢复原始数据。如果事务执行失败,MySQL 可以使用undo log 来撤销已经进行的修改。 6....change buffer change buffer 是 InnoDB 引擎的特性之一,在 MySQL 5.5 之前,change buffer 的主要作用是提高数据插入性能,又被称作 insert...我们知道,当非聚集索引插入时,数据会按主键的顺序存放,所以叶子节点可能需要离散地访问数据索引页,每次索引页更新,都需要刷新磁盘。而每次读写磁盘的时间都会很久,故而导致插入性能较低。...在读取 binlog 中,log dump 线程会对主节点上的 bin-log 加锁,直到读取完成,锁释放。 主节点会为自己的每一个从节点创建一个 log dump 线程。

33930

MySQL binlog

MySQL 的配置参数中设定这个复制级别,不同复制级别的设置会影响到 Master 端的 bin-log 日志格式。...优点: 不记录每一行数据的变化,减少了 bin-log 日志量,节省 I/O 以及存储资源,提高性能。因为只记录在 master 上所执行的语句的细节,以及执行语句时候的上下文的信息。...) ; 视图中必须要求运用 row ,例如建立视图使用了 UUID() 函数; row-based和statement-based特点总结 statement 优点: 历史悠久,技术成熟; 产生的...2、如果生产中使用MySQL的特殊功能较多的,可以选择Mixed模式。...设为1是最安全的,在系统故障最多丢失一个事务的更新,但是会对性能有所影响,一般情况下会设置为100或者0,牺牲一定的一致性来获取更好的性能

2.9K50

第十二章《mysql的日志优化》

show等语句;二进制日志以事件的格式记录日志主要包括时间、数据发生变化的内容以及位置;二进制日志的作用:用来恢复数据和数据的复制; 二进制日志默认是关闭的,因为开启日志会消耗mysql性能。.../usr/bin/ mysqlbinlog mysql-bin.000012 通过二进制日志恢复或还原数据 使用二进制日志还原数据到最有一次备份的内容,也可以指定具体时间或者位置来还原数据;...log dump线程: 当从节点连接主节点,主节点会创建一个log dump线程,用于发送bin-log的内容,当读取bin-log日志,此线程会对主节点上的bin-log加锁,当读取完成,甚至是发送给从节点之前...而从库上的I/O和sql线程他们负责的工作是分开的,这样从节点的I/O线程只要拉取到了主的bin-log并写入到relay-log中,即使在sql线程没有执行写入操作,从节点故障,也能保证数据的一致性...因此要实现主从复制,主节点必须要打开bin-log功能; GTID复制功能; 主节点更新数据,会在事务前产生GTID,一起记录到bin-log当中,从节点的I/O线程将变更的bin-log写入到本地的

28520

面试官你好,我已经掌握了MySQL主从配置和读写分离,你看我还有机会吗?

主从模式可以更好的分担数据库压力,将插入更新操作和查询操作分开,提高系统整体性能。 本文的目的就是介绍一下简单的一主一从架构的配置和原理。...启用 bin-log,并设置 server-id 需要在 MySQL 配置文件中修改,MySQL 配置文件默认位置在如下位置,从上下到下优先级降低: /etc/my.cnf /etc/mysql...binlog_format bin-log 日志的格式,支持下面三种,推荐使用 mixed 。 statement:会将对数据库操作的sql语句写入到binlog中。...在主服务的 binlog dump 线程将指定的 binlog 信息发给从服务,除了日志内容,还包括本次发送内容在主服务端的 bin-log 日志文件名称以及位置信息。...总结 主从配置+读写分离可以很大程度上保证系统高可用性和整体性能,而且也是互联网应用的基础入门配置。

1K20

Mysql主从复制的问题与解决

主从复制的原理 主库将变更的操作写入bin-log日志中(增,删,改操作)....从库中的I/O线程将主库的bin-log拷贝到本地,写入relay-log(中继日志中) 从库的SQL线程从中继日志中读取bin-log然后再在本地执行一遍SQL,保证从库和主库数据的一致性....,就会给主库返回一个ack,主库接受到ack才会认为写操作完成,否则将进行回滚从新写入. mysql主从同步延时问题 使用下面的语句可以看到从库落后主库的秒数 show status,Seconds_Behind_Master...解决方案: 分库:将主库拆分为4个主库,减少主库的写压力,此时主从延时可以忽略. mysql的并行复制,多个库并行复制,如果说某个库的写入并发就是特别高,单库写并发达到了2000/s,并行复制还是没意义...在插入数据后不进行查询直接更新,这样的更新就是在主库进行

56810

MySQL二进制日志

Master 端的 bin-log 日志格式。...优点: 在 statement 模式下,首先就是解决了 row 模式的缺点,不需要记录每一行数据的变化,减少了 bin-log 日志量,节省 I/O 以及存储资源,提高性能。...在 statement 中,目前已经发现的就有不少情况会造成 MySQL 的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep() 函数在有些版本中就不能被正确复制...,在存储过程中使用了 last_insert_id() 函数,可能会使 slave 和 master 上得到不一致的 id 等等。...AUTO_INCREMENT 字段的表被更新; 执行 INSERT DELAYED 语句; 用 UDF ; 视图中必须要求运用 row ,例如建立视图使用了 UUID() 函数; 在配置文件

96950
领券