从细节看技术人怎么debug的
今天这个起因是我的群里大家早上一个意外的聊天。这位朋友准备换工作,不小心被领导看到(话说怎么这么没有对敌斗争经验呢?)不过今年地狱求职年,好多人都找不到工作,推荐大家别着急换。这位朋友没有防领导经验,倒是个技术细心人。发现大家都引用他的话,但是昵称不一样。想想不科学啊。激起了大家好奇。结果。。。。。。大家实测,并不是好友修改昵称的问题。不过大家都是高手,马上
数据库趣谈-五行
今天是有点八卦,属于趣谈。免责申明:提到的没有好坏之分,纯属名字巧合。我一贯风格也是不去贬低某种数据库。 如今国产数据库有几百个,实在太卷了,我从业这么多年,学习和掌握了十几种数据库,但是仍然有很多叫不出名字,甚至没见过。今天说的还都是在国内说的比较多的(没提到的不代表说的不多,只是和今天主题无关) &nb
继续吐槽一下
昨天我转了一个不要微服务的,我还是看到有人点赞的。我不怕被说反潮流,我是比较务实的。我经历过没用微服务的,也经历过用微服务的。咱们也不说谁好,我就是看 一般的企业(注意我的范围,我没说阿里、腾讯、字节等)没用微服务的稳定性比用微服务的好一些,没用微服务的成本比用微服务的少很多,这个是估计放到哪里都能达成共识的。这个成本包括了人力、服务器等等。如果不信我们可以
拿个锤子看谁都是钉子
最早我听这句话是有一次DTCC上,有位嘉宾说Elasticsearch的。首先他既能存储数据也能做全文索引,所以Elasticsearch归属数据库范畴。也有不少人没有这个认识,甚至认为es和redis都算中间件,有这个认识的基本其实和他也没法深入沟通了。那么由于es的某些场景中全文索引解决了我们RDBMS中非常忌讳前%,不过这个有个前提条件就是有分词,如果没
数据库的大脑-优化器
可能这个比喻不是很恰当。但是不会差太多。前几天和一个算法美女博士谈及她的专业,我说其实数据库核心之一就是算法。我在她面前班门弄斧的说了阶乘和选择度等。当然博士容忍了我的吹牛。其实我个人也这样理解的,数据库是数学和物理学的结合。一个SQL就是把高级语言翻译成机器语言,最后在指定的地方读写值。如何读写其实很大程度取决于逻辑,我有时候看到一些待优化的SQL就是:查一年数据可能是200万(其实
数据库应有与之匹配的基础环境
前几天在一个群里看到大家讨论硬件。大佬说:现在谁还共享池总出问题?(早期因为资源不足,SQL烂一点的话会造成争用),现在随随便便都是1T的内存,哪里会有共享池问题?其他人也说自己是128G内存起。有人也说之前看Oracle要那么大内存,感觉太夸张,随便上百G,现在看国产。这么一笔下来,Oracle真节约。 对于以上问题,我第一个说
你以为你以为的就是你以为的吗
上周有个事情,一个开发写的SQL,我有点接受不了。原始的是select from t group by 后面跟了几十列。我当时也是震惊到了,为什么?他和我解释了一下,我当时真是想骂人。我来用几个表简单说明一下。我这里不用真实表和配置,我用个简单的表举例说明。比如说有一个表就流程表,大家可以看到有5个部门,每个部门做两件事,发工资和发奖金。(这种喜闻乐见的事情大家能快速理解)
大实话
上周看到老白公众号的一篇文章。其中写到一句大实话:“能让硬件去干的事情,我们肯定尽可能不麻烦数据库,但是必须让数据库干的活都得让应用去解决,那么我们就受不了了”。 我就以上实话说说我的看法,前半句是说硬件提升了,硬件能解决的,那么就不会抠抠索索的限制这个限制那个。数据库本来就够复杂的,别让他再复杂了。但是如果数据库的本职工作如果都不做,比如锁,都要
应该怎么分页?
我忘记我是不是写过了,如果写过就跳过吧。为什么写这个,以前出过几次问题,我发现分页写的有问题。很多人不是太明白。我这里列举一下: A场景: select * from t where rownum<10 或者 limit 10 或者用fetch first 10 rows only;这种场景:不管表中数据量是TB级别还是PB级别,查询KB返回KB。&nbs
所谓武功再高也怕菜刀-分区、分库、分表和分布式的优劣
我相信做过数据库对以上的都不陌生。基本上主流数据库都支持分区。分区是一种对应用透明的管理表方式。尽管可以在网上找不到不少黑MySQL分区的,但是时至今日我用MySQL分区没发现一点问题,当然PostgreSQL和Oracle的我也没发现问题。我猜测那些问题应该来自于使用上的不规范。我以前做公安系统由于单表几十亿上百亿,还采用过二级分区,效果非常好。 分区一般使
数据库隔离
虚拟机部署数据库(我认为在自己练习环境可以,正式环境还是算了)。数据库作为系统的核心,资源一定要独享。甲骨文说如果Oracle安装在虚拟机上,都不提供支持。如果一个物理机上运行一个database比如(MySQL这里的X PostgreSQL这里的X),这样的其实有点浪费,那么可能应该有多个。可能会有说现在微服务应该把数据库分开。其实我想说微服务和数据库是
怎么设置数据库的报警
报警分为几种(结合我各行各业的工作经验):1、无报警(这里主要说是数据库已经不行了,但是报警没有提示。因为设置90%报警,且要持续5分钟,现在是80%,持续了几个小时。)2、用户操作出现问题(同时我们系统也发现问题)和用户同时发现。比如用户点击页面1秒 2秒 3秒 。。。10秒没出,报502 503等50X 等等. 这个时候我们后台也会报警。这种要先于用户不现实。他没操作之
为什么我总和性能指标相差很远?
我经常看到类似这样的标题某某DB比原生MySQL快N倍。原生的快多少倍其实我觉得不是太重要,甚至是不是比原生的MySQL PG快这也不好说。我们退一万步认为这个假设成立,实际也用不出这个效果。我今天来讲讲为什么。首先一个正常的主流的关系型数据库发挥出每秒几万次,乃至十几万次的读,和几千次写一点问题都没有。这还是在单机的情况下,所以我也一再强调如果业务没有达
你没有大数据
今天在一个群里,看到有人说:“国产数据库都这么强大了,把大数据的功能都实现了,大数据只需提供计算引擎就行。”我随后跟了一句:“我一直觉得大部分大数据场景,就是SQL没写好或者表设计问题导致的。有大数据场景的公司不多。” 随后有几个朋友觉得我说的不错。于是我就觉得写写吧。 什么是大数据定义不管是4V还是5V,第一个要解决的是量级。2000年左右一般
主键选择选择自增还是序列?
首先申明一下是不同数据库的的设计不一样,有的有自增,有的有序列,怎么用?很多年前使用Oracle的时候我们做公安系统每过一辆车,甭管是机动车还是非机动车都记录,像上海这样的地方每天新增数据在1亿上下。300多万本地机动车再加一些非沪的外地机动车,不到400万。正常一辆私家车开出去,再开回来,经过10个路口或者路段很平常,那么就是说每天被记录20次。所以不到400万X20多次。大致在一亿左右。在全国
CAP和手表
说个多年前的事情,我经历过一个场景。说一个公司下属N个公司,希望在母公司网站注册的用户,可以直接登录子公司所有网站。同样子公司网站注册的可以登录其他子公司网站及其母公司网站。说白了就是任何一个注册上下左右的都要同步过去。事情是好事情,用户体验好啊。实际运行起来完全不是按照剧本来了。 今天说怎么这里注册的没同步过去,明天
高性能是设计出来的
好多时候我主动或者被动参与到一些优化的工作中来。有的时候提升较大,比如我在公安行业时候,有一次开发找到我说,他们一天出一个报表,一次15个小时,忍受不了了。问我能不能优化到一个小时。我接手以后除了索引(不能仅仅指望索引,但是一点不用也不行),总之N个改进建议以后。最终执行的结果是6秒。15小时到6秒,大约9000倍的提升。当时开发吃惊的嘴都合不上了,但是这才是一个数据库应有的效率。不少人误解报表就
数据库之泪第五章节
前几天正在群里谈及一些技术问题,接到有人求助请看看MySQL数据库。连上去看看,大量的表锁。其实一般来说我们OLTP数据库都是行锁的。如果动不动就表锁了,这活没法干了。但是锁这种在不同数据库不同场景下处理还不一样,比如MySQL在默认的RR下,没有索引或者没用到索引的DML就是表锁。这种是不懂或者不了解数据库的人会无意中犯下的错误。 曾经在一个群里看到有人问,大家MySQL
数据库之泪第四章节
上次说到的场景7和8都还是有意识要关联的。但是也有直接select * from a,b 后面什么都不带的,虽然执行时间一样慢,但是输出效果和意识不一样。这种真的应该拉出去打一顿。我真的见到过这种引起故障。相比较来说,数据库安全出问题(极少,不是没有),硬件故障(更加少,当今硬件技术起步就很高)。而这种SQL引起的不稳定因素几乎天天有,而且不止一次。从管理
数据库之泪第三章节
蚂蚁金服有过一个自嘲的段子:能干翻支付宝的,除了监管就是DBA了。我本人虽然没有专职做多DBA,但是也是靠这个起家的。数字时代,数据是很多企业的核心资产,对于互联网/软件服务类企业更是如此。而负责保管这些数据资产的人,就是DBA(数据库管理员)。如果一个系统的数据库出了问题,压力最大的就是DBA。因为网络再好,应用再可以横向扩展、不管docker