早就说了连接数别太多呀
本次场景是MySQL问题,有人问我监控显示,表缓存使用率99%,当前为100.0%。这是为什么? 这个需要执行下面的命令来检查。可以看到参数table_open_cache定义了缓存4000个,实际达到的Open_tables是4000.这两个一个是variable,另外一个是状态status 一般来说,连接数据库以后us
一次误解造成的问题
开发反馈数据库插入慢。我问及多少数据量时候。答复10万多数据,插入要很久。 其实任何一个主流数据库,区区十万数据根本不叫事。几秒就可以完成,甚至一秒写入10万也不奇怪。我之前公众号都写过。 请开发打开具体的SQL看看。SQL大致是这样的: INSERT INTO T SELECT SUM(Y)
这些SQL看着就违法
最近在几个群里发现有些SQL实在是惨不忍睹。有的SQL 有40多个表连接,有的SQL是几十个UNION ALL。第一感觉这样的开发留着过年吗? 其实对于这种现象有很多种可能。有些是框架干的。有些是被动为之(前人就这样堆的,也只能继续)。有些是因为设计不合理或者需求不合理造成的。也有些是因为不懂,所以无意识的干成这样的。其实这些在国内非常普遍,哪个公司几乎都会遇到。没有这类
硬件一小步,软件一大步。
今天又是一个问题,这个问题从数据库可观测性角度来看就是IO问题。数据库已经给出了建议(AWR)。这里说明一下:原来是物理机,后来迁移到虚拟机。我本人其实方案数据库在虚拟机中运行。虚拟机不配运行正式环境的数据库。这么说可能是有点情绪,但是正儿八经的系统,我还是建议不要用虚拟机。 既然是IO问题,硬盘IO不是简单加硬盘就能解决,我想的就是增加内存。把数据尽可能在内
如何避免标量子查询
先说结论,那就是从表设计开始。所有数据库对象由DBA批准才能建立(当然这些对象是明确需求后对应建立的),否则基本不可能避免。 那么什么是标量子查询。看个示例:select a,b,c (select d from t1 where t1.id=t2.id and rownum=1) ,e from t2 .类似这样的在sel
令人奔溃的数据和业务逻辑
前段时间不经意间看到一个数据库的日志,我将这个日志进行简化和脱敏。可能有人会说这个没有索引,是全表扫描。其实这个和索引没关系。不知道大家有没有觉得奇怪?为什么时间不一样,但是每次的行数都是一样的?关键是扫描行数和返回行数一模一样。(真实的数据是好几万行的扫描和好几万行的返回)我不相信每天产生的数据一条不差。这个和是不是有索引没有关系。这个时候我第一感觉就是,看看表里面的数据是什么样的吧?查看我脱敏
古老的数据迁移
上周有人问我如果要从DB2迁移到Oracle怎么做能快点?首先必须承认银行中还是有DB2的,这个数据库也不错。但是现在可能没什么声音了。找工作有Oracle的岗位、MySQL的岗位、PG的岗位,然而几乎没怎么听到招聘DB2的岗位。以至于没人说去DB2(因为本来也没占领太多的市场)没办法遇到了还是要处理。 几年前有过一些迁移或者导入的教训。有的开
匪夷所思的数据库延迟-
上周分析了一个数据库的主从延迟。起因是一个数据库做了一次迁移。迁移前配置为24C96G的物理机,迁移后为4C16G的虚拟机。迁移后发现主从有延迟。从硬件环境来说确实下降了许多。所以第一感觉就是硬件环境不足。 不过接下来的反馈有点莫名其妙。数据库是MySQL主从架构,既然是主从,那么就是要开启Binlog。根据处理此事的人员说,从库开启binlo
容易忽视的隐式提交(不同数据库)
关系型数据库都要满足ACID,而这里的原子性和一致性尤为关键。一般来说事务是保障这些的有力条件。事务要么成功要么失败。即commit或者rollback。 很多年前学习数据库的时候,知道了一个事务在执行完毕后,应该执行commit,如果没有执行commit但是后面执行了一个create table这样的DDL语句那么数据
开不开源无所谓,不给钱是最重要的。
突然发现居然半个月没写了,最近懈怠了。 上周听闻一个故事,有人说开源的公司找用户收费太不厚道了。言下之意就是开源的就是不应该收费的。开源做的比较成功的大家一直觉得在操作系统领域是Redhat,在数据库领域是MongoDB。 其实对于开源是不是收费,可能无法达成一致。但是有这么一句话,
NULL是不是空?
一般开发人员喜欢用NULL来作为判断,但是这不是一个好习惯。在有些数据库比如Oracle中几乎是无法用到索引的,在其他数据库中也极有可能无法用到索引。这里严谨一点,因为我都有在特殊场景的案例以及原因。今天先说NULL是什么?开发人员认为这不就是空吗?我说不是啊。来看看下面的实验。这里写入一条空值,另外再写入一个空字符串。因为也有开发有这个习惯。一起看看效果。然后如下图查询a列不等于0的,看到这个结
看病与故障处理
好几天没写了,主要是家里亲人住院。我们平时遇到故障马上处理,即使不上班,一个电话也要VPN上线。我理解医院也是我们这样的,实际上不完全一样。人送抢救室,就在抢救室。大医院的抢救室和急诊,可以说相当的惨不忍睹。就和电影电视剧中被轰炸过的差不多。 如果非常危险要去重症监护,未必能去。医院资源也不是无限的,必须有空的地方才能进去。而且遇到双休日,还要等上班。这个和电视中演的不一
假如数据库只有一次生命
上周去医院经过抢救室看到一幕幕惨烈的场景,有没有抢救过来嚎啕大哭的,哭的我是路过的都心碎了。也有幸运的,在打了几针肾上腺以及电击以后抢救过来的。然后前天还看到墨天轮另外一篇文章《一场数据库的葬礼》。这么巧都说到一起去了。这个话题非常悲痛和沉重。 工作这么多年有除了自己练习时候恶意破坏的数据库实在起不来了,正式环境中几乎没有遇到过数据库起不来的现
面对下不去手的代码怎么办
不知道各位有没有这种经历,看到一个SQL写的特别复杂,十几个表关联(如今的我已经见怪不怪了,深知这是为什么。在一开始就没有重视的情况下,这是必然的)。很多学员或者朋友发我的SQL打开一看,真想直接关闭。面对这些下不去手的,我通常也只能闭上眼了。 别说复杂的SQL,有的时候遇到极端问题即使简单的SQL出问题也要检查半天。数据库是太复杂了。但是绝大
毁誉参半的国产
首先总是要肯定的,在我群里也有不少支持国产的。我本人也学习过达梦,OB,TiDB。这些也都是不错的。 上个月有文章说开发对国产数据库负面的感觉,还看到一个评论,从评论可以看出这个同学是做开发出身的。他说:“不用,想想我自己的状态”。言下之意,自己开发的什么自己心里清楚,那么国内相同水平的做出来的是什么样子就窥一斑而见全豹了。我当时看了这个忍不住
什么是皇帝数据库?
周星驰在唐伯虎点秋香中的台词中出现过:“阁下莫非就是玉树临风,风流倜傥,英俊潇洒,才高八斗貌似潘安,号称一朵梨花压海棠,人送绰号玉面小飞龙。”如今这种超出的定语用来形容数据库再合适不过了。 大家在群里说数据现在卷,什么产品不断增加功能。早年大家都知道关系型数据库,后来NoSQL出来,数据库相互借鉴,如今HTAP和多模的概念很流行。随着ALL IN
老项目和人有一个能跑就行
大多数开发者认为“老项目和人有一个能跑就行”,不愿意对其做较大的改动。所以有个名词叫zuchuan代码。我猜几乎每家公司都会遇到这种情况吧。 原因太多了,以下都是我结合各行各业吐槽列出(但不限于)1.需求乱提:不合理的需求未万恶之源,可能这个需求会导致特别复杂。12306的业务场景堪称变态,造成这种是我国地域发展不均衡的,实在也改不了。但是也有不少公司的需求不亚于12306的
《伪XX》和《不需要XX》的文章能火的原因
前几周有《中台:是一场彻头彻尾的自欺欺人》阅读十万多、《分布式是伪需求》也阅读也很多。我去年这个时候写过一篇《你没有大数据》也是我公众号阅读比较多的文章之一。最近大家讨论为什么具体技术细节的阅读量不高,而这种评论性质的阅读量高。 我个人觉得 原因1:是这些直击人心,实际现状就是乱来的太多。上周一个群内有人发
看到有人说了和我类似的观点
这几天忙于写书,懈怠了。 今天看到明叔在朋友圈中发:明叔三人行--国产数据库是不是大跃进。我承认我之前就这样说过类似的。几年前,我在给某行信用卡中心科技部培训时候,举办方让我也谈谈对国产数据库的看法。我说有个别是做的不错的。但是现在整体氛围感觉就像上世纪的大跃进一样。说到这里我特意看了一眼他们坐在第一排的领导。该领导赞许的发出迷之微笑。 可能有年轻人
MySQL SSL连接问题
一个开发转岗过来,我让他用开发工具连接数据库。随便给了一个MySQL8,地址是10.60.143.134他经过一系列编码发现无法连接,报错。具体如图1.图1可以看到现象是:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure而造成这种现行的原因是定位到38行。而