
数据库
文章平均质量分 93
程序猿进阶
要做就做第一,就算结果不是第一,也会是一个好成绩。 加油!我的未来不是梦。
展开
-
MySQL日志体系的深度解析:功能与差异
因为功能的不同,redo log 存储的是物理数据的变更,如果我们内存的数据已经刷到了磁盘了,那redo log的数据就无效了。这也应该容易理解,毕竟回滚嘛,跟需要修改的操作相反就好,这样就能达到回滚的目的。的存在为了:当我们修改的时候,写完内存了,但数据还没真正写到磁盘的时候。时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘。中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量。我们还是会对这次的事务回滚,将无效的。原创 2025-01-01 05:30:00 · 16039 阅读 · 15 评论 -
Otter 安装流程
随着公司的发展,订单库的数据目前已达到千万级别,需要进行分表分库,就需要对数据进行迁移,我们使用了。管理系统所需的各种表和索引的定义。这些表用于存储同步任务的配置信息、任务状态、日志等。,即可完成登录. 目前:匿名用户只有只读查看的权限,登录为管理员才可以有操作权限。,会列出所有历史的发布版本包下载方式,比如以。进行配置信息的存储,所以需要预先安装。的管理数据库表结构。的安装过程,希望对你有所帮助。以下是一个简化的示例,展示了。数据同步工具的管理数据库的。的页面,即代表启动成功。,不需要初始化节点,原创 2024-11-25 05:30:00 · 2365 阅读 · 54 评论 -
MySQL 数据出海之数据同步方案
由于上云项目涉及的应用和开发组非常多,大家对公有云的运维经验较少,上线初期出现问题的几率较高,解决问题的速度也可能比较慢,无法将流量回切上海,带来的风险和影响较大。:数据迁移的操作,是需要一定的时间才能完成的,而在这一段时间内,可能有用户写入新数据或者修改数据,若修改时间点正好是这条数据已经完成迁移但又在流量切换之前,导致。数据同步是同步所有的海外数据,不依赖与流量切换的分批维度,可以直接使用公司通用的数据同步工具,避免缺点2的问题。灰度过程中,同时启用两个方向的数据同步,不仅将海外数据同步到。原创 2024-10-24 00:30:00 · 6392 阅读 · 63 评论 -
MySQL 一致性视图(MVCC)
ReadView所解决的问题是使用READ COMMITTED和REPEATABLE READ隔离级别的事务中,不能读到未提交的记录,这需要判断一下版本链中的哪个版本是当前事务可见的。原创 2024-10-23 00:30:00 · 1164 阅读 · 65 评论 -
MySQL 读写分离
当系统的所有写操作效率尚可,读数据请求效率较低时,比如之前订单表存放了几千万条数据,且查询订单信息需要关联十几个字表,每个字表的数据超亿条。进行消息订阅消费,根据订单号进行分区消费,同一个订单分配至同一个分区,同一个分区是顺序消费的,从而保证消息的时序性。【1】横向扩展:通过增加从库的数量,可以轻松地扩展系统的读处理能力,而不需要对主库进行复杂的扩展。从库可以针对特定的读操作进行优化,如创建特定的索引或缓存策略,而不影响主库的写操作性能。格式,丰富的查询语言,支持复杂的查询和聚合操作,水平扩展。原创 2024-10-11 05:30:00 · 6461 阅读 · 78 评论 -
冷热数据分离
作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间,期望历史数据与生产最新的数据进行分离,当前数据库保留最近一个月的数据作为热库,历史交易存在另一个库作为冷库。当然也可以是状态维度,比如订单的状态,已完结的订单定义为冷数据,未完结的订单定义为热数据。很高,如果更新状态时,需要进行进行冷热数据分离,删除热库中的数据,并将数据写入冷库中,需要使用到分布式事务。我的冷热数据怎么拆分的:已过起飞时间 + 订单状态=“完成”的数据都是冷数据,其余为热数据。当冷热数据存在冲突时,以热库的数据为准。原创 2024-10-10 05:30:00 · 1610 阅读 · 64 评论 -
分库分表-分页排序查询
背景:我们系统上云后,数据根据用户UDL部分数据在国内,部分手机存储在海外,因此需要考虑分库查询的分页排序问题。原创 2024-09-24 05:30:00 · 2641 阅读 · 80 评论 -
Writeset
MySQL的WriteSet功能主要用于增强复制的并发性和一致性,特别是在主从复制环境中。WriteSet是MySQL 5.7引入的一个特性,主要用于解决复制过程中可能出现的写冲突问题。MySQL并行复制目前经历过三个比较关键的时间结点“库间并发”,“组提交”,“写集合”;原创 2024-09-23 05:30:00 · 2226 阅读 · 73 评论 -
OLAP 与 OLTP
联机事务处理联机分析处理。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OLAP系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。OLTP与OLAPOLTPOLAP用户操作人员,底层管理人员决策人员,高级管理人员功能日常操作处理分析决策DB设计面向应用面向主题。原创 2024-09-19 05:30:00 · 2335 阅读 · 57 评论 -
gh-ost
语句,就把这些操作通过触发器同步到幽灵表上,这样在幽灵表上执行的语句和源表的语句就属于同一个事务,显然这样会影响主库的性能。语句创建幽灵表,然后作为一个”备库“连接到其中一个真正的备库上,一边在主库上拷贝已有的数据到幽灵表,一边从备库上拉取增量数据的。【1】整个流程异步执行,对于源表的增量数据操作没有额外的开销,高峰期变更业务对性能影响小。: 触发器是用存储过程的实现的,就无法避免存储过程本身需要的开销。,在备库上观察变更结果是否正确,再对主库操作,心里更有底。操作,放在备库是最好的。原创 2024-09-18 05:30:00 · 1647 阅读 · 69 评论 -
Double Write
如果在写入数据页到磁盘时发生故障,可以通过共享表空间中的数据页来恢复数据,保证数据的一致性。当发生故障后,需要使用共享表空间的备份来覆盖磁盘上的数据文件,将修改前的数据重新写入到磁盘。在写入数据页到磁盘之前,首先将数据页写入到共享表空间中,然后再将共享表空间中的数据页复制一份写入到磁盘上的数据文件。技术前,曾经出现过因为部分写失效而导致数据丢失的现象,磁盘上是一个不完整的数据页。来进行数据恢复,重新执行事务的修改操作,将修改后的数据写入到磁盘,从而完成数据的恢复。),他们都无法恢复这个数据页的数据,毕竟。原创 2024-09-17 05:15:00 · 2264 阅读 · 68 评论 -
MySQL四种日志binlog/redolog/relaylog/undolog
因为功能的不同,redo log 存储的是物理数据的变更,如果我们内存的数据已经刷到了磁盘了,那redo log的数据就无效了。这也应该容易理解,毕竟回滚嘛,跟需要修改的操作相反就好,这样就能达到回滚的目的。的存在为了:当我们修改的时候,写完内存了,但数据还没真正写到磁盘的时候。时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘。中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量。我们还是会对这次的事务回滚,将无效的。原创 2024-08-08 10:30:00 · 1766 阅读 · 74 评论 -
禁止使用存储过程
存储过程是指为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户可通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行。存储过程在数据库技术中属于一种服务端编程方式,是一组预编译的SQL语句集,常用于对数据库进行操作、控制和管理。存储过程通常包括流程控制语句、数据操作语句、变量的定义和赋值、条件判断语句等,可以在执行过程中接受参数输入,并返回查询结果。原创 2024-07-11 05:30:00 · 4750 阅读 · 110 评论 -
mysql signed unsigned zerofill详解
这在某些情况下非常有用,比如当你知道数据永远不会是负数时(例如年龄、计数器或其他只能是正的度量)。是一个属性,你可以在创建或修改表时为整数类型的列指定它。和正整数),而不是默认的有符号整数,后者可以存储负数、零和正数。中该字段的值的长度小于定义的长度时,会在数值前面补全相应数据的。会产生一个错误或将负数转换为最接近的有效值(通常是。,那么这个列就不能存储负数。相比之下,一个普通的。列是一个无符号整数,并且是自动递增的主键。如果尝试插入一个负数到无符号列中,类型的列(默认是有符号的)可以存储从。原创 2024-07-07 02:30:00 · 1334 阅读 · 44 评论 -
Oracle 视图、存储过程、函数、序列、索引、同义词、触发器
它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。从表中抽出的逻辑上相关的数据集合,视图是一种虚表,视图是建立在已有表的基础之上,视图赖以建立的这些表称为基表。提高查询效率,一种独立与表的模式对象,可以存储在于表不同的磁盘或表空间,索引损坏只影响查询速度。【总结】:函数与存储过程的区别:执行方式略有不同,存储过程的执行方式有两种(①:使用。),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在。视图中的数据会随着基表的变化而变化。原创 2024-07-02 00:15:00 · 1210 阅读 · 2 评论 -
RDMA技术(解决主从数据库数据不一致问题)
即远端直接内存访问,是一种高性能网络通信技术,具有高带宽、低延迟、无CPU消耗等优点。主要解决网络传输中服务器端数据处理的延迟问题。Remote:数据通过网络与远程机器间进行数据传输;Direct:没有内核的参数,有关发送传输的所有内容都卸载到网卡上;Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制;Access操作;原创 2024-04-30 05:00:00 · 2196 阅读 · 81 评论 -
MySQL 慢查询优化案例
优质博文原创 2024-04-07 08:47:21 · 12072 阅读 · 71 评论 -
Mysql SQL优化
Mysql查询执行的过程。原创 2024-03-26 05:00:00 · 15143 阅读 · 105 评论 -
MySQL 查询性能优化
如果把查询看作是一个任务,那么它由一些列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数。通常来说,查询的生命周期大致可以按照顺序来看:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”可以认为是整个生命周期中最重要的阶段,其中包括大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组等。原创 2024-03-24 05:00:00 · 5734 阅读 · 145 评论 -
MySQL 更新执行的过程
最后来对比一下这两种日志:redo是物理的,binlog是逻辑的,redo的大小固定,并且以环状的形式写入数据,数据满的时候需要将 redo日志中擦除数据,并且将擦除的数据持久化到磁盘中。而 binlog以追加日志的形式写入,也就是当日志写到一定大小后,就会切换到下一个,并不会覆盖以前写的日志。原创 2024-03-23 05:00:00 · 2705 阅读 · 99 评论 -
MySQL 索引的分类和优化
如果存储引擎不支持哈希索引,则可以模拟像 InnoDB 一样创建哈希索引。思路很简单:在 B-Tree 基础上创建一个伪哈希索引,这和真正的哈希索引不是一回事,因为还是使用 B-Tree 进行查找,但是使用 Hash值进行查找而非键值本身。只需要在 WHERE 子句中手动指定使用哈希函数。原创 2024-03-21 05:00:00 · 2046 阅读 · 98 评论 -
MySQL 锁机制
定义:锁是计算机协调多个进程或线程并发访问某一资源的机制。原创 2024-03-19 05:00:00 · 2530 阅读 · 85 评论 -
Explain 关键字
explain关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理 SQL 语句的。分析查询语句或表结构的性能瓶颈。执行语句:explain + SQL语句。原创 2024-03-17 05:00:00 · 2521 阅读 · 105 评论 -
Java面试——SQL 语句题
【11】按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩:这里要注意 where 和 on 的区别:on 条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左(右)边表中的记录。【15】查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩:思路就是先查询一条数据,然后与表中的数据比较相同的成绩,且科目号不相同的数据行,如果大于1则返回当前行即可。【1】查询"01"课程比"02"课程成绩高的学生的信息及课程分数:当对一张表中的一列数据比较时,应当将一张表拆分为两张表;原创 2024-03-16 05:00:00 · 2846 阅读 · 55 评论 -
MySQL 事务
当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。主要的语句关键字包括。一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。脏读是指一个事务正在访问数据,并且对数据进行了修改,但是这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。原创 2024-03-15 05:00:00 · 1745 阅读 · 75 评论 -
MySQL 开发规范
如果语句中没有设置编码就会遵循表的编码,表的编码不存在时,则遵循数据源的编码,注:字段级编码在导入导出时可能乱码;【9】组合索引可以只使用第一个,或者前两个,或者前几个,不能从第二个开始用,也不能跳着使用。【7】不要从明细表查统计结果,定期统计插入到汇总表:这个做互联网的深有感触,一张表几千万的数据,统计一个数据,性能真心很低。【18】联合查询时,每个表必须加别名,否则系统需要自己生成别名,影响性能。【1】对较长的字符类型,如果需要索引,则建立前缀索引,前缀索引长度控制在20个字符以内,索引不能超过。原创 2024-03-13 05:00:00 · 1469 阅读 · 11 评论 -
MySQL 备份方案
MyISAM 在线备份的一个最大问题是使用 FLUSH TABLES WITH READ LOCK(关闭所有打开的表并使用全局读锁锁定所有数据库的所有表,不会刷新脏块) 操作,这会导致 MySQL 关闭并锁住所有的表,将 MyISAM 的数据文件刷新到磁盘上,并且刷新查询缓存。两者都是部分备份能够减少服务器开销(不一定:例如,Percona XtraBackup 和 MySQL Enterprise Backup,仍会扫描服务器上的所有数据块,因而并不会节约太多时间的开销)、备份时间以及备份空间。原创 2024-03-07 05:00:00 · 2569 阅读 · 59 评论 -
MySQL数据库 CPU飙升到100%
当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理。原创 2022-11-13 23:32:28 · 1182 阅读 · 3 评论 -
show processlist 详解
show processlist是显示用户正在运行的线程,需要注意的是,除了root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS权限。原创 2022-11-13 23:26:47 · 12259 阅读 · 15 评论 -
数据库清理、发布、变更指南
数据清理随着业务量的发展和需求迭代,系统内会累计越来越多过期无用的历史数据,这些数据主要包括两部分,第一部分是由于系统技术改造和需求迭代中动态规则所产生的配置项,第二部分是业务处理流程中产生的持久化过程记录数据。 随着时间的增加,这些过期的过程数据和配置不但会占用过多的磁盘空间,拖慢数据库查询速度,还会增加系统逻辑的复杂度,所以我们需要定期对这些数据做清理,但是如果清理过程中出现问题,则非常有可能影响系统的正常运行,甚至丢失订单数据,造成无法挽回的损失。数据库记录清理前期准备【1】对于生产表:联系D原创 2022-01-18 23:38:15 · 2137 阅读 · 46 评论 -
MySQL 高级查询截取分析【Explain】
慢日志分析流程如下:【1】观察(至少跑一天),看看生产慢 SQL 情况。【2】开启慢查询日志,设置阈值,比如对超过5秒的 SQL 语句进行抓取。【3】explain+慢 SQL 分析。【4】show profile 查询慢 SQL 在 MySQL 中的执行细节和生命周期情况。【5】运维经理 or DBA 对数据库参数进行调优。一、查询优化【1】永远小表驱动大表(存在连接问题),类似嵌套循环 Nested Loop。例如:当 B表的数据集小于 A表时,用 In 优于 Exist。因为先执行B原创 2021-06-06 14:12:57 · 1508 阅读 · 1 评论 -
Mysql 事务隔离级别和锁的关系
我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析 MySQL中 InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。一、一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些原创 2021-04-22 23:01:48 · 1628 阅读 · 1 评论 -
磁盘IO 基本常识
计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD(固态硬盘)硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的 I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下原创 2021-04-22 22:44:10 · 5710 阅读 · 67 评论 -
MySQL 查询执行的过程
查询的生命周期大致可以按照顺序来看:从客户端到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中 “执行” 可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序分组等。当希望 MySQL 能够以高性能的方式运行查询时,最好的办法就是弄清楚 MySQL 是如何优化和执行查询的。MySQL 执行一个查询的过程,如下:开始执行这条sql时,首先会校验你的用户名和密码是否正确,若是不正确会返回错误信息:"Access deni原创 2021-04-18 22:24:26 · 4097 阅读 · 50 评论 -
MySQL 主从复制的问题及解决方案
复制功能是构建 MySQL 的大规模、高性能的基础,也就是所谓的 “水平扩展” 架构。我们可以通过为服务器配置一个或多个备库。同时,复制也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。MySQL主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案。一、复制概述复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。通过复制可以将读操作指向备库来获得更好的读扩展原创 2021-04-18 10:32:09 · 17304 阅读 · 36 评论 -
Java面试——数据库
一、数据库隔离级别【1】Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。【2】Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。【3】Repeatable Read(可重复读):出现幻读。在同一个事务内的查询都和事务开始时刻一致。InnoDB默认级别。【4】Serializable(串行读):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。My原创 2021-04-16 23:40:57 · 15454 阅读 · 14 评论