5 天前 / 是小桔啦
关键词:MySQL Index Merge 前言 MySQL 的锁机制相信大家在学习 MySQL 的时候都有简单的了解过,那既然有锁就必定绕不开死锁这个问题。其实 MySQL 在大部分场景下是不会存在死锁问题的(比如并发量不高,SQL 写得不至于太拉胯的情况),但是在高并发的业务场景下,一不注意就会产生死锁,而这个死锁分析起来也比较麻烦。 前段时间在公司实习的时候就遇到了一个比较奇怪的死锁,之前一直没来得及好好整理,最近有空复现了一下,算是积累一点经验。 业务场景 简单说一下业务背景,公司做的是电商直播,我负责的是主播端相关的业务。
8 天前 / u128287
面试官问:假设你负责的某业务在双十一期间要搞运营活动,公司投入了大量的营销费用进行推广,此举会带来巨大的流量,如果你作为架构师或者技术负责人,要如何设计方案来优化 MySQL,从而支持这种突发流量的读多写少的场景? 旁白:首先,我们要知道,对于大部分 OLTP 系统来说,读流量都是远远高于写流量的,可能达到几个数量级的差距,例如微信朋友圈,大部分人都是看的多,但可能一个月都发不了一条消息,同理,你上京东,更多的情况下是搜索并浏览商品,真正下单的比例会低很多。
11 天前 / Dean_Wong
MySQL到其他异构数据库之间的同步,一般来说都是通过binlog + canal的方式,现在比较流行的说法称其为 change data capture (CDC),其实canal的诞生可以追溯到2014年,那会儿CDC的概念可能还没有,可见业界造词能力有越来越强的趋势。 遇到canal的这个问题说来也是诡异,异构数据库间同步的模块已经半年多没有变化。但是问题突然在一次upgrade后出现,所以一直在upgrade有关的模块排查,甚至一度想要rollback。
26 天前 / 开发者头条
要查找两个日期或时间戳之间的数据: SELECT *FROM task_instancewhere execution_date between '2021-01-01' and '2021-01-31';-- 也可以写成时间戳格式 SELECT *FROM task_instanceWHERE execution_date BETWEEN '2021-01-01 00:00:00' AND '2021-01-31 23:59:59';SELECT *FROM task_instanceWHERE execution_date >= '2021-01-01' AND execution_date < '2021-02-01';查询最近一周的数据: SELECT *FROM task_instanceWHERE execution_date > (now() + interval 1 week);也可以通过函数 DATE_ADD 和 DATE_SUB 来计算时间 SELECT *FROM task_instanceW...
34 天前 / vivo互联网技术
一、背景 随着公司业务的发展,商品库存从商品中心独立出来成为一个独立的系统,承接主站商品库存校验、订单库存扣减、售后库存释放等业务。在上线之前我们对于核心接口进行了压测,压测过程中出现了 MySQL 5.6.35 死锁现象,通过日志发现引发死锁的只是一条简单的 sql,死锁是怎么产生的?发扬技术人员刨根问底的优良传统,对于这次死锁原因进行了细致的排查和总结。本文即是此次过程的一个记录。 在深入探究问题之前,我们先了解一下 MySQL 的加锁机制。 二、MySQL 加锁机制 首先要明确的一点是 MySQL 加锁实际上是给索引加锁,而非给数据加锁。
40 天前 / BloomingRose
本文根据高新刚老师在〖2020 Gdevops 全球敏捷运维峰会〗现场演讲内容整理而成。 (点击文末“阅读原文”可获取完整 PPT) 讲师介绍 高新刚,京东数科数据库团队负责人,负责京东数科数据库平台的管理维护工作,带领团队平稳护航多次 6·18、11·11 的大促活动;对数据库多业务场景架构设计,高并发解决方案,数据生态管控有着丰富的实践经验;对数据库库中间件、分布式事务数据库和自动化智能化运维平台设计开发有着深入的实践和探索;长期专注于数据库产品化输出和国产数据库的探索研究。
50 天前 / 狂聊Java
点上面蓝色字体 关注我呀 大家好,我是狂聊君。 今天来聊一聊 Mysql 缓存池原理。 提纲附上,话不多说,直接干货。 前言 面试官:同学,你能说说 Mysql 缓存池吗? 狂聊君:啊,这么难吗,容我组织一下语言。(内心 OS:这 TM 还不简单?我能给你扯半小时!) 面试官:可以,给你一分钟时间想一想吧。 ....一分钟后。... 狂聊君:我准备好了,你可听好,我要开始表演了。 为什么要有缓存池? Mysql 的 innodb 存储引擎是基于磁盘存储的,并且是按照页的方式进行管理的。
52 天前 / frankphper
千万不要看到 WHERE 条件中出现的字段就直接创建索引,因为创建太多的单列索引,反而会造成性能降低。 无需一开始就创建索引,可以等到业务场景明确后,或者是数据量超过 1 万、查询变慢后,再针对需要查询、排序或分组的字段创建索引。我们可以把所有的请求记录到 general log 里面,或者我们把 long_query_time 设置为 0 把所有的 sql 都当成慢查询 sql,记录所有的 sql,然后在针对这些慢查询 sql 进行分析,看看哪些 sql 出现的频率最高,或者是哪些 sql 的执行耗时更高,然后我们针对这些 sql,再进行有针对性的去创建合适的索引。
53 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! 平常使用 mysql ,必不可少的会用到 update 语句,不知道小伙伴有没有这样的疑问? 如果 update 语句和原数据一样会更新么?更具体的来说,如果更新的数据前后是一样的,MySQL 会更新存储引擎中(磁盘)数据么? 关于这个问题,在分析之前我们可以思考下:update 语句和原数据一样,有必要更新么?理论上来讲是没有必要的。MySQL Server 层在执行 sql 时,其实是不知道是否是一样的,因此可以猜想,如果 MySQL 已经知道原数据的话,这样可以和 update 语句做对比,这样一样的话可以不用更新了。
53 天前 / flyer0126
正文共:2487 字 6 图预计阅读时间:7 分钟 发现的一些问题 问题 1 在过去的半年时间里,研发团队内部尝试抓了一波儿慢查询 SQL 跟进处理率。发现有些同学对于慢查询处理的思路就是看看有没有用到索引,没有用到就试图加一个,实在不行就甩锅给这种情况是历史设计问题或者自行判定为用户特殊操作下触发的小概率事件,随即便申请豁免掉。.. 其实问题没有根本上解决。 问题 2 还有就是网络上经常可以看到一些类似这样的文章: “慢 SQL 性能优化大全” “慢 SQL 性能优化看这篇就够了”... 其实内容大同小异,要么建议加索引...
57 天前 / zlt2000
点击上方“陶陶技术笔记”关注我 回复“资料”获取作者整理的大量学习资料! 一、前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM)。 其实在 MySQL 数据库中提供了流式查询,允许把符合条件的数据分批一部分一部分地加载到内存中,可以有效避免 OOM;本文主要介绍如何使用流式查询并对比普通查询进行性能测试。 二、JDBC 实现流式查询 使用 JDBC 的 PreparedStatement/Statement 的 setFetchSize 方法设置为 Integer.MIN_VALUE 或者使用方法 Statement.enableStreami...
57 天前 / 峻岭云松
并发控制无论什么时候,只要有多个线程 ( 或进程)同一数据修改数据,就会产生并发控制问题 读写锁共享锁和排他锁 ( 或者是读锁和写锁) 读锁: 共享的,多用户可以同时读取同一个资源,相互不干扰写锁: 排他,会阻塞其他的读锁或者写锁,只能一个用户写入锁粒度尽量只锁住需要修改的内容,而不是所有资源。任何时候,在给定的资源上,锁的数量越少,冲突越少,那么系统的并发程度就越高。 锁也耗资源,锁的操作包括,检查所是否已经解除,获得锁,释放锁,这些都会增加系统开销,进而影响系统性能。锁策略,就是在锁的开销和安全性之间寻求平衡。
64 天前 / flyer0126
今天同事在处理系统慢 SQL 时遇到几个疑惑的问题,简单描述如下~ 【背景铺垫】 相关表: CREATE TABLE test_table ( id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY (id)) ENGINE = InnoDB CHARSET = utf8mb4;test_table 表记录数约 12w+ 问题描述相关 SQL: EXPLAIN SELECT COUNT(*) FROM test_table WHERE id >= 10534 AND id = 10000 LIMIT 10; 疑问 2:LIMIT 值不会影响 rows 的值么? rows 究竟是怎么计算的呢?这个 rows 在官网文档中的解释如下: “rows(JSON name:rows) Therowscolumn indicates ...
71 天前 / 苏三说技术
前言继上一篇《explain | 索引优化的这把绝世好剑,你真的会用吗?》之后,本篇是索引相关的第 2 篇文章。上一篇重点介绍的是使用 explain 执行计划查看索引执行情况,以便于快速定位哪张表有索引使用问题。 本篇主要介绍的是索引失效的常见原因和如何用好索引,跟上一篇正好承上启下,给有需要的朋友一个参考。 本文将从以下几个方便进行讲解: 1.索引失效常见原因: 2.索引失效常见误区: 3.索引设计的几个建议: 准备工作查看当前 mysql 的版本: select VERSION(); 查出当前版本为:8.0.21 创建一张表 test1 CREATE TABLE `test1` ( `id` bigint...
75 天前 / 虞大胆
最近迁移 mysql 和升级 mysql 版本,遇到了很多乱码(主要是表情问题)问题,所以记录下。 mysql 字符集分别支持四种级别的字符集和对应的比较规则,比如服务器级别的是 character_set_server,数据库级别的是 character_set_database,表级别和列级别也可以设置字符集,比如: create database test CHARSET set utf8mb4 COLLATE utf8_general_ci 另外字符集比较也要遵循规则,比较常用的比较规则是 utf8_general_ci。 一般服务器启动的时候配置: [mysqld] character_set_server = utf8mb4 在安装和创建库表的时候,尽量使用 utf8mb4 字符集。