《叶问》第3期

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。

2018年6月24日,周日

MySQL 8.0相对于5.7的复制改进,都有哪些呢?

宋利兵老师:《MySQL 8.0相对于5.7的复制改进》的公开课也讨论了这个命题,简单概括主要有两部分

一、普通复制功能改进

1、新增WRITESET并行复制模式,提高并行度,降低延迟
2、在多源复制中,可在线动态修改每个channel的filter rule,并且能在P_S中查看/监控
3、Binary Log中存储更多元数据,并支持毫秒级别的延迟监控
4、对JSON Documents的复制效率更高了
5、支持DDL Crashsafe
6、增加caching_sha2_password安全策略,提高复制安全性

二、MGR功能改进:

1、支持设置节点权重,且权重最大的在线节点将被选举为主
2、每个节点中存储更多的状态信息,如版本、角色等
3、可根据从节点的事务状态,自动化流控
4、离开集群的服务器自动被设置为read only,避免被误操作更新数据
5、可监控MGR的内存使用情况

2018年6月25日,周一

跑truncate table,4亿条数据会不会造成长时间锁表呢?有什么更好的方法吗?

最好是create新表,然后交叉rename对调,再drop/truncate table或其他方式清除数据。

一、可操作步骤:

1、创建新的 tmp 表,正式表与tmp表表名交换(注意在一个SQL里完成,并锁表)
2、对 tmp 表创建硬链接 ln tmp.ibd tmp.ibd.hdlk
3、mysql中删除表tmp(truncate / drop 都行)
4、然后找个业务不繁忙的时间删除数据文件或者用coreutils 的truncate慢慢搞

二、关于truncate table,官档解释:

1、Logically, TRUNCATE TABLE is similar to a DELETE statement that deletes all rows, or a sequence of DROP TABLE and CREATE TABLE statements When a table is truncated, it is dropped and re-created in a new .ibd file, and the freed space is returned to the operating system

2018年6月26日,周二

明明有个索引“感觉”应该被选中,EXPLAIN时在possible_keys也有它,但最后没被选中,可能的原因有哪些?

一、执行计划如下:

1、desc select * from t1 where c2 >= 2;

key: NULL
key_len: NULL
rows: 14
filtered: 92.86
Extra: Using where

二、可能的原因如下:

1、隐式转换
2、表碎片,因为表的碎片率过高
3、根据索引读取到的数据在整个表中的数据占比超过30%
4、统计信息没有及时更新

三、上述执行计划的结果是:

预计扫描的行数为14行,filtered(是指返回结果的行占需要读到的行的百分比)的值为92%。

当前执行计划中filtered值92% 说明根据索引查询获取的结果占整张表的92%,在MySQL中根据索引查询的结果占整张表的数据30%则不会走索,所以不会走索引。
另外,也有可能是表的碎片率过高或隐式转换导致的。

2018年6月27日,周三

主从复制线程均正常(为Yes,也没报错),Master的binlog已到binlog.000100,但slave上看到Master_Log_File却只到binlog.000090,可能的原因有哪些?

首先要注意,这是Master_Log_File IO线程延迟,并不是Relay_Master_Log_File SQL线程延迟。

一、可能的原因如下:

1、由于sync_relay_log值过低,导致Slave频繁刷新relay_log文件,使 Slave的硬盘资源消耗过高,所以导致SlaveIO Thread很慢。
2、Master/Slave压力过大导致Slave IO Thread不能及时响应, 无法及时获得Master的event。
3、网络丢包严重。小包可以连接并且保持连接不断,但是大包就无法发送。可能是Master和Slave关于TCP MTU值设置不一致导致。
4、Master和Slave网络链接已经断开。但slave_net_timeout值等于0(表示完全禁用心跳)或者slave_net_timeout和Slave_heartbeat_period非常大(表示检测主从心跳的时间)。
5、Master的binlog非常大,io线程的file很长时间都在读同一个。

二、总结

本次案例是在主库进行压力测试,在压力测试的过程中,因为Master本身的压力就很大Master来不及把binlog发送给Slave。所以表面上看起来没有延迟,但实际上已经产生了延迟。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 监控 关系型数据库
监控 PostgreSQL 的性能指标
监控 PostgreSQL 的性能指标
657 3
|
缓存 关系型数据库 数据库
PG:checkpoint是什么
PG:checkpoint是什么
331 0
|
SQL 关系型数据库 数据库
【一文搞懂PGSQL】4.逻辑备份和物理备份 pg_dump/ pg_basebackup
本文介绍了PostgreSQL数据库的备份与恢复方法,包括数据和归档日志的备份,以及使用`pg_dump`和`pg_basebackup`工具进行逻辑备份和物理备份的具体操作。通过示例展示了单库和单表的备份与恢复过程,并提供了错误处理方案。此外,还详细描述了如何利用物理备份工具进行数据损坏修复及特定时间点恢复(PITR)的操作步骤,以应对误操作导致的数据丢失问题。
|
消息中间件 存储 NoSQL
一文读懂python分布式任务队列-celery
# 一文读懂Python分布式任务队列-Celery Celery是一个分布式任务执行框架,支持大量并发任务。它采用生产者-消费者模型,由Broker、Worker和Backend组成。生产者提交任务到队列,Worker异步执行,结果存储在Backend。适用于异步任务、大规模实时任务和定时任务。5月更文挑战第17天
1758 1
|
关系型数据库 MySQL Java
为了把MySQL分库分表:MyCAT学明白,我花了近一个月的时间!
MySQL分库分表:MyCAT-问题描述 随着数据库存储的内容越来越多,MySQL主从复制也开始无法存储更多的数据,此时就需要切割表,把一张过大的表切割后分别存储在不同的MySQL中,以便存储更多的内容,承载更多的用户。此阶段出现的典型问题如下: (1)随着互联网的发展,数据的量级也呈指数级增长,从GB到TB再到PB。对数据的各种操作也愈加困难,传统的关系数据库已经无法满足快速查询与插入数据的需求。如何使单表数据量存储更大?甚至期望单表数据量可以“无限扩大”。 (2)MySQL本身是不支持读写分离的,MySQL只支持主从数据复制,读写功能需要重新开发,。有没有一种办法可以不用一次次重写这部
|
存储 缓存 搜索推荐
综合指南:postgresql shared buffers
综合指南:postgresql shared buffers
775 0
|
SQL 监控 Kubernetes
软件测试|简单易学的性能监控体系prometheus+grafana搭建教程
软件测试|简单易学的性能监控体系prometheus+grafana搭建教程
软件测试|简单易学的性能监控体系prometheus+grafana搭建教程
|
SQL 关系型数据库 MySQL
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat
963 0
报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregat