自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 创建线程的六种状态代码示例

RUNNABLE : 可运行状态,由线程调度器可以安排执行。TIMED WAITING: 隔一段时间后自动唤醒。包括READY和RUNNING两种细分状态。NEW : 线程刚刚创建,还没有启动。BLOCKED: 被阻塞,正在等待锁。TERMINATED: 线程结束。WAITING: 等待被唤醒。

2023-05-21 14:58:20 234

原创 工作线程数(线程池中线程数量) 设多少合适?

Ncpu是处理器的核的数目,可以通过Runtime.getRuntime().availableProcessors()得到。但是一个java程序启动本身就会启动很多线程,帮我们分配资源的线程,还有操作系统的线程等。Ucpu是期望的CPU利用率( 该值应该介于0和1之间)具体设置多少,也可以根据实际运行的情况。出于安全的角度,还需要给CPU留有20%的余地。实际需要压测,得到一个合理的数据。根据CPU的核数和计算能力设置。

2023-05-19 22:36:21 436

原创 创建线程的五种状态

【代码】创建线程的五种状态。

2023-05-19 22:34:18 232

原创 线程的状态

RUNNABLE : 可运行状态,由线程调度器可以安排执行。TIMED WAITING: 隔一段时间后自动唤醒。包括READY和RUNNING两种细分状态。NEW : 线程刚刚创建,还没有启动。BLOCKED: 被阻塞,正在等待锁。TERMINATED: 线程结束。WAITING: 等待被唤醒。

2023-05-19 22:14:22 172

原创 MySQL中的系统库

内容有点长,我自己也没怎么整明白。

2023-05-07 23:17:20 2643

原创 MySQL中的目录和文件

1,bin目录1.1,启动MySQL服务器程序1.2,客户端程序2,启动选项和参数2.1,配置参数文件2.2,参数的查看和修改3,数据目录3.1,确定MySQL中的数据目录3.2,数据目录中放些什么?3.2.1,数据库在文件系统中的表示3.2.2,表在文件系统中的表示3.2.3,lnnoDB是如何存储表数据的3.2.4,MyISAM是如何存储表数据的3.3,日志文件3.4,其他的数据文件

2023-05-07 16:22:57 505

原创 MySQL体系架构

1,连接层2,Server层(SQL处理层)2.1,缓存3,存储引擎层3.1,MySQL官方引擎概要3.2,值得了解的第三方引擎3.3,选择合适的引擎3.4,表引擎的转换3.5,检查MySQL的引擎3.6,MyISAM和InnoDB比较

2023-05-07 16:13:03 138

原创 MyISAM和InnoDB比较

1,检查MySQL的引擎2,MyISAM和InnoDB比较

2023-05-05 23:46:08 82

原创 MySQL的变种和替代

1.MySQL的分支与变种1.1.Drizzle1.2.MariaDB1.3.Percona Server2.MySQL的替代2.1.Postgre SQL2.2.SQLite

2023-05-05 23:19:13 553

原创 MySQL8新特性-补充点

1,原子DDL操作2,JSON增强3,InnoDB其他改进功能

2023-05-04 22:12:16 252

原创 MySQL8新特性-窗口函数

窗口函数与分组聚合函数类似,但是每一行数据都生成一个结果。聚合窗口函数: SUM /AVG / COUNT /MAX/MIN等等。

2023-05-04 22:08:46 227

原创 MySQL8新特性-通用表达式(CTE)

通用表表达式与派生表类似,就像语句级别的临时表或视图。CTE可以在查询中多次引用,可以引用其他CTE,可以递归。CTE支持SELECT/INSERT/UPDATE/DELETE等语句。

2023-05-04 22:06:06 254

原创 MySQL8新特性-索引增强

1,隐藏索引2,降序索引3,函数索引

2023-05-04 22:04:32 325

原创 MySQL新特性-账户与安全

1,用户创建和授权2,认证插件更新3,密码管理

2023-05-04 21:57:49 88

原创 MySQL死锁

1,死锁概念2,MySQL中的死锁

2023-05-04 20:25:33 150

原创 MySQL锁的粒度

1,锁的粒度1.1,表锁与行锁的比较1.2,给表加S锁1.3,给表加X锁2,意向锁3,MySQL中的行锁和表锁3.1,其他存储引擎中的锁3.2,InnoDB存储引擎中的锁3.2.1,InnoDB中的表级锁3.2.1.1,表级别的S锁、X锁、元数据锁3.2.1.2,表级别的IS锁、IX锁3.2.1.3,表级别的AUTO-INC锁3.2.2,InnoDB中的行级锁

2023-05-04 20:24:36 601

原创 锁定读(LockingReads)/LBCC

锁定读(LockingReads)/LBCC共享锁和独占锁锁定读的SELECT语句写操作的锁

2023-05-03 23:32:19 237

原创 MySQL中的锁

的产生是因为当前事务读取了一个范围的记录,然后另外的事务向该范围内插入了新记录,当前事务再次读取该范围的记录时发现了新插入的新记录,我们把新插入的那些记录称之为幻影记录。比方在银行存款的事务中,你需要先把账户的余额读出来,然后将其加上本次存款的数额,最后再写到数据库中。的产生是因为当前事务先读取一条记录,另外一个事务对该记录做了改动之后并提交之后,当前事务再次读取时会获得不同的值,如果在当前事务读取记录时就给该记录加锁,那么另一个事务就无法修改该记录,自然也不会发生不可重复读了。

2023-05-03 23:29:49 112

原创 MVCC(多版本并发控制)

MVCC与版本链ReadView及原理如何解决事务并发引起的问题总结

2023-05-03 21:06:40 2968 3

原创 MySQL事务

事务基本语法保存点隐式提交

2023-05-03 20:57:45 106

原创 SQL标准中的四种隔离级别

事务并发引起的问题排序:脏读 > 不可重复读 > 幻读我们上边所说的舍弃一部分隔离性来换取一部分性能在这里就体现在:设立一些隔离级别,隔离级别越低,越严重的问题就越可能发生。

2023-05-03 20:55:00 1424

原创 MySQL事务并发引发的问题

MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务。在上面我们说过事务有一个称之为隔离性的特性,理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据,这样的话并发事务的执行就变成了串行化执行。

2023-05-03 20:51:57 189

原创 MySQL事务的特性

如果按照上图中的执行顺序来进行两次转账的话,最终我们看到,连老师的账户里还剩9000元钱,相当于只扣了1000元钱,但是李老师的账户里却成了2500元钱,多了10000元,这银行岂不是要亏死了?连老师借给李老师生活费,借了两次,每次都是1000,连老师的卡里开始有10000,李老师的卡里开始有500,从理论上,借完后,连老师的卡里有8000,李老师的卡里应该有2500。整个事务的操作要么全部成功,要么全部失败,不能出现连老师工资卡扣除,但是李老师工资卡不增加的情况。一个事务的执行不能被其他事务干扰。

2023-05-03 20:47:52 105

原创 Explain执行计划

一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划,我们需要搞懂EPLATNEXPLAIN的各个输出项都是干嘛使的,从而可以有针对性的提升我们查询语句的性能。通过使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。

2023-05-03 20:36:58 1846

原创 高性能的索引使用策略

这一点,也是针对联合索引来说的,前面我们反复强调过,所有记录都是按照索引列的值从小到大的顺序排好序的,而联合索引则是按创建索引时的顺序进行分组排序。比如:由于B+树中的数据页和记录是先按insert_time列排序的,所以我们上边的查询过程其实是这样的:找到insert_time值为'2021-03-22 18:23:42' 的记录。找到insert_timee值为'2021-03-22 18:35:00'的记录。

2023-05-03 20:36:45 57

原创 慢查询配置

MySQL中可以设定一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志中。我们已经知道慢查询日志可以帮助定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。slow_query_log_file 指定慢查询日志得存储路径及文件(默认和数据文件放一起)long_query_time 指定记录慢查询日志SQL执行时间得伐值(单位:秒,默认10秒)log_queries_not_using_indexes 是否记录未使用索引的SQL。slow_query_log 启动停止慢查询日志。

2023-05-03 20:35:53 257

原创 什么是慢查询

慢查询日志,顾名思义,就是查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。获取并缓存所有的列的查询,相比多个独立的只获取部分列的查询可能就更有好处。实际情况是MySQL会查询出全部的结果集,客户端的应用程序会接收全部的结果集数据,然后抛弃其中大部分数据。比较好的方案是,当初次查询的时候将这个数据缓存起来,需要的时候从缓存中取出,这样性能显然会更好。在确定查询只返回需要的数据以后,接下来应该看看查询为了返回结果是否扫描了过多的数据。

2023-05-02 23:07:24 1130

原创 MySQL调优金字塔

在阿里巴巴内部,有三分之二的DBA是业务DBA,从业务需求讨论到表结构审核、SQL语句审核、上线、索引更新、版本迭代升级,甚至哪些数据应该放到非关系型数据库中,哪些数据放到数据仓库、搜索引擎或者缓存中,都需要这些DBA跟踪和复审。DBA级别考虑的至少包括了,使用什么样的磁盘阵列(RAID)级别、是否可以分散磁盘IO、是否使用裸设备存放数据,使用哪种文件系统(目前比较推荐的是XFS),操作系统的磁盘调度算法选择,是否需要调整操作系统文件管理方面比如atime属性等等。

2023-05-02 23:02:06 87

原创 数据库索引—三星索引

对于一个查询而言,一个三星索引,可能是其最好的索引。满足的条件如下:索引将相关的记录放到一起则获得一星 (比重27%)如果索引中的数据顺序和查找中的排列顺序一致则获得二星(排序星) (比重27%)如果索引中的列包含了查询中需要的全部列则获得三星(宽索引星) (比重50%)这三颗星,哪颗最重要?第三颗星。因为将一个列排除在索引之外可能会导致很多磁盘随机读(回表操作)。

2023-05-02 12:38:31 367

原创 高性能的索引创建策略

索引在查询中的作用到底是什么?在我们的查询中发挥着什么样的作用呢?一个索引就是一个B+树,索引让我们的查询可以快速定位和扫描到我们需要的数据记录上,加快查询的速度。一个select查询语句在执行过程中一般最多能使用一个二级索引,即使在where条件中用了多个二级索引。

2023-05-02 12:36:32 82

原创 MySQL索引-全文索引

不过MySQL从设计之初就是关系型数据库,存储引擎虽然支持全文检索,整体架构上对全文检索支持并不好而且限制很多,比如每张表只能有一个全文检索的索引,不支持没有单词界定符( delimiter)的语言,如中文、日语、韩语等。“select 诗词全文 from 诗词表 where诗词全文 like‘%望%’”,这个意味着要扫描库中的诗词全文字段,逐条比对,找出所有包含关键词“望”字的记录,。用户在检索某一个关键字是,先对关键字的索引进行查找,再通过关键字与文档的对应关系找到所在文档。于是我们可以这么保存。

2023-05-02 12:27:12 160

原创 自适应hash索引

然后内部自己创建一个hash索引,称之为自适应哈希索引( Adaptive Hash Index,AHI),创建以后,如果下次又查询到这个索引,那么直接通过hash算法推导出记录的地址,直接一次就能查到数据,比重复去B+tree索引中查询三四次节点的效率高了不少。我们知道B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般为3、4层,故需要3、4次的IO查询。InnoDB存储引擎包含B+树索引、自适应hash索引、全文索引。而对于其他查找类型,如范围查找,是不能使用哈希索引的,

2023-05-02 12:24:27 145

原创 B+树索引

MySQL会使用唯一性索引,没有唯一性索引,MySQL也会创建一个隐含列RowID来做主键,然后用这个主键来建立聚集索引。

2023-05-02 11:31:59 1013

原创 二叉树的基本认识

二叉树二叉查找(搜索)树平衡二叉树(AVL-树)(树的度:树中所有结点中最大的度。结点的度:结点的子树个数)

2023-05-02 10:35:33 61

原创 MySQL与B+树

在磁盘设备上,通过B+树可以有效的存储数据;所有记录都存储在叶子节点上,非叶子(non-leaf)存储索引(keys)信息;而且记录按照索引列的值由小到大排好了序。B+树含有非常高的扇出(fanout),通常超过100,在查找一个记录时,可以有效的减少IO操作;*扇出:是每个索引节点(Non-LeafPage)指向每个叶子节点(LeafPage)的指针;*扇出数 = 索引节点(Non-LeafPage)可存储的最大关键字个数 + 1。

2023-05-02 10:35:21 191

原创 树的基本概念

树中有一个称为”根(Root)”的特殊结点。N个结点构成的有限集合。,称为原来结点的”子树”

2023-05-02 10:34:08 53

原创 B+Tree和二分查找

对于上面10个数来说,顺序查找平均查找次数为(1+2+3+4+5+6+7+8+9+10)/10=5.5次。而二分查找法为(4+3+2+4+3+1+4+3+2+3)/10=2.9次。在最坏的情况下,顺序查找的次数为10,而二分查找的次数为4。B+树索引就是传统意义上的索引,这是目前关系型数据库系统中查找最常用和最为有效的索引。二分查找法(binary search) 也称为折半查找法,用来查找一组有序的记录数组中的某一记录。因为B+树是从最早的平衡二叉树演化而来,但是B+树不是一个二叉树。

2023-05-01 23:28:42 355

原创 为什么HashMap不适合做数据库索引?

3、组合索引可以支持部分索引查询,如(a,b,c)的组合索引,查询中只用到了a和b也可以查询的,如果使用hash表,组合索引会将几个字段合并hash,没办法支持部分索引;MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。InnoDB存储引擎支持以下几种常见的索引:B+树索引、全文索引、哈希索引,其中比较关键的是B+树索引。2、当需要按照索引进行order by时,hash值没办法支持排序;4、当数据量很大时,hash冲突的概率也会非常大。

2023-05-01 23:27:02 477

原创 数据库-命名规范

数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。对象的名字应该能够描述它所表示的对象。例如:表的名称应该能够体现表中存储的数据内容,最好是遵循“业务名称_表的作用”;对于存储过程存储过程应该能够体现存储过程的功能。表达是与否概念的字段,应该使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)。数据库、表、字段的命名要遵守可读性原则,尽可能少使用或者不使用缩写。

2023-05-01 23:19:40 587

原创 数据库-日期和时间类型优化

日期和时间类型datetime、timestamp

2023-05-01 22:24:44 121

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除