数据库
文章平均质量分 86
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
SQL优化 20 连击
复合索引也称为联合索引,当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。如果字段的大小有变化,应用就会受到影响,因为它必须修改字段宽度。默认新增SQL有事务控制,导致每条都需要事务开启和事务提交,而批量处理是一次事务开启和提交,效率提升明显,达到一定量级,效果显著,平时看不出来。列经常被修改,而且每次被修改的数据的长度不同,这会引起“行迁移”现象,而这造成多余的I/O,是数据库设计中要尽力避免的,这种情况下用。原创 2022-10-23 08:03:28 · 377 阅读 · 0 评论 -
用命令手写mysql常用监控指标
任何东西不应过重关注其外表,要注重内在的东西,往往绚丽的外表下会有对应的负担和损耗。mysql 数据库的监控支持通过 SQL 方式从 performance_schema 库中访问对应的表数据,前提是初始化此库并开启监控数据写入。对于监控而言,不在于手段的多样性,而需要明白监控的本质,以及需要的监控项内容,找到符合自身项目特色的监控方式。在选择监控工具对 mysql 监控时,需要关注监控工具本身对于数据库服务器的消耗,不要影响到其自身的使用。原创 2022-08-22 19:21:40 · 667 阅读 · 0 评论 -
数据库常用的锁
一、数据库为什么需要锁?为了保证数据的一致性。mysql数据库存在多种数据引擎,MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。二、表级锁1.表级锁(表级锁一次会将整个表锁定,所可以很好的避免死锁问题)(1)锁定粒度大,锁冲突概率高、并发度低;(2)好处是不会出现死锁、开销小、获取锁和释放锁的速度很快;(3)使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎,适用于以查询为主,少量更新的应用。三、行级锁1.行级锁原创 2021-07-26 19:16:16 · 178 阅读 · 0 评论 -
MySQL 常用优化指南,及大表优化思路
当MySQL单表记录数过大时,增删改查性能都会急剧下降单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候 MySQL 单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量。字段 尽量使用 TINYINT、 SMALLINT、 MEDIUM_INT 作为整数类型而非 INT,如果非负则加上 UNSIGNED VARCHA原创 2021-05-12 19:32:17 · 179 阅读 · 0 评论 -
如何快速定位当前数据库消耗 CPU 最高的 sql 语句
如何快速定位消耗 CPU 最高的sql语句,怎么做?看看下面的介绍。概述如果是Oracle数据库我们可以很容易通过sql来定位到当前数据库中哪些消耗CPU高的语句,而mysql数据库可以怎么定位呢?这里用一个简单例子说明下...主要是了解如何定位的思路,具体看官网介绍..参考:https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/主要意思是针对定位C..原创 2021-05-12 19:19:49 · 143 阅读 · 0 评论 -
为什么 delete 表数据,磁盘空间却还是被占用
最近面试,还真有一个面试官,问到我之前遇到过的一个线上故障问题解决方案(当面试官说出口时,我暗自庆幸还好我遇到过......),如下。最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多。为了节约成本,定期进行数据备份,并通过delete删除表记录。明明已经执行了delete,可表文件的大小却没减小,令人费解项目中使用Mysql作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。当我们使用 d原创 2021-05-12 19:02:51 · 788 阅读 · 0 评论 -
mysql为什么不推荐使用uuid或者雪花id作为主键
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因。一:mysql和程序实例1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作原创 2021-02-24 19:35:31 · 508 阅读 · 0 评论 -
MySQL为Null会导致5个问题,个个致命!
正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示:“兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。--如果存在person表先删除DROPTABLEIFEXISTSperson;--创建person表,其中username字段可为空,并为其设置普通索引CREATETABLEperson(idINTPRIMARYKEYauto_increment,nameVARCHAR(20),...原创 2021-01-06 18:56:42 · 263 阅读 · 0 评论 -
细聊MySQL 索引底层原理
个人博客请访问http://www.x0100.topMysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。在数据库中,高效的查找算法是非常重要的,因为数据库中存储了大量数据,一个高效的索引能节省巨大的时间。比如下面这个数据表,如果 Mysq...原创 2020-05-09 11:10:26 · 242 阅读 · 0 评论 -
SQL错误用法大盘点
个人博客请访问http://www.x0100.top今天场主为大家搜集了几类SQL错误用法,纯纯纯纯干货,来了!1.LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。...原创 2020-05-07 10:36:03 · 218 阅读 · 0 评论 -
MySQL常用优化指南,及大表优化思路
个人博客请访问http://www.x0100.top当MySQL单表记录数过大时,增删改查性能都会急剧下降单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候 MySQL 单表的性能依然有不少优化空间,甚至能正常支撑千万...原创 2020-05-07 10:24:27 · 237 阅读 · 0 评论 -
用Insert into select语句导表,结果被裁了
个人博客请访问http://www.x0100.top前言Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实现,这样就可以避免使...原创 2020-04-23 09:48:24 · 356 阅读 · 0 评论 -
MySql 锁等待该如何处理?
个人博客请访问http://www.x0100.top这个问题我相信大家对它并不陌生,但是有很多人对它产生的原因以及处理吃的不是特别透,很多情况都是交给DBA去定位和处理问题,接下来我们就针对这个问题来展开讨论。Mysql造成锁的情况有很多,下面我们就列举一些情况: 执行DML操作没有commit,再执行删除操作就会锁表。 在同一事务内先后对同一条数据进...原创 2020-04-07 21:20:30 · 4032 阅读 · 0 评论 -
MySQL 全文索引实现一个简单版搜索引擎
个人博客请访问http://www.x0100.top前言 只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的) char、varchar、text类型字段能创建全文索引(fulltext index type) 全文索引的基于关键词的,如何区分不同的关键词了,就要用到分词(stopword) 英...原创 2020-03-31 17:19:35 · 672 阅读 · 0 评论 -
一款SQL自动检查神器,再也不用担心SQL出错了,自动补全、回滚等功能大全
个人博客请访问http://www.x0100.top介绍Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易!开源地址https://gitee.com/cookieYe/Yearning功能介绍 SQL查询查询导出查询...原创 2020-03-18 17:43:59 · 220 阅读 · 0 评论 -
MySQL如何对select,select for update进行加锁
个人博客请访问http://www.x0100.top看如下一条sql语句:# table T (id int, name varchar(20))delete from T where id = 10;MySQL在执行的过程中,是如何加锁呢?在看下面这条语句:select * from T where id = 10;那这条语句呢?其实这其中包含太多知识点了。...原创 2020-03-18 17:32:30 · 4063 阅读 · 1 评论 -
缓存架构设计细节二三事
本文主要讨论这么几个问题:(1)“缓存与数据库”需求缘起(2)“淘汰缓存”还是“更新缓存”(3)缓存和数据库的操作时序(4)缓存和数据库架构简析一、需求缘起场景介绍缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(uid, money),业务上的需求是:(1)查询用户的余额,SE...原创 2017-11-13 22:50:41 · 510 阅读 · 0 评论 -
InnoDB并发插入,居然使用意向锁?
《插入InnoDB自增列,居然是表级别锁?》介绍了InnoDB所使用的七种锁中的一种,自增锁。今天,将要介绍InnoDB另外三种:共享/排他锁,意向锁,插入意向锁。一,共享/排它锁(Shared and Exclusive Locks)《InnoDB并发为何这么高?》一文介绍了通用的共享/排它锁,在InnoDB里当然也实现了标准的行级锁(row-level locking)...原创 2018-08-22 08:22:18 · 1265 阅读 · 0 评论 -
InnoDB,select为啥会阻塞insert?
MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一。但是,如《InnoDB,5项最佳实践》所述,如果查询没有命中索引,也将退化为表锁。InnoDB的细粒度锁,是实现在索引记录上的。一,InnoDB的索引InnoDB的索引有两类索引,聚集索引(Clustered Index)与普通索引(Secondary Index)。InnoDB的每一个表都会...原创 2018-08-22 22:18:32 · 1151 阅读 · 1 评论 -
InnoDB的七种锁
Case 1MySQL,InnoDB,默认的隔离级别(RR),假设有数据表:t(idPK, name);数据表中有数据:10, shenjian20, zhangsan30, lisi事务A先执行,还未提交:insert into t values(11, xxx);事务B后执行:insert into t values(12, ooo);...原创 2018-08-21 12:42:50 · 3979 阅读 · 1 评论 -
InnoDB,5项最佳实践,知其所以然?
说说MySQL两个最常用的存储引擎,MyISAM和InnoDB。照自己的理解,把一些知识点总结出来,不只说知识点,多讲“为什么”。一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。潜台词是,对于select count(*) from t;如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。实践:数据量大的表,In...原创 2018-08-21 12:45:04 · 264 阅读 · 0 评论 -
InnoDB行锁,如何锁住一条不存在的记录?
要细聊MySQL的行锁,难以避免的要从事务的四种隔离级别说起。四种隔离级别,又脱不开聊读脏,不可重复读,读幻象等问题。事务隔离级别,行锁机制等都比较垂直,应用开发中大部分同学都用不到,不确定是否大部分朋友都感兴趣。今天,先抛出一个问题,如果大家确定对这类话题感兴趣的话,后续我花时间细聊这一系列问题。MySQL默认的事务隔离级别是Repeated Read...原创 2018-08-21 12:46:01 · 1098 阅读 · 0 评论 -
InnoDB并发如此高,原因竟然在这?
《InnoDB行锁,如何锁住一条不存在的记录?》埋了一个坑,没想到评论反响剧烈,大家都希望深挖下去。原计划写写InnoDB的锁结束这个case,既然呼声这么高,干脆全盘系统性的写写InnoDB的并发控制,锁,事务模型好了。体系相对宏大,一篇肯定写不完,容我娓娓道来,通俗地说清楚来龙去脉。一、并发控制为啥要进行并发控制?并发的任务对同一个临界资源进行操作,如果不采取措施,...原创 2018-08-21 12:54:42 · 266 阅读 · 0 评论 -
数据库索引,到底是什么做的?
近期写数据库,不少朋友留言问MySQL索引底层的实现,今天简单聊一聊,少讲“是怎么样”,更多说说“为什么设计成这样”。问题1. 数据库为什么要设计索引?图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又...原创 2018-08-25 10:06:37 · 710 阅读 · 0 评论 -
巧用这19条MySQL优化,效率至少提高3倍
1、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据:type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。 key_len列,索引长度。 rows列,扫描行数。该值是个...原创 2019-02-24 19:55:35 · 630 阅读 · 0 评论 -
数据库死锁案例分析
一 前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助二案例分析2.1 业务场景用户录入商品,应用程序会提前检查是否存在相同记录,如果有则先删除再插入;如果没有则直接插入。2.2 环境说明MySQL 5.7.22 事务隔离级别为RC模式。 cr...原创 2019-06-11 07:46:55 · 1646 阅读 · 0 评论 -
19条效率至少提高3倍的MySQL技巧
1、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据: type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。 key_len列,索引长度。...原创 2019-07-03 21:03:14 · 280 阅读 · 0 评论 -
MYSQL优化有理有据全分析
目标· 了解什么是优化· 掌握优化查询的方法· 掌握优化数据库结构的方法· 掌握优化MySQL服务器的方法什么是优化?· 合理安排资源、调整系统参数使MySQL运行更快、更节省资源。· 优化是多方面的,包括查询、更新、服务器等。· 原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。数据库性能参数· 使用SHOW STATUS语句查看MySQL数据库的性能...原创 2019-10-09 11:13:29 · 346 阅读 · 0 评论 -
插入InnoDB自增列,居然是表锁?
《挖坑,InnoDB的七种锁》初步说明了InnoDB中,会使用七种不同类型的锁,今天就介绍其中的第一种,自增锁(Auto-inc Locks)。一,案例说明MySQL,InnoDB,默认的隔离级别(RR),假设有数据表:t(idAUTO_INCREMENT, name);数据表中有数据:1, shenjian2, zhangsan3, lisi事...原创 2018-08-22 08:20:02 · 8476 阅读 · 1 评论 -
MySQL 性能优化,优化设计及设计原则解读
MySQL性能优化的目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石?数据库设计与程序设计的差异?数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效率)2. 节省空间(根据业务经验,设置字段长短)3. 提高效率数据库表开发流程原型=>逐步完善(表的设计也是如此)数...原创 2018-08-22 08:09:09 · 303 阅读 · 0 评论 -
100亿数据平滑数据迁移,不影响服务
一、问题的提出互联网有很多“数据量较大,并发量较大,业务复杂度较高”的业务场景,其典型系统分层架构如下:(1)上游是业务层biz,实现个性化的业务逻辑(2)中游是服务层service,封装数据访问(3)下游是数据层db,存储固化的业务数据服务化分层架构的好处是,服务层屏蔽下游数据层的复杂性,例如缓存、分库分表、存储引擎等存储细节不需要向调用方暴露,而只向上游提供方便的...原创 2020-03-18 22:05:09 · 1024 阅读 · 1 评论 -
“跨库分页”的四种方案
一、需求缘起分页需求互联网很多业务都有分页拉取数据的需求,例如:(1)微信消息过多时,拉取第N页消息(2)京东下单过多时,拉取第N页订单(3)浏览58同城,查看第N页帖子这些业务场景对应的消息表,订单表,帖子表分页拉取需求有这样一些特点:(1)有一个业务主键id, 例如msg_id,order_id,tiezi_id(2)分页排序是按照非业务主键id来排序...原创 2020-03-18 22:05:54 · 1825 阅读 · 0 评论 -
互联网公司为啥不使用mysql分区表
缘起:有个朋友问我分区表在58的应用,我回答不出来,在我印象中,百度、58都没有听说有分区表相关的应用,业内进行一些技术交流的时候也更多的是自己分库分表,而不是使用分区表。于是去网上查了一下,并询问了58到家的DBA专家,将自己收到的信息沉淀下来,share给大伙。解决什么问题?回答:当mysql单表的数据库过大时,数据库的访问速度会下降,“数据量大”问题的常见解决方案是“水平切分”...原创 2020-03-19 09:13:36 · 422 阅读 · 0 评论 -
主从DB与cache一致性
本文主要讨论这么几个问题:(1)数据库主从延时为何会导致缓存数据不一致(2)优化思路与方案一、需求缘起上一篇《缓存架构设计细节二三事》中有一个小优化点,在只有主库时,通过“串行化”的思路可以解决缓存与数据库中数据不一致。引发大家热烈讨论的点是“在主从同步,读写分离的数据库架构下,有可能出现脏数据入缓存的情况,此时串行化方案不再适用了”,这就是本文要讨论的主题。二、为...原创 2020-03-19 09:13:57 · 686 阅读 · 0 评论 -
缓存与数据库一致性保证
本文主要讨论这么几个问题:(1)啥时候数据库和缓存中的数据会不一致(2)不一致优化思路(3)如何保证数据库与缓存的一致性一、需求缘起上一篇《缓存架构设计细节二三事》(点击查看)引起了广泛的讨论,其中有一个结论:当数据发生变化时,“先淘汰缓存,再修改数据库”这个点是大家讨论的最多的。上篇文章得出这个结论的依据是,由于操作缓存与操作数据库不是原子的,非常有可能出现执...原创 2020-03-19 09:14:17 · 317 阅读 · 0 评论 -
细聊冗余表数据一致性
本文主要讨论四个问题:(1)为什么会有冗余表的需求(2)如何实现冗余表(3)正反冗余表谁先执行(4)冗余表如何保证数据的一致性一、需求缘起互联网很多业务场景的数据量很大,此时数据库架构要进行水平切分,水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就需要扫描多个库了。例如订单表...原创 2020-03-19 09:14:39 · 375 阅读 · 0 评论 -
一分钟了解索引技巧
花1分钟时间,了解聚集索引,非聚集索引,联合索引,索引覆盖。举例,业务场景,用户表,表结构为:t_user(uid primary key,login_name unique,passwd,login_time,age,…);聚集索引(clustered index):聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引,一般用prima...原创 2017-10-26 21:05:05 · 434 阅读 · 0 评论 -
100亿数据1万属性数据架构设计
对于version + ext方案,还是有很多朋友质疑“线上不可能这么用”。本篇将讲述一下58同城最核心的数据“帖子”的架构实现技术细节,说明不仅不是“不可能这么用”,而是大数据,可变属性,高吞吐场景下的“常用手段”。一、背景描述及业务介绍问:什么是数据库扩展的version + ext方案?使用ext来承载不同业务需求的个性化属性,使用version来标识ext里各个字段的含义...原创 2017-11-12 08:50:31 · 525 阅读 · 0 评论 -
这才是真正的表扩展方案
零、缘起讨论问题域:(1)数据量大、并发量高场景,在线数据库属性扩展(2)数据库表结构扩展性设计一、哪些方案一定是不行的(1)alter table add column要坚持这个方案的,也不多解释了,大数据高并发情况下,一定不可行(2)通过增加表的方式扩展,通过外键join来查询大数据高并发情况下,join性能较差,一定不可行(3)通过增加表...原创 2017-11-12 08:29:46 · 703 阅读 · 0 评论 -
啥,又要为表增加一列属性?
需求缘起产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计:user(uid, name, passwd, nick)第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成:user(uid, name, passwd, nick, age, sex)假设数据量和并发量比较大,怎么变?(1)alter table add column?不太可行,锁表时间长...原创 2017-11-12 08:18:08 · 430 阅读 · 0 评论