数据库
文章平均质量分 93
程序猿进阶
梦想成为自由职业者
展开
-
MyCat 分片
Mycat背后是阿里曾经开源的知名产品Cobar。Cobar的核心功能和优势是MySQL数据库分片,阿里随后开源的Cobar,并维护到2013年初。Cobar的思路和实现路径的确不错。基于Java开发的,实现了MySQL公开的二进制传输协议,巧妙地将自己伪装成一个,目前市面上绝大多数MySQL客户端工具和应用都能兼容。比自己实现一个新的数据库协议要明智的多,因为生态环境在哪里摆着。Mycat是基于Cobar演变而来,对Cobar的代码进行了彻底的重构,使用NIO重构了网络模块,并且优化了Buffer。原创 2024-07-28 10:31:02 · 1082 阅读 · 32 评论 -
禁止使用存储过程
存储过程是指为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户可通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行。存储过程在数据库技术中属于一种服务端编程方式,是一组预编译的SQL语句集,常用于对数据库进行操作、控制和管理。存储过程通常包括流程控制语句、数据操作语句、变量的定义和赋值、条件判断语句等,可以在执行过程中接受参数输入,并返回查询结果。原创 2024-07-11 05:30:00 · 1340 阅读 · 102 评论 -
mysql signed unsigned zerofill详解
这在某些情况下非常有用,比如当你知道数据永远不会是负数时(例如年龄、计数器或其他只能是正的度量)。是一个属性,你可以在创建或修改表时为整数类型的列指定它。和正整数),而不是默认的有符号整数,后者可以存储负数、零和正数。中该字段的值的长度小于定义的长度时,会在数值前面补全相应数据的。会产生一个错误或将负数转换为最接近的有效值(通常是。,那么这个列就不能存储负数。相比之下,一个普通的。列是一个无符号整数,并且是自动递增的主键。如果尝试插入一个负数到无符号列中,类型的列(默认是有符号的)可以存储从。原创 2024-07-07 02:30:00 · 912 阅读 · 44 评论 -
Oracle 视图、存储过程、函数、序列、索引、同义词、触发器
它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。从表中抽出的逻辑上相关的数据集合,视图是一种虚表,视图是建立在已有表的基础之上,视图赖以建立的这些表称为基表。提高查询效率,一种独立与表的模式对象,可以存储在于表不同的磁盘或表空间,索引损坏只影响查询速度。【总结】:函数与存储过程的区别:执行方式略有不同,存储过程的执行方式有两种(①:使用。),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在。视图中的数据会随着基表的变化而变化。原创 2024-07-02 00:15:00 · 885 阅读 · 2 评论 -
RDMA技术(解决主从数据库数据不一致问题)
即远端直接内存访问,是一种高性能网络通信技术,具有高带宽、低延迟、无CPU消耗等优点。主要解决网络传输中服务器端数据处理的延迟问题。Remote:数据通过网络与远程机器间进行数据传输;Direct:没有内核的参数,有关发送传输的所有内容都卸载到网卡上;Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制;Access操作;原创 2024-04-30 05:00:00 · 1905 阅读 · 81 评论 -
MySQL 慢查询优化案例
优质博文原创 2024-04-07 08:47:21 · 2755 阅读 · 71 评论 -
Mysql SQL优化
Mysql查询执行的过程。原创 2024-03-26 05:00:00 · 2428 阅读 · 105 评论 -
MySQL 查询性能优化
如果把查询看作是一个任务,那么它由一些列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数。通常来说,查询的生命周期大致可以按照顺序来看:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”可以认为是整个生命周期中最重要的阶段,其中包括大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序、分组等。原创 2024-03-24 05:00:00 · 5044 阅读 · 145 评论 -
MySQL 更新执行的过程
最后来对比一下这两种日志:redo是物理的,binlog是逻辑的,redo的大小固定,并且以环状的形式写入数据,数据满的时候需要将 redo日志中擦除数据,并且将擦除的数据持久化到磁盘中。而 binlog以追加日志的形式写入,也就是当日志写到一定大小后,就会切换到下一个,并不会覆盖以前写的日志。原创 2024-03-23 05:00:00 · 2348 阅读 · 99 评论 -
MySQL 索引的分类和优化
如果存储引擎不支持哈希索引,则可以模拟像 InnoDB 一样创建哈希索引。思路很简单:在 B-Tree 基础上创建一个伪哈希索引,这和真正的哈希索引不是一回事,因为还是使用 B-Tree 进行查找,但是使用 Hash值进行查找而非键值本身。只需要在 WHERE 子句中手动指定使用哈希函数。原创 2024-03-21 05:00:00 · 1731 阅读 · 98 评论 -
MySQL 锁机制
定义:锁是计算机协调多个进程或线程并发访问某一资源的机制。原创 2024-03-19 05:00:00 · 2241 阅读 · 85 评论 -
Explain 关键字
explain关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理 SQL 语句的。分析查询语句或表结构的性能瓶颈。执行语句:explain + SQL语句。原创 2024-03-17 05:00:00 · 2185 阅读 · 105 评论 -
Java面试——SQL 语句题
【11】按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩:这里要注意 where 和 on 的区别:on 条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左(右)边表中的记录。【15】查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩:思路就是先查询一条数据,然后与表中的数据比较相同的成绩,且科目号不相同的数据行,如果大于1则返回当前行即可。【1】查询"01"课程比"02"课程成绩高的学生的信息及课程分数:当对一张表中的一列数据比较时,应当将一张表拆分为两张表;原创 2024-03-16 05:00:00 · 2136 阅读 · 55 评论 -
MySQL 事务
当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。主要的语句关键字包括。一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。脏读是指一个事务正在访问数据,并且对数据进行了修改,但是这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。原创 2024-03-15 05:00:00 · 1489 阅读 · 75 评论 -
MySQL 开发规范
如果语句中没有设置编码就会遵循表的编码,表的编码不存在时,则遵循数据源的编码,注:字段级编码在导入导出时可能乱码;【9】组合索引可以只使用第一个,或者前两个,或者前几个,不能从第二个开始用,也不能跳着使用。【7】不要从明细表查统计结果,定期统计插入到汇总表:这个做互联网的深有感触,一张表几千万的数据,统计一个数据,性能真心很低。【18】联合查询时,每个表必须加别名,否则系统需要自己生成别名,影响性能。【1】对较长的字符类型,如果需要索引,则建立前缀索引,前缀索引长度控制在20个字符以内,索引不能超过。原创 2024-03-13 05:00:00 · 1416 阅读 · 11 评论 -
MySQL 备份方案
MyISAM 在线备份的一个最大问题是使用 FLUSH TABLES WITH READ LOCK(关闭所有打开的表并使用全局读锁锁定所有数据库的所有表,不会刷新脏块) 操作,这会导致 MySQL 关闭并锁住所有的表,将 MyISAM 的数据文件刷新到磁盘上,并且刷新查询缓存。两者都是部分备份能够减少服务器开销(不一定:例如,Percona XtraBackup 和 MySQL Enterprise Backup,仍会扫描服务器上的所有数据块,因而并不会节约太多时间的开销)、备份时间以及备份空间。原创 2024-03-07 05:00:00 · 2305 阅读 · 59 评论 -
MySQL四种日志binlog/redolog/relaylog/undolog
因为功能的不同,redo log 存储的是物理数据的变更,如果我们内存的数据已经刷到了磁盘了,那redo log的数据就无效了。这也应该容易理解,毕竟回滚嘛,跟需要修改的操作相反就好,这样就能达到回滚的目的。的存在为了:当我们修改的时候,写完内存了,但数据还没真正写到磁盘的时候。时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘。中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量。我们还是会对这次的事务回滚,将无效的。原创 2023-04-05 10:49:41 · 588 阅读 · 2 评论 -
MySQL数据库 CPU飙升到100%
当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理。原创 2022-11-13 23:32:28 · 1080 阅读 · 3 评论 -
show processlist 详解
show processlist是显示用户正在运行的线程,需要注意的是,除了root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS权限。原创 2022-11-13 23:26:47 · 7055 阅读 · 15 评论 -
数据库清理、发布、变更指南
数据清理随着业务量的发展和需求迭代,系统内会累计越来越多过期无用的历史数据,这些数据主要包括两部分,第一部分是由于系统技术改造和需求迭代中动态规则所产生的配置项,第二部分是业务处理流程中产生的持久化过程记录数据。 随着时间的增加,这些过期的过程数据和配置不但会占用过多的磁盘空间,拖慢数据库查询速度,还会增加系统逻辑的复杂度,所以我们需要定期对这些数据做清理,但是如果清理过程中出现问题,则非常有可能影响系统的正常运行,甚至丢失订单数据,造成无法挽回的损失。数据库记录清理前期准备【1】对于生产表:联系D原创 2022-01-18 23:38:15 · 1890 阅读 · 1 评论 -
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 · 434 阅读 · 1 评论 -
Mysql 事务隔离级别和锁的关系
我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析 MySQL中 InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。一、一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些原创 2021-04-22 23:01:48 · 434 阅读 · 1 评论 -
磁盘IO 基本常识
计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD(固态硬盘)硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的 I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下原创 2021-04-22 22:44:10 · 5502 阅读 · 67 评论 -
MySQL 查询执行的过程
查询的生命周期大致可以按照顺序来看:从客户端到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中 “执行” 可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序分组等。当希望 MySQL 能够以高性能的方式运行查询时,最好的办法就是弄清楚 MySQL 是如何优化和执行查询的。MySQL 执行一个查询的过程,如下:开始执行这条sql时,首先会校验你的用户名和密码是否正确,若是不正确会返回错误信息:"Access deni原创 2021-04-18 22:24:26 · 3798 阅读 · 5 评论 -
MySQL 主从复制的问题及解决方案
复制功能是构建 MySQL 的大规模、高性能的基础,也就是所谓的 “水平扩展” 架构。我们可以通过为服务器配置一个或多个备库。同时,复制也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。MySQL主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案。一、复制概述复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。通过复制可以将读操作指向备库来获得更好的读扩展原创 2021-04-18 10:32:09 · 1109 阅读 · 36 评论 -
Java面试——数据库
一、数据库隔离级别【1】Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。【2】Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。【3】Repeatable Read(可重复读):出现幻读。在同一个事务内的查询都和事务开始时刻一致。InnoDB默认级别。【4】Serializable(串行读):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。My原创 2021-04-16 23:40:57 · 8739 阅读 · 14 评论