MySQL的Open_tables 与 Opened_tables的区别
新年第一篇。 我们找到一个刚刚全部刷新的数据库(或者重启的数据库),有些东西我们可以先不看文档,用实验来看看效果。打开会话A。图1 &nbs
数据库的部分索引
书接上回上次说到key_len的长度。我们假设有一个表50个字段,有很多数据,大约有100G吧。我们理想化一点,每个字段一样大小。那么在其中一列上建立索引,那么执行select column from table 这样的情况如图1 &nb
key_len怎么算?
昨天讲课时候发现我截图的key_len和我算的不一样。按理说这种讲了很多次了,实验也做了很多次,没可能错。后来课后检查,发现是字符集略有差别。今天借这个说一下,截图的字符集和我昨天实操的有点差别。一个是utf-8,还有一个是utf-8mb4。我们先看实验吧。看图1.  
MySQL的clone(克隆)要注意的点
MySQL的克隆功能对于数据库来说建立主从太方便了。在实际工作中解决了不少问题,但是有一次的经历让我也感受到了其中有些需要注意的地方。如果不注意这些,会带来问题。 首先初始化一个MySQL8的数据库。MySQL安装软件过程省略,然后直接service mysqld start。MySQL就会初始化一个数据库。图1 &n
跳过大数据精准实时推荐
上 周处理过一个案例。我们博士找到我说一个实时精准推荐场景,需要我帮忙一下。我听她描述,首先经过大数据系统查询用户订单情况得知他买过什么?还要通过大数据系统查询用户看过什么?然后结合他买的和看的推荐商品。我问:“这是不是就是一个类似猜你喜欢的?”答:“是”。我又问:“要实时?”答:“最好实时或者准实时。”我说现在这样设计不可能啊? 那个大数据系统走一次几个小时。博士说现在
一次分区查询异常的分析
节前我处理了一个问题。先上图,可以看出来查询这个表,有两个条件,一个是code一个是实际。最终执行查了5000万行数据。历时900秒。当然最后也是查了个寂寞,没查到。对于5000万扫查了900秒,这个我既能理解,又不能理解。能理解的是扫描5000万用900多秒,说的过去。 不能理解是。从2022年1月开始到现在这个表一共才2亿条。 我每月一个分区,查询一个星期,怎么也在
一个并发SQL数据库卡主了
首先说明这个问题不能怪数据库。上周遇到一个事情,大家都在讨论一个问题,我看没人@我,我也没管。直到有人说,让我去看看她那里为什么查询的比较慢。在处理过程中才发现这个数据库上活动会话有80多个。难怪慢。背景是这个MySQL内存仅4G。(为什么这么小,我回答不了) 看到红黄框一共10句,是一模一样的SQL,对一个log表全表排序。其中红框的两句几乎是同一时刻。后面的
一句SQL,我的数据库crash了
上周有人问我一个问题,数据库莫名重启了。其实是数据库crash了,然后守护进程把他马上启动了。我看了一下错误日志,很奇怪。也是第一次遇到。看到红色框的mysqld got signal 11,一下就感觉不好。历次数据库crash,必然有他。不过以前我遇到最多的是latch lock。这次不是。蓝色框数据库说可能是一个bug,不少人看到这句就说,遇到bug了。我个人不这么认为,因为这是官
MySQL在线转分区表(以及TiDB)
上周我们做了Oracle的在线将非分区表转换成分区表。这做几个其他数据库的。创建一个表,模拟 上周讲了Oracle的在线非分区变成分区,今天讲讲其他的。首先是MySQL的,创建一个简单的表,模拟写入一点数据。实验步骤如下:mysql> CREATE TABLE t1 (id int NOT NULL AUTO_INC
模糊查询区分大小写吗?
我爱人做测试工作,遇到问题问我说她们测试时候要求不区分大小写,比如M1和m1都显示。我第一反应需求不合理啊。数据库一般来说都是等值比较的。否则就要去做一些工作了。我就展开了一个实验场景,给她看看。实验场景是Oracle19C,效果如下:精确查询a1的时候返回a1,模糊查询的时候没有A1
MySQL8取消缓存
我的原创连接:MySQL8取消缓存 (qq.com) 很多人在MySQL升级到8以后甩锅说没有缓存了。我其实觉得这不对。为什么官方取消了(连给设置参数的机会也没有,不是默认关闭,而是就没有了) 还好我有个5.7,说明一下。A表ID有索引 执行一下。扫描索引4行,返回4行。  
数据库对比系列之三(PG事务与MySQL事务)
今天网上有个帖子,说MYSQL部分事务成功,部分事务失败。原图如下我第一感觉觉得不应该。我当时也觉得这个好像按照DBA的角度来说不应该一个成功一个失败。于是我做了一个模拟。下面有两个表一个是W表有主键,为了模拟冲突。另外一个B表无约束,随便操作。开启事务,w有5条,b有2条。这个时候给b新增一条3,并且给w增加一条5(一定是冲突的)。数据库版本是MySQL8.0.26。 查看一下结果,真
TiDB与MySQL优化器对照
今天这个我在公众号不是首发。首发链接是:https://tidb.io/blog/00e83347 今天这个文章牵涉到我多年前遇到的一个故障,当时数据库CPU100%,从而引发我对这个场景的介入。分析问题以后发现是SQL写法的不同导致优化器执行的天差地别。而每种数据库的优化器又都不一样。今天我们要做的是MySQL和TiDB的优化器差异对比。首先申
个别场景没必要排序
我原创连接https://mp.weixin.qq.com/s/3Zx8EBTGwp4sn96AHKJWiQ 经常遇到索引比列还要多的表。为什么?因为开发结合业务需求一个场景一个索引。比如说一个表有id,name,status,time几个字段吧。然后看看这表的索引可能会出现如下的索引:1、name2、time3、name+time4、time+name5、status6、name+status7
MySQL升级会变慢?
不存在的。怎么可能?有人这样质疑过,而且我在实际环境中也被人质疑过。其实我们想想任何一个产品如果升级导致性能变差这都不会被认可。我相信任何软件尤其是数据库这种核心软件发布之前都是经过大量的测试,不会出现这种问题的。过去我经历了一次质疑,十几个MySQL从5.7升级到8,我们主要目的是解决大表加字段停机的问题。因为MySQL8是加字段到数据字典中去,解决了这个问题。很多开发团队在升级过程中获得了收益
数据库对比系列之二(MySQL和达梦)
今天本文是年前的一次群中讨论,有朋友的系统从MySQL切换到达梦。国内中达梦是真的自己一点点做的做了几十年的。他很像Oracle所以被称为Oracle派,而Tidb被称为MySQL派。这个派系是看他们更像谁。 开始今天的故事。下面这个SQL在MySQL中很快,在达梦中卡的走不动。
数据类型与函数索引-MySQL篇
mysql> create table w (id int,a int,b varchar(10),c decimal(10,0),primary key (id));Query OK, 0 rows affected (0.03 sec)mysql> alter table w add d datetime;Query OK, 0 rows affected (0.02 sec)Re
MySQL一次没有报错的关闭
我的公众号原文链接:一次没有数据库报错的数据库关闭 (qq.com)遇到一个问题如图:之前没见过。背景是数据库自己关闭了。MySQL8但是输出的第一行报错不是数据库自己的日志,而是terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc。从字面分析错误的分
MySQL升级过程中的一些心得-2
个人公众号原文链接:https://mp.weixin.qq.com/s/nCE54jUCpwcT26t-IkyzFA 继昨天问题后,今天再说一个问题。开发提出原来在5.7中是好的一个功能,在8不行了。我问是什么?回答说一个有默认值的字段,且不能为空。现在给他一个空。听到这里我说应该报错啊。因为设计的要求就是不能空,如果没有默认值给默认值,如果有值写入该有的值。 &nbs
MySQL升级过程中的一些心得-1
自己公众号原文链接:https://mp.weixin.qq.com/s/k3sb-AqGXgx37zIrRVcktA 我查了一下9月7日的公众号发过《MySQL8升级遇到的各式各样问题》感兴趣的去看看。最近还发现了一些新的。但是我总结来说,问题归问题,但是全都不是数据库的问题。 有人反馈说5.7升级到8以后个别功能写入的时候失败。很奇怪是个别功能