自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 oracle—IMU机制

现在是在sharepool中分一个IMUbuffer,将所有的回滚信息写入。2在cr读(一致性读)的时候速度变快,cr块就是在redobuffer上新构造的数据。正常的情况下,当事务需要回滚块的时候,是去undo表空间找。同时这个过程也产生redo,直接就是图中红色的,不防止崩溃。1 获取undoblock速度变快。

2024-01-12 10:14:54 564

原创 oracle-事务一系列理解

一个事务开始后,会被分配一个唯一的id号,xid,xid不仅是一个编号也是一个地址。事务表存在undo表空间的某一个段的段头块,最多存放47个事务,事务开始的时候,先将信息写入这个表,所以一个undo段最多纪录47个事务。oracle尽量一个事务用一个回滚段,如果不够用,就复用。可将段头dump出来(正常数据库也可以dump),文件名是以会话的编号组成事务槽:1一个事务开始的时候首先将xid写入空闲的undo段的段头的事务表中,同事写入uba地址2 在所要修改的数据块的事务槽中写入xi

2024-01-12 09:51:14 546

原创 oracle-undo

undo表空间:自动生成段,自动生成区,自动维护的,不像一般的表空间,有表才有段。tips:串行化隔离级别:事务开始后,对一张表不会被别人影响,对于审计工作比较有用,避免了幻读。0段是系统表空间的undo段,对数据字典进行回滚时候(对oracle对象进行增加减少),使用到。inactive:提交后,提交后,正常来讲是可以被复用的。前滚恢复的脏块有可能是未提交的,需要回滚。9i之前,区的分配手工做,之后都是自动管理。一、将修改前的数据保存,保证回滚。1-10是正常的undo段。undo表空间中的段。

2024-01-02 16:33:38 569

原创 oracle-SCN系统改变号

当数据库正常运行时,控制文件的开始scn号和数据文件的scn号一直,结束scn号为空。当非正常关闭时,结束scn号未被写入,再启动数据库时,由于结束scn号为空,数据库知道异常关闭,则会进行实例异常恢复。在日志文件中,每一条日志都有scn号,而且日志循序写的。同时每个日志块在头部也有开始scn号和nextscn号。我们看到的SCN是一串数字,由时间经过函数算出的,其实就是时间。具体的实例恢复,还得定位到最老的*active的日志里面的LRBA的具体日志。active的日志的first的SCN一致的。

2024-01-02 11:07:08 615

原创 oracle-检查点队列

实例崩溃恢复的时候,使用redolog,终点的日志是最新的,起点的是LRBA地址的日志,是从控制文件中找到的,所以就用这一段区间的日志恢复脏块,里面的未提交的事务通过undo回滚。所以如果没有检查点队列,如果想恢复的话,就只能用所有的redolog进行恢复,速度慢。增量检查点:每隔三秒发生一次,将检查点队列的最早脏块所对应的LRBA地址记录到控制文件中。一样,也在一个链上。检查点队列链也链的是脏块,也就是脏块不仅链在LRUW上,也在这里。on disk RBA:写入的最后一条日志的地址,最新的地址。

2023-12-29 17:42:02 385

原创 oracle-存储结构

备份文件:主要备份数据文件和归档日志文件,一定不能放在存储上,存储出问题,数据文件和归档都没了,数据丢失。压缩表:使用Oracle提供的压缩表功能,可以将表的高水位线调整到合理的位置,回收被删除数据所占用的存储空间。重新组织表空间:通过重新组织表空间,可以将表的高水位线重新设置到合理的位置,回收被删除数据所占用的存储空间。系统级别的:system,sysaux,这两个都是系统和数据字典相关的,undo,temp。这些方法可以帮助降低高水位线,回收被删除数据所占用的存储空间,从而减少存储空间的浪费。

2023-12-29 14:22:53 700

原创 oracle-PGA

如果sql语句没有排序,pga基本没作用,传递一下取出的数据,但当有order by时,数据从buffercache中先都到pga中先排序,缓存,再返回给用户,当需要的空间很大,sort_area_size就会增加,当用完后,就释放。2 手动(不用了)手动的为每个session设置上面的几个区的大小,手动设置意味着每个session都有这么多区域。当分配的区域不够用时,用tmp文件(将文件写在磁盘的tmp上),非常影响速度。pga空间其实就是会话的工作区,也就是sql的工作区。对于多表哈希连接,用哈希区。

2023-12-28 15:51:59 389

原创 oracle-log

commit用户提交;有三分之一重做日志缓冲区没被写;DBWR写入的数据的SCN大于LGWR的SCN。对于写日志,存储上面也有缓存,为了速度,logbuffer写到存储的缓存上,通过存储的电池实现。先写到PGA中,再到logbuffer,最后后台进程写到log文件。commit 只触发将logbuffer写入log文件(顺序写);严格的按照时间顺序记录buffer的改变。日志是和数据一致性相关,和性能没有关系。内容:block的位置,时间,改变内容。2 logbuffer大小设置。

2023-12-28 10:01:37 394

原创 oracle-sga-buffer_cache

如果一个buffer中有未提交的事务,再读的话,就在新的buffer读,结合undo的数据,这个新的buffer叫cr。如果想手动增加buffer cache大小,首先增加sga_max_size,再增加sga_target大小,最后增加db_cache_size大小。dbf中,一个叫一个block,sga的buffer cache中,一个叫一个buffer。如果在非集群模式下,current永远是x,如果是集群,就是s,即share。例:建立表t1,段就有了,先分配一个区,如果第一个区满了,再分配。

2023-12-27 14:39:13 632

原创 oracle-sga-shared_pool

硬解析:1判断语法2判断对象是否存在3有没有权限4 从n个执行方案中选出最优解,生成执行计划,这一步骤最消耗资源。保留区设置的大一点,当一些大对象阈值大于free cathe时,就直接去保留区找空间。设置shared pool和sga的大小。oracle内存使用链chain的概念。1 大量的硬解析,2随后大的硬解析。libray:缓存sql执行计划。缓冲sql语句和执行计划。如果没有缓存,就是硬解析。1把组织的内存块串起来。latch保护链,锁链。大小写,空格都影响共享。ora-4031错误。

2023-12-25 15:55:23 387

原创 linux依赖包

2023-11-17 10:46:47 25

原创 linux(挂载与lvm管理)

在线环境下,不能用缩容,容易破坏数据。

2023-11-17 08:44:12 39

原创 linux定时任务crontab

2023-11-16 14:13:38 20

原创 基础知识(linux-shell)

前台的意思就是在同一个bash进程里面运行,后台的意思就是新开一个进程,和bash没关系了。解释shell里面的语法的解释器就是bash,bash是解释器。&&像是流水的感觉,前面的留到后面,前面的成功了后面的才能继续。对于转义字符,和引号没关系,用 -e,单双引号是变量区别。一般用户切入自己的用户后,先执行.bashrc的内容。&是后台运行的意思,就是不在当前终端运行。想把父的环境变量继承下来,用export。有点儿像盗梦空间,一层一层的嵌套。cd -:回到上次操作的目录。cp对于相同的,覆盖。

2023-11-07 15:03:35 31

原创 基础知识(程序运行1)

所谓的32位,64位,就是内存排列,图中是4个字节排列的,所以是32位,再通过总线,每次总线取数据都是一行一行的取,不是一个字节一个自己的,进入cpu,进入寄存器,寄存器也是和内存一样的,再进ALU(算数单元)中进行计算。我们承认函数,操作系统就帮我们准备好栈这种方式了。相当于编译器帮我们管理函数的运行和释放。管理在程序运行过程中产生的数据。对于函数退出后,跨函数保存信息。对于函数调用的逻辑是一致的。对于递归栈也是用处非常大。

2023-11-03 10:03:42 25

原创 graphs1

链表和树其实都是图的一种。

2023-11-01 11:20:25 37

原创 array

一个指针就是记下了一个内存地址,所以他只是把那个地址复制到这里,意味着他们都指向同一个方向的地方,他们共享一个数组。vector如果空间不足,重新分配更大的数组,就有更大的空间,同时还维护两个参数,capacity和size。方括号的意思已经隐含着“跟随这个内存地址”,也就是跟随这个指针。1 如果你使用了new分配内存,需要在析构函数中清理内存。当你构造一个新的类时,都要在构造函数中初始化私有变量。所以浅拷贝就是只拷贝了地址,没有拷贝地址指向的数据。数组没有任何功能,就是一块内存。为什么他没有复制呢?

2023-10-31 16:48:06 27

原创 class(2)+双向链表+条表

在C++里,你其实可以为语言中的操作符赋予新的意义,具体来说,你可以定义一个操作符如何与你正在编写的类型或类交互,如果你有一个代表矩阵的类,你可以定义一个乘法操作符来进行矩阵乘法。一般不涉及,但如果你的对象中涉及到了指针或在堆中创建的新对象,那在析构函数中释放它们就很有必要了,这样可以避免内存泄露,一般情况下,不返回引用,如果你返回一个局部变量的引用,这个局部变量很快就会被从栈上弹出销毁。你打开你的.h的文件,看看这些方法会改变你的对象的状态吗,如果不会,就加上关键字const。二进制中,~代表否定。

2023-10-17 15:39:53 39

原创 class(类)1

通过在方法中加入这个const关键字,如果有人声明了一个const类型的BankAccount变量,或者以const BankAccount的引用方式传递了参数,那么只有带有const关键字的方法可以被调用,这些程序知道哪些方法可以被调用,那些不可以。当你创建一个类时,实际上你是在引入一种新的数据类型,一种新的变量类型,一种新的对象类型,让用户、main程序或其他程序可以创建和使用这种新类型,(这种能力非常强大,也是面向对象编程的核心思想之一)你创建的每一个对象都是该类模板的另一个实例,是你在。

2023-10-17 09:27:07 32

原创 链表(二)

但由于你不能找到它,因此它没有被修改(这个main中的front指针就没传递给调用的函数,而是传给它一份副本指针,就像是快捷链接一样,我们可以有好几个,你想修改的是最初那个,但你拿到是别的,哪怕你修改了,最初那个快捷链接也依然没变化)而通常在代码中体现的方式是,代码的循环测试会说,我要一直走,直到下一个有我感兴趣的属性,而不是直到当前节点具有某个属性。指针本身存在于这个函数的局部变量的栈中,当函数返回时,就自动清理掉了,我们清理的是指针指向的堆内存中。指向引用的指针其实就是指向物体的指针。

2023-10-13 14:02:36 34

原创 链表linked lists(一)

所以,当你写list->时,你其实已经移动到了这个色块,并且如果你接下来写data,你就会得到10,(>直接理解为解析,它就是一个动作,如果后面接的是data,那就解析它,是10,如果接的是next,因为next是指针,对该指针存放的地址进行解析,于是就来到了内存另一个位置所存的对象上)而a->next=则表示将这个箭头指向某个地方,a->next=p表示将这个箭头指向P所指的位置。但当我说a->next=时,这意味着什么呢?Well,a是这个指针,而a->next,请记住箭头运算符的含义,

2023-10-12 17:36:37 32

原创 指针pointer

它们用的是另一种叫做“引用”(references)的东西,也就是说,在这些语言中,当你存储对象时,实际上存储的是一个能够访问该对象在内存中位置的引用。结构体和类其实一样的,只不过结构体默认放一些简单的东西,如果是复杂的,用类,同时结构体里面的东西默认是公开的,而类里面的默认是私有的。,main函数结束后,heap中的东西不会被清除,这就像是一个被遗弃的孤儿数据,我们称之为内存泄漏,但这是一块中的数据仍然存在。堆和栈的区别是,堆可以用new在上面建东西,他俩的生命周期也不同。如果你在指针名前加一个星号(

2023-10-12 14:13:45 46

原创 回溯法(backtracking)

如果它们不正确或不合适,我们会撤销这些解决方案,回到原来的位置,也就是进行回溯。值得一提的是,在进行穷尽搜索时,基本情况的思考方式与一般情况有所不同。对于&和没有&的理解,有&是引用参数的意思,就直接用他,而没有&意味着要复制副本,如果遍历太多的话,那复制多少副本啊,所以用&当达到base case时,意味着没有更多的决策需要做了,我们停止递归,或者打印出我们所做出的选择,或者执行类似的操作。每次递归调用都代表着做出一种选择,并继续进行下一个递归调用,用来作出更多的选择。回溯法是穷举搜索的一种特殊方式。

2023-10-12 09:16:36 54

原创 穷举搜索exhaustive search

这里的base case和之前的不太一样,之前的是一个简单的情况,这里的base case不是指没有选择,是指已经做出了所有的选择,我已经构建了足够高的stack,不要再高了,此时就是我的base case。在对树结构进行遍历时,一般的循环不行,就得用穷举,其实就是递归。所以这里的顺序是先递归,最后再base case,和之前相反。

2023-10-11 14:03:07 47

原创 recursion递归-2

数据在递归中的优化fractal。

2023-10-10 15:55:13 39 1

原创 recursion递归-1

使用递归的关键是每次递归都解决了当前问题的一部分子问题。一般编写递归时,面对多种情况,需要if-else语句。

2023-10-09 17:48:55 40 1

原创 c++中的collection(2)

Lexicon可以有这种方法,well,这时因为Lexicon在内部有一种与Set不同的实现方式,即prefix tree(前缀树),我们可以因此很方便的进行string元素的访问。它们之间的区别在于,lexicon还有一些方便的方法,例如你可以Lexicon name(“file”),将ile中的单词读入Lexicon类型的name对象中。声明一个Lexicon对象时,你不需要加上,因为Lexicon就是用来存储string元素的。set不存在元素排列的概念,也就没有所谓的index。

2023-09-28 17:13:15 99

原创 c++中collection(1)

linkedlist则由一系列被称为node(节点)的box组成,每个box都负责存储linkedlist对象中其中一个元素的值,然后,这些node会使用pointer(指针)来将相邻node连接成为一个linkedlist.如果你在一些方法中加入const修饰词可能会导致程序无法被编译,如果你类似于a.clear(),a.fill(),a.set()的方法中加上const,会导致程序无法被正常编译。vector对象的内部是由array构建的,该array就是用来存储元素的一大块内存。

2023-09-28 09:22:58 130

原创 mysql切换以及整体集群

若一开始未检查second_behind_master,不可用时间无法控制。借用zookeeper,存储数据库、表分片等信息,解决了多个dble的问题。在slave执行从master抢救出的binlog。元数据放在dble中,所以要是多个dble,也不行。从宕机崩溃的master抢救未传送的binlog。使用其他的slave连接新的master进行复制。等待slave执行中继日志,追赶master。MHA通知dble,让dble切换负载。既可以切换业务,也可以切换数据库。2 数据库切换了,业务怎么办?

2023-09-19 16:56:10 56

原创 mysql扩容数据库

因此分区表主要是在容量上进行优化,在性能上没有太大的优化。分表和分区表不一样,不仅存储端分了,客户端也分了。虚拟的意思就是拆分前的表和库,其实已经不存在了。缺点修复,实现改进,功能增强,功能裁剪。8 分库分表之后性能下降怎么办。dble对mycat做的增强。查询语句中尽可能带有拆分字段。水平分库其实水平分表的集成。1 怎样简单的扩容数据库。7 提高分库分表的可靠性。插入语句必须带有拆分字段。dble只支持水平拆分。dble中的虚拟数据库。分库分表后的使用方式。分库分表中间件的原理。

2023-09-18 16:50:52 33

原创 mysql三高架构之路

主库的binlog是多线程产生的,而备库复现主库的binlog是一个sql_thread单线程复现的,所以不行。延时多少微秒后,等的人到了多少就提交,万一等了10微妙,来了1000万个就不行了。是数据库走向原生分布式的方向(Tidb,华为的OCEANdb)分配relaylog是关键,不是随便分配的,有顺序的。mixed格式的用的还是比较少,一般都用row。1号等23后,最后写,所以把123叫一个事务组。原理复杂,中间是共识机制,依赖共识算法。relaylog,二道贩子,中继日志。

2023-09-18 12:57:24 37

原创 mysql备份

参数single transaction意思是可重复读隔离级别,这样再备份的时候不担心其他的事儿,因为可重复读在备份的那一刻(开启事务)就生成一个快照,我就是备份那一时刻的快照。.ibd文件是实际物理磁盘上的文件,但其实有一部分实际数据在redolog文件中,所以想直接复制.ibd是不可行的,这是一个动态过程。总之就是一个字,慢,而且干扰其他用户事务,因为你也是相当于开启事务重建数据库、表。有一小段就是4,其实是温备份,但时间很短。如何实现物理+热+增量备份。是最原始的逻辑备份的方式。

2023-09-15 17:31:22 29

原创 ORM原理

对象与关系型数据库的映射关系。ORM框架有哪些常见问题。ORM和DAO是什么关系。如何定位出问题的sql。

2023-09-15 14:11:13 28

原创 mysql中疑问

幻读是啥意思呢,就是虽然我锁住了当前数据,因为是行锁,但不妨碍我往里插数据,这边插入数据后,那边前后一查,发现数据不一样了,以前是5条,现在是6条,这就是幻读。innodb产生的undo log,redo log,用来时间事务的acid。重点流程是内存中想写undo log,再改内存数据,再改redo log。主要危害:锁无法释放,尤其行级锁,导致其他事物等待,也容易产生死锁。,最后写binlog,但上面的流程一旦遇到断电,就崴泥了。server产生的binlog,用来进行数据复制。13如何解决死锁问题。

2023-09-15 09:06:39 24

原创 提升查询速度的方式

覆盖索引:语句从执行到返回均使用同一个索引,避免回表。筛选字段,where字段,order字段都被索引覆盖,这样最好。首先要扫面全表,拿出来,再解析出没有null的数据,效率很低。通过选取几个页取平均值,再乘以页的数量来估算。cardinality越大,区分度越大,越好。mysql在选取索引时,会估算索引有多少种。仅需要一个随机结果,却经历了不必要的排序。覆盖索引通过取消回表操作,提升查询效率。根据所需数据的id,得到最终的结果集。中间表是一个临时表,不能走索引。明明有索引,就是不走怎么办。

2023-09-14 09:14:09 29 1

原创 存储中的理论实践

2禁止在数据库中存储图片,文件等大的二进制数据。1把blob和text分离到单独的扩展表中。经常查的数据放到一个表,不经常的另外放。2 优先选择符合存储需要的最小数据类型。1减少冷热数据分离,减少表的宽度。1控制单表的大小,500万以内。

2023-09-13 08:53:14 39 1

原创 视图和约束的一些技巧

temptable:将视图作为临时表(中间结果)来处理。merge :将视图sql合并到主查询sql中。尽量设置,因为如果设置为索引,效果不好。视图的原理是预设一个select语句。插入修改数据时,使用触发器校验数据。如何使用不存在的数据表-view。动态的结果,很难走merge。无法使用merge的sql。

2023-09-13 08:43:14 38 1

原创 索引的一些用法已经注意事项

where查询条件中必须有最左侧的字段。字符长过长,用前缀截取节约空间。

2023-09-13 08:10:05 33 1

原创 数据库日志理解

commit的时候必须刷日志,但也挺麻烦,频繁IO,通过组提交。sqlite对于shadowpage的优化,日志中放原始页。redo就是数据没刷到磁盘上,但日志刷上去了,断电了。缺点:用户想发一个now,或者limit,是随机的。自己理解,物理日志把redo和undo写了一起了。commit的时候要刷,指针要改,垃圾要清理。这些操作可以用所谓的物理日志,逻辑日志去实现。用户commit,保证日志已经刷进去了。用户commit了,数据就不能丢。我要修改的的东西,我先另起一页。先把日志刷到磁盘里,再刷数据。

2023-09-12 10:26:58 25

原创 mvcc理解

只存储增量的字段,节约历史版本的大小,但想查历史版本,就得回去一步步找。新版本放在末尾的话,索引上来查的是最老版本,追加的时候维护开销大。回收宗旨:1活着的事务都没有用到的版本 2 回滚版本。页需要做一个标记,当有更新时,才会扫描,后台专用线程。针对每一个tuple,用指针建一个版本链表。主键索引都是指向版本链表的头(第一个)事务自己记下来,到时候一起清。mvcc所有数据库都实现了。新版本放在末尾或者开头。mysql用的第三个。不能无限回收历史版本。

2023-09-11 18:05:27 49

空空如也

空空如也

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

TA关注的人

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