
数据库的奇技淫巧
文章平均质量分 92
hello_读书就是赚钱
2020年12月加入某头部互联网公司,担任高级开发工程师,从事公司核心软件开发/
2017年6月加入某1000人+软件公司,担任中级架构师从事公司核心软件项目开发,分布式架构研究、部署,生产环境维护等工作
展开
-
InnoDB的“无用”知识
一、本文目的一个新的OLTP项目不使用InnoDB将是多么愚蠢.这篇文章是介绍InnoDB的体系架构与工作机制,在平时我们工作中也许不会用到这些知识的内容,但对我们去认识InnoDB却是一份好的材料.在这篇文章里,我没有关注版本间的不同信息,而是关注其内在的工作机制,总体来说,包含了内存+工作线程两部分知识,来阐述InnoDB的工作机制.二、体系架构如图所示,InnoDB的体系架构如上图所示,是由多条后台线程+内存池+文件系统组合而成.1、线程概述我们先看看后台线程的分类.它包括:主线程(原创 2021-11-14 23:07:49 · 652 阅读 · 1 评论 -
InnoDB索引不能只知道B+树
本文主要总结介绍InnoDB索引的相关知识点,其中涉及算法部分尽量使用动图演示,储备好相关知识,为后面的问题排查定位做准备1、了解索引的重要性我们都知道索引只能在事前增加,不能事后添加.因为随着数据的增加,online DDL消耗的性能与时间就会越来越多.而不正确的使用索引会导致io变大,插入修改缓慢.所以我们需要抱着正确使用索引的目的,来探究InnoDB索引的奥秘2、了解B+树算法终归了解InnoDB还是先从B+树入手.B+树,这其中的B是平衡的意思,B+树是从二叉平衡树演化而来的多叉平衡.原创 2021-10-15 01:50:20 · 186 阅读 · 0 评论 -
InnoDB事务不能只懂ACID
本文主要是对MySQL事务的知识点进行归纳总结,除了ACID之外的一些比较重要的知识点,多了解对我们对数据库的使用有一定的帮助数据库事务是数据库系统与文件系统的重要区别之一,就是因为有了事务,数据库系统才成为大众存储数据的重要组件.接下来先介绍一下事务是什么,再介绍事务的分类,再谈谈事务是怎么实现的,一条龙梳理清楚事务的知识点.一、事务是什么事务是访问并更新数据库数据的一个程序执行单元.事务具有以下四个特性原子性:要么成功,要么失败一致性:让数据库系统从一种状态变更为另一种状态,但是事务开始.原创 2021-09-21 23:51:26 · 146 阅读 · 0 评论 -
MySQL有多少文件你知道吗?
MySQL里面的文件多且杂,与我们业务开发相关的也不多,但是对MySQL的整体理解还是需要懂这些知识点,当遇到问题或需要对MySQL做调优时间可以找到对应的切入点.本文对各种常见的MySQL文件做知识点总结,方便以后可以及时查阅复盘一、文件分类MySQL里面的文件大体可以分为两类,一类是MySQL通用的文件,一类是存储引擎自己独特文件.这里主要是记录MySQL通用的文件和InnoDB的两种文件.二、MySQL通用文件MySQL通用文件主要有日志文件、配置文件、表结构定义文件、进程文件、套接字文件.原创 2021-09-06 01:35:54 · 437 阅读 · 0 评论 -
你真的认识InnoDB OnlineDDL吗?
最近在给一个大表增加字段的时候用到了Online DDL,在操作时有些疑问,带着这些问题查阅了官方文档并做一些总结,方便后面可以对DDL操作做好安全风险评估.一、定义先说说几个名词的定义DDL:数据定义或数据描述语言.比如使用如下语句去修改表的结构信息,类似的语句成为DDL语句ALTER TABLE abcmouse_qq_ugc.t_upload_audio ADD COLUMN file_score_detail varchar(500) default '',ALGORITHM=INPL.原创 2021-08-15 19:42:08 · 444 阅读 · 0 评论 -
通过12334说说InnoDB里面的锁
前段时间我们在生产遇到MySQL阻塞的问题,后面经过排查发现是锁竞争导致的长时间阻塞,导致应用服务出现异常.这两周通过相关数据与官方文档对InnoDB引擎做了深入了解,掌握了锁的概念,输出本篇文章,旨在说清楚锁相关的概念,并总结好相关知识,为以后问题排查留一个底,方便以后即使查阅复盘先说说锁的概念指的是InnoDB为了保护数据在并发访问情况下,防止数据错误而制作出来的一套数据保护机制.类似Java里面读写锁,Java里面读写锁保护的是内存共享变量.而在InnoDB这里,锁保护的是数据的库、表、页、行.原创 2021-08-12 00:57:25 · 275 阅读 · 0 评论 -
MySQL对varchar字段使用int查询会发生什么?
谢谢光光的问题分享,享受排查问题找到答案的过程MySQL会对varchar字段的数据进行int的转型索引会失效查询即将变得很慢不仅仅是这样的类型会转换,当类型匹配不上的时候MySQL将会替我们做一次类型转换,比如之前用varchar的类型去查询datatime,MySQL就是帮我们做了一次类型转换才得以查询这篇文章写得很好https://blog.youkuaiyun.com/u010825931/article/details/103811797假设t_test表中的no是varchar类型的,那.原创 2020-11-17 23:33:00 · 2454 阅读 · 4 评论 -
InnoDB索引的存储方式不选B+树会怎样?
是的之前有一个场景,看到Navicat里面创建索引的时候,可选的索引方法是有两种的,一种是BTREE就是AKA的B+树,还有一种是HASH,实际平时我们都不会用到这个HASH,导致我一直以为InnoDB索引方式可以支持这两种。直到一天我自己试了一次之后发现是你当你选HASH的时候是不生效的,Navicat自动帮你转BTREE了。坑爹了,针对这个细节问题,翻译了MySQL的官方文档,参照MySQL5.6版本。下面是一个完整的创建索引语句实例,具体我们看看可选的参数有什么:CREATE [ONLI.原创 2020-10-24 01:38:52 · 198 阅读 · 0 评论 -
说说MySQL里面的日志种类
redo log(重做日志)作用:防止事务提交的数据未写入磁盘,可以根据redo日志进行重做,保持事务一致性。内容:记录物理页需要修改的信息开始:随着事务的产生而产生结束:当事务提交后,脏页数据被写入磁盘则完成了任务文件形式:ib_logfile1&ib_logfile2相关配置:innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下。innodb_log_files_in_group 指..原创 2020-10-19 14:48:26 · 163 阅读 · 1 评论 -
review了一次binlog_format的可选配置项
binlog_format 主要是用来调整binlog的记录格式,官方文档说明提供了三种可选配置,本文对比一下三者的区别。官方文档上面没有明确说明三者的区别,看了一篇文章写得挺好的,摘录一下STATEMENT记录每条执行SQL每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id.原创 2020-10-14 20:25:16 · 214 阅读 · 0 评论 -
mysql之skip-name-resolve解决外网链接客户端过慢问题
在腾讯云上面搭建的mysql使用开发的电脑上navicat进行访问时总是特别的慢,原来是Mysql会对请求的地址进行域名解析,开发的电脑并没有域名,所以会导致特别的慢,使用以下进行解决[mysqld]skip-name-resolve官方的解释 How MySQL uses DNS When a new thread connects to mysqld, mysqld will原创 2017-07-25 23:28:20 · 873 阅读 · 0 评论 -
转:MySQL 5.6内存占用过高解决方案
距离MySQL 5.6正式发布已经有比较长的时间了。但楼主在安装配置后却发现其内存占用居高不下,无论如何调整cache甚至禁用InnoDB都不能解决。由于VPS仅有1GB内存,在开启常用的Web服务之后,无力再为MySQL提供400MB以上的物理内存。 通过网络爬文,MySQL 5.6相比于前代GA版本性能提升显著,但默认缓存设置对于小型站点并不合理。通过修改my.ini文件中的performan转载 2017-02-15 16:58:52 · 1022 阅读 · 0 评论 -
mysql 相关字符集讲解
character_set_client :这是用户告诉MySQL查询是用的什么字符集。 character_set_connection :MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。 character_set_results:MySQL将存储的数据转换成character_set_results原创 2017-01-01 14:22:38 · 314 阅读 · 0 评论 -
Mysql5.7在win7下的安装
因为重新装了系统,导致以前电脑里面的mysql不见了,开发非常的不方便。 今天下载mysql5.7装了许久(因为和网上的教程非常的不同),所以记录一下,以免日后忘记1.下载登录 http://dev.mysql.com/downloads/mysql/ 查找你系统对应的版本 查找到对应的系统后,你可以选择安装版本,或者免安装版本,两个版本都一样,我装起来都觉得非常的坑爹,还有我在官网上面找不到w原创 2016-12-17 22:48:25 · 657 阅读 · 0 评论 -
mysql关于表设计的主键策略
1.定义表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。2.主键设计原则总原则:根据数据库表的具体使用范围来决定采用不同的表主键定义。2.1 确保主键的无意义性在开发过程中,有意义的字段例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有原创 2016-12-23 15:02:35 · 6076 阅读 · 0 评论 -
数据库备份的奇技淫巧
应用上线后常常因为服务器的问题导致数据库文件丢失,数据丢失等问题,那么我们如何通过linux自带的机制进行数据库自动备份呢?1.创建Shell执行脚本(执行数据库备份语句)2.使用crontab执行定时任务follower创建.sh 文件并写入数据库备份语句代码数据库备份语句代码如下:mysqldump -uroot -p1234 team_manage > /backup/team_mana原创 2016-10-24 01:08:16 · 370 阅读 · 0 评论