00:04
OK,大家能呃,听到我的,呃,听到我的声音吗?呃,如果大家能听到的话。啊,可以在。那个直播啊。直播的那个聊天窗口啊。回个666,我们八点钟准时开始。呃。我们八点钟开始啊。OK,好的。开始啊。
01:03
大家能看到我的桌面了啊OK。好,我放点音乐啊,我们八点开始,八点开始OK。呃,大家进入直播间的话,呃,如果能听到声音啊,并且能这个看到桌面的话,正常的话回个666啊,我发点音乐。OK啊,我们八点开始啊,八点啊,今天给大家分享是的架构原理啊,今天有链接签到是吧,切到的话在切到,我看一下切到是在切到链接那个下去到。
02:24
等其他等会就发出来过你走过的路,这算不算相逢?我还是那么喜欢你,想与你到白头,我还是一样喜欢你,只为你的。
03:24
里追逐沿途的风景,还带着你的呼吸真息,大家赶紧签到啊,大家赶紧签到,我们马上开始啊,八点准时开始,OK,来不歇息,像风走了不问归期。我吹过你吹过的风,之所以算相拥,我错过你。
04:24
你走过的路,这算不算相逢?我还是那么喜欢你,就与到白头,我还是一样喜欢你,只为你的温柔。OK啊,我们马上开始啊,我们马上开始。啊,大家赶紧签到啊,八点钟了啊,我们开始啊,各位同学啊,大家晚上好啊,欢迎参加腾讯云TTC口post版的训练营啊,我是讲师郭军。
05:07
那么今天呢,给大家带来的主题是架构原理解析。那么我在讲这个之前啊,先做一个简单的自我介绍啊,我一直是从事数据库行业20余年啊,从电信行业的Oracle啊,做到电商行业的马Q啊,然后再到金融行业的国产分布式数据库TTCQ,当然我也在传统制造业做了一些云计算和大数据的项目,所以我现在横跨呃数据库啊。呃,大数据云计算当然主要主成于还是这个数据库啊,那现在呢,主要是专注于这个TTC数据库的技术研究步道以及培训啊,这是我的个人的一个简单的一个介绍,OK,好,那今天呢,我给大家讲的这个内容里面一呢就是我们的目标呢,就是要了理解啊post是什么啊,因为我们之前讲过很多数据库啊,什么马S啊,或者说t for马Q版是吧等等,那了解了TQ呃这个post CQ之后呢,那我们要理解它这个产品啊,那产品的第一步呢,就是理解它整个的一个体系结构啊,它的整个呃,组件里面的组件的关系啊,如果是一条是一个执行的话,那么执行的整个流程在啊整个组件里面,它是怎么运行的。
06:23
那在运行当中,那他要获取数据,它怎么从底层去啊获取数据,数据如何存放的?呃,这个就是我们今天的。啊,这个主要内容OK,那么我从这六个topic里面啊,给大家详细讲解啊,第一个呢,就是啊,什么是possibleq啊,那了解了这个之后,我从整体架构里面给大家非常详细的从它的底层的物理程啊,然后从上层的实力的内存和进程啊去理解,那最后呢,从开发的维度呢,去给他理解这个啊它的逻辑结构啊,我要去开发,那我怎么去理解啊,什么是数据库,什么是表,什么是表空间,什么是STEM,对吧,什么是索引啊,什么是这个视图。
07:07
啊,是不是存储过程等等,那么从这么六个topic里面去展开去讲。好,那首先我们来看一下Q是什么啊是什么。那么possible。呃。它是一个开源数据库啊,它既是呢对象关系数据库啊。而且它还啊,除了有光系数据库的其他一些特性啊,用在一些非光系息里面也是啊,像比库里面啊,他也会用到啊,那po数据库呢,在开源数据库里面,在整个数据库的一个排名里面是排全球第四啊,一直是处在这个第四的位置啊,第一是Oracle,第二是Mo,第三是微软的super server啊,第四就是possibly啊数据库,那么这个数据库呢,已经有30多年的历史啊,那一直是在开发这样的一个开源的这样一个社区里面啊,在一直在发展啊,那么随着现在国产数据库的一个,呃。
08:10
这个。崛起的话,那么post数据库呢,是作为数国产数据库里面非常的重量级的一个啊底座啊,所以呢,像很多呃,数据库厂商,云厂商,互联网厂商啊等等都在用。啊possiblyq啊,就比如说腾讯云啊,腾讯云就是我们的啊t for possibly版啊,那它就是用这样的啊,那而且这个T口for possible版又两个啊两个分支啊,它有这个韩式的这种啊。存储也有劣势的,这种存储行式主要做这个OATP的啊,劣势呢主要做这个啊。分析型的。啊,定型的。那么这个呃POS啊,它还用在一些其他的一些地理空间啊,这种比如说像啊烫烫或者说呃,一些外卖这的系统里面啊,会用到这样的啊这个post样的场景,所以我们如果大家去看post官网啊,3w.post org啊这个官网呢,呃,可以看到它这个一幅图啊,上面写的这个是啊最强的开源关系数据库。
09:19
啊,这么一个口号,OK,好,那么我们来简单看一下,就是说这个光型数据库的一个发展历程啊,主要了解一下这个poly在这些数据库里面,它是怎么样去发展啊,怎么样发展。那么说到关系数据库啊,这个功劳非常大的肯定是,呃,IBM公司啊,在其实在最早的时候啊,在从数据关系数据开始的,在1970年。关系型数据库支付啊,就是科德。啊,是IBM的一个程序员啊,他发表了一篇这个啊,大型共享数据库的关系,数据库的模型这样一些论文。有了这篇论文之后,那么在我们看到这幅图啊,就会在1973年啊,1973年,1973年IBM公司启动了SYSTEM2这个项目。
10:12
那么这个项目啊,启动之后呢,也发表了一系列的这个关系输出的文章。啊,然后这个。那么。然后呢?这个这个哥们就是麦克啊。这个斯通布莱克啊,他呢是这个。伯利克这个伯利克大学的啊,伯利克大学的,就是这个加州大学伯利克分校的这个科学家教授啊,他通过这个IBM的这个论文,哎。进行研究,然后启动一个光性数据库的一个研究项目,啊,最开始就是啊这个数据库。啊,从这个这个数据库开始,那么大家看到这里面这么多数据库,那大家看看看这个这里面关系数据库最牛逼的是谁啊,这个就是ole公司啊,那么奥Le克公司呢,他在1977年的时候。
11:09
啊。拉里啊,爱迪生研究了啊,世界,世界上第一个最强的商用型的关系数据库啊。他的公司就什么就是Oracle,中文就什么甲骨文啊,就是Oracle公司一直排排名全球第一,而且占占整个数据库市场的60%啊,以金融啊为主。那么。那么这个。呃啊,它在1980年的时候,也随着这个发展,在1980的时候呢,因为英格它是一个免费的啊,在1980年啊。共分发了100份代码,拷贝到不同的公司。那么这些公司呢?把它做成自己的一个产品。啊,你看有哪些呢。啊。比如说有这个。
12:00
啊。微软呢,是个seven份还posts。还no stop,这些分支啊,这些分支啊,大家可以看到。啊,那么像C贝斯啊,C贝斯是在1981年啊,在美国的一个小公司啊,可能大家没听过啊叫呃克罗门克啊这个这么一个公司啊,有两个员工啊呃,他一开始是做这个呃这个呃这样一个也是关rds的这种,后来转向这个呃RDBMS。然后他离职之后呢,啊。啊,开发了这个。啊啊啊,1981年啊,他这个是这个这个小公司两个员工开发了,但这个呢,在2000年被IBM收购了,你所以看到IBM非常强是吧,所以说inform max大家肯定记忆里面肯定是说是IBM公司的,其实它是后面被收购了啊,那么在。嗯。
13:01
那么在这个1982年啊是吧,那IBM自己也发布了这个数据库是吧,叫这个呃CQ呃杠DS啊,他这个G这个呃VM啊VSE的啊,就虚拟内存啊这样的,它这个呢,主要是基C口作为接口啊,这一个商用数据库啊,那么他1983年这个IBM公司呢,在这个啊,真正发布了他这个DB two啊,DB two大家肯定啊听的比较多是吧,特别银行啊,用的非常非常多啊,银行里面用的最多的就Oracle,然后就么就DB two是不是,嗯。那么在1984年这个啊in glass的分支啊,这边从这个这个产呃,这个这个延伸过来的啊,C base啊这样一个公司也是这个美国的啊,在加州啊,他呢这个呃也成立了CC贝斯啊,但C贝斯呢,一开始比较弱啊,他后面就找了那个微软合作啊,这个1987年找了微软合作,可能后面合作下去呢,之后呢,微软自己也搞了公司啊,微软他可能在1988年,这个微软有三家公司组成的,微软还有CBS,还有一家公司组成的啊,那个也推出了自己的一个S了,所以呢,这个CB公司呢,在1994年的时候就不跟微软合作了啊,自己继续发展,继续发展,那微软是持续发展,但c base斯呢,在2010年的时候被S普公司,德国的这个S普公司,SAP的公司收购了啊收购了。
14:22
那么我们可以看到这个possible啊,Possible呢是在一九啊,真正叫possible的时候是在1995年左右,他跟MY基本上相差时间很近。啊在一九啊九几年95年左右啊,跟马相当很近是吧,同呃同时发展起来,那他们当然他们呢都有前身是吧,像马的前身是在1979年是吧,有瑞迪的那是吧,啊这个这个啊mon是吧,他开发的是他本来是一个据一个写个报表,用C写一个报表是吧,取数据的啊那po斯呢,就1973年是吧,它是基于这个伯克利的发展过来的啊,所以他们这个po斯跟马克基本上真正叫的叫这个名字的时候是1995年左右。
15:09
那么啊呃,实际上这两个这个数据库啊,呃到底说诶哪个强哪个啊这呃说从我们从实际的这个场景来讲的话,那确实这个马SQL啊,它比这个应用的场景更多,特别是互联网公司是吧?嗯,但是呢,这个呃后面的势头啊来看的话,POS啊可能更有优势一些,那为什么呢?我们来看这两个数据库的一个对比。啊,我们可以看到这个,呃,Post数据库跟马数据库,Post数据库在哪些方面比较有优势,比如说它的那个开源协议啊,Post数据库的开源协议是用BSD的。那BSE这个协议呢,它是修改不受限制的,什么意思呢?就是如果说我去post官网下载它源码,然后我把它啊。
16:00
改成啊这个一些功能啊,加上一些功能,然后我把它卖掉,那这个加上这些功能的源码,我不需要开放出来,那我可以分装好之后直接卖啊,它这个非常非常自由,不受这个法律说这个我我拿了这个源码,然后改了之后,我要什么一定要这个分享出来,这个popla,因为它基于这个BSD的啊,完全免费。那马数据库呢,它虽然说也叫开源,我从马QL官网是吧,我下载了马QL的这个源码,然后我做了修改之后加了一些功能,那加了这些功能,这些源码你必须什么也要开放出来,所以这个就是啊。马的这个啊,软肋啊,他要啊,你改了之后,他开开放出来。这第一个第二个来看的话,就是说是完全是由啊社区来主导的。那么马为什么越来越强,而且要一直排名第二的话,是因为它背后有商业公司Oracle啊做了支撑啊,所以很多功能啊,像包括这个,呃,免费的这个开源的这种分支嘛,这它的一些功能都完全是个有啊商业公司去来来来这个做指导。
17:06
所以从这一点来看的话,就是说啊,马比较强的就是因为它背后有奥的支撑啊,因为奥毕竟是numberone是吧,老大。那它后面那些功能基本上差不多啊,比如说事物都支持acid啊,事物的原子性,一致性,隔离性和持久性。包括MVCC啊MVCC主要是提高啊并发性能的啊,读部署在写,然后他们的实现啊,马是基于这个安度,那postna是基于这个啊,它这个表的这个这个实现啊来它数据还是全部放在表上的,就修改器的数据啊,它没有专门有安度,但后面呢,也采用了类似于安度的这样的一个技术来实现这个MVCC。那么从这个表的存储上面来讲的话啊,格呢单表可以支撑这个100GB啊。那马S如果这个表单表比较大的话,它其实要做什么,大家经常听到什么分库分表是吧,所以它呢,这个会比较呃这个弱一点啊,因为马的是这个索引组织表啊,就句触表啊,它是量太大之后啊,因为它这个相当于这个索引就是表啊,所以呢,它不太适合像这个post这样的堆表啊。
18:17
那么对于这个引擎来讲的话,这边啊都是可以用可插拔的是吧,这个基本一样,那对于表连接来说,这个post有三种连接方法,哈希连接,Next loop和这三种连接方法,这马呢,在马5.7之前只有next loop线上循环连接啊,在马克8.0采用哈希交易连接。啊,那么对外啊,对外数据取接入的话,那po呢,有比较多的,比如支持的FDW这种连接啊,那马呢这种就呃啊。就比较少啊,基本没有,那么从进程来讲的话,就是说啊,Post是多进程的,马是多线程的,实际上进程跟线程它们最大的区别就是说,如果从性能角度来讲的话,多进程啊它性能更好一些。
19:11
那从多线程呢,它比较省内存啊,如果我把一个人比作啊一个进程的话,那么你的左手和右手呢,可以比作一个线程啊这么去理解,那这个呢,它这个各有优势,各有优势啊,这个就是啊他们的这个不同点,所以呢,我们上次讲的是t form版是吧,那今天呢,我们讲的是for possible版,那么他们底座呢,有一些这个区别。OK,好,那么了解了这个possible数据库之后,我们来看看这个possible possible的整体架构啊的整体架构。那我们来看。这个整体架构怎么去理解这幅图啊,这个图非常非常重要啊,也是我们对所有的数据库其实都有类似这样的架构图。那么。我们可以看到的是什么呢?就是我们把这个数据库啊,啊,如果我们先看这个右边这一半啊,右边这一半。
20:09
那右边这一班啊,我们把右边这一班数据库呢,就一分为二啊,一分为二。一分二,那么它的这个底层呢,就是啊一些文件,其实我们把这些文件,我们把它叫做数据库啊,相当一堆这个操作系统啊上的一些文件啊,就是我们看到的这个,比如说像这个Windows的这个NNTFS啊,像这个Linux的ET啊,这个四或者或者叉FS是吧,这样的这个操作系统啊,存在的一个文件啊。那么这些文件是静态的啊,下面这些数据是静态的,就是持久化静态到。我们的磁盘上面啊,持久化的静态的啊,基本上就是一般我们要改数据的话,不会直接在磁盘上改是吧,是静态的。那么数据库它上面还有一个叫动态的,动态的就是说它的数据呢,呃,实时变化,会经常变化的,那这种数据库呢,它在哪里呢?是在这个内存里面,所以说上面这一层啊,是内存的啊,设置内存这一层啊,下面这个静态的这个是磁盘啊,所以我们计算机啊,不是有磁盘吗?是吧,磁盘啊。
21:14
上面是这个内存。那么我要因为内存数据动态的,而且它不能持久化,也就是说我这个数据内存数据如果我上去这个服务器关了,内存数据丢了,那这个时候我要把这内存数据写到磁盘的话,那么在动态的内存上的数据呢,写到静态的磁盘上数据呢,我们一堆又一堆什么一堆后台进程,所以说后台进程把我们。动态的内存数据刷写到我们的磁盘。啊,算起来我们的磁场啊,这是这个结构啊,整个,所以我们可以看到数据库分为数据库和上层的什么。实力啊,实力包括了我们的内存和进程,好这这一层管了解了好了之后呢,那我们再看左右两边,左右两边只是我们的客户端啊C啊,然后我们的服务器S。
22:07
那么我们的客户端呢,要访问数据库,我要数据库里面,我要把我客户端啊请求的数据写到数据库,或者说我客户端要去请求数据库的话,那么他们要去访问,那客户端去访问的时候呢,那他需要。啊,通过这个网络是吧,TC pip的网络去连接啊,TVIP网络去连接,那么它连接的时候,首先它要去请求,请求的话,它首先保证网络是通的,另外TCP它请求什么呢?请求这个服务器上面的一个主进程叫post must这个进程。这个master进程接收到请求之后,哎,那它会生成出一个子进程出来,这个子进程是专门服务于我们的客户端啊请求的啊,那这样的话,如果说你这个用户请求过来是用户名密码是合法,是正确的,网络是通的,OK,那用户呢,最后去连到专门的这个进程里面去,然后再去访问数据库,注意访问数据库的时候,那么他去读的是内存里面的数据,如果说内存的数据没有的话,OOKOK,那这个。
23:17
内存这边就会调它下面的这些后台进程去读磁盘的数据,把它读到内存,然后进行写,写完之后再刷到呃这个磁盘。啊,这是这个,那么还有三个文件,那这几个文件呢,是我们叫参数文件,这个参数文件主要是用在什么呢?启动数据库用的。啊,启动数据库用的,比如说我们启动数据库的时候,我们会去读这个post config,这个启动数据库的时候,数据库要分配内存派新出这个进程的话,那么他要读这里面的参数啊,这里面参数里面有内存的分配啊,啊一些进程啊这种啊选在这个地方。
24:00
那么post,呃,Auto to config这个是指的是我数据库起来之后,然后如果说我要动态的去改我的一些参数的话,改完了参数会写到持久化到这个possibly secret o to config啊这个里面。啊,这样的话,那我下次我重启数据库的时候,那么数据库它第一要先读possibly c conf啊最后呢,他要读一下这个,这个如果有变化,那以这个为主。那么还有一个叫pop gd h BA抵com,这个是用户访问数据库的时候一个权限验证啊,如果说我通过这里验证他这个账户走的是用户名密码还是走的是啊,不用用户名密码的啊,它是加密的,那有这个东西来控制啊,PG下键H ba.com。OK,好,那我们。今天这个分享啊,我们是有三三波奖奖品啊,我们先来第一波奖品好吧,呃,我。
25:05
啊,我打开那个界面啊,啊,先来第一波奖品啊,来第一波奖品大家听的话也肯定比较累啊,所以呢,我先给大家发奖品啊,我们第一波奖品是什么呢?是这个。呃,大家刷一下啊呃。QQ啊,这个公仔还是挺可爱的啊。好,那我给大家一分钟的时间啊,刷这个,然后我开下音乐。OK。好,大家去刷吧,大家去刷。你吹过的风,这算不算好一分钟啊,一分钟走过你走找个好听的歌吧,这算相逢,我还是那么喜欢,给大家一分钟时间好,大家如果说在我在讲的时候都大家有问题的话,可以可以那个啊,可以在这个群里面发出来,OK啊,我可以看这个直播间啊,OK,我看看啊啊为什么说OK,我来看啊呃,为什么说多进行零呃充明利多核啊,担纯利用不高是吧,这是好问题啊。
26:42
其实这个就是多进程这种啊,因为进程呃,它的这个呃,CPU比较多的话,它这个发挥性啊更好的一些性能,你像这个呃,Oracle跟cospla非常相近啊,你看资源,资源你特别多的时候,它全部能消耗掉,像马这个数据库啊,你这个比较好的一个一个一个服务器的话,它一个进程消耗不掉的啊,这个时候我们一般啊这个呢,喜欢用多实例啊这种方式啊,这种是进程多单进程多进程的这个不同点,PG种模型,每个连接都会缓存一份原数据吗?为什么连接不能共享连。
27:42
既不能共享,你去共享啊,并不共享啊,如果是专属的话,它的效率更好,就类似于比如说你去宾馆是吧,你是VIP的话,那专门服务员给你提供服务,你说这种服务好不好,如果说一个大堂经理是服务于所有的啊,我要服务于20个人的话,那你是要等待,是要排队是吧?但他有缺点什么缺点,你这个专属这个给你的话,那这个非常消耗内存是吧,是不是OK,对,G是最接近奥克的,OK好。
28:21
OK啊,大家提的问题都较比较OK啊,比较好,好,那我们继续OK。好。这是刚才看到这幅图是吧,刚才这幅图,那我们再啊详细的来看这一幅啊,把刚才那幅图吧,再细化一些,再细化一些啊,那么这幅图呢,如果说我们啊,用一条啊CQL语句啊,比如说你要去执行一条CQ语句,那么刚才我们通过刚才那条这个图呢,我们把这个图呢,更详细的把它画出一些这个啊流程出来啊,那客户端这边客户端,比如说呃,我的呃。啊,Possiblemi客户端或者说我们的应用程序啊,Java是吧,我要去理我的数据库,那客户端这边呢,他去请求这个服务器啊,那这块呢,是我们的服务器啊,这块都是我们的服务器啊,那这个服务器呢,这个去请求,首先他要去请求什么呢?他请求的话通过TCP是吧去请求,那当然我们这个客户端这边肯定会输入什么。
29:20
你服务器的IP地址,然后端口什么,还有什么用户名,密码,以及你要指定什么数据库。好提供过去之后,那么。在服务器端啊,它有个进程叫post master这个主进行收到这个请求,因为它一般默认是阻塞在这里啊,大家如果写过这个网络的这个这个啊程序的话,它组在这里,然后又请求过来,他这个接收过来,接收过来之后啊,那要看啊这个用户密码哎,这个时候它会啊fok出啊一个啊后台进程或者叫前台进程啊,这个进程呢。发布出来之后呢,这个进程呢,然后去什么?呃,去连我们的客户端,连客户端的时候,他要验证一下请求过来的这个用户名密码O不OK,那O不OK,这个用户没密码,这个时候他要去读我们的什么这个访问,访问那张表就是那个权限表啊,如果权限表如果没问题的话,那连接就可以连接进来,就可以连进来,如果说你访问的那个表就是那个HB,这个hh BA是吧,你看那表如果说拒掉的话啊。
30:28
那有问题的话,你的账号是有问题的话,或者你这个用户用户名密码有问题的话,那我们用户密码是还有一份这个表里面是吧,权限表里面,那如果说不合规是是呃非法的,那这个时候就会拒掉,就会拒掉。啊,如果说没问题的话,那就连进来就连进来,那么连进来那客户端就可以发是吧,CQL语句到我们的后端数据库啊,那比如说假如说他这个时候发出一个SQL语句是吧,他比如说他要去执行一个这个update的操作是吧?Update啊语句,比如说把一个数据进行修改是吧,比如说把一个值这个A的值改成B是吧?啊那这条C口L,它首先呢,这个C口呢,要进行解析啊解析它丢哪去解析呢?它知道这个共享内存共享啊缓存里面去解析啊解析的时候,当然他要获取它的修改前的数据A,如果修改数据在下的buff里面有的话,OK,直接读出来,那改。
31:21
是吧,当然改的时候呢,它会产生什么。Wa这个日志就是我们修改前啊,修改后的值,AB的值都会放到W里面啊。啊,那。那么我们去这个呃,去执行是吧,如果说A这个值没有的话,这个时候我们还要去读后台数据文件的这个啊,里面的这个磁盘上的数据读到我们的内存啊,需要在buff里面啊,再去改,这个时候呢,改的话会比较慢一些,因为这个时候它数据没在内存里面啊,这个是比较慢。好,那如果说呃,读到内存之后改改的时候呢,它会产生日志,日志会写到这个will啊,叫write ahead log日志优先写啊,或者叫预写日志这个缓存里面OK。
32:07
OK,那么如果说这个时候我发起commit提交,一般我们这个默认自动提交是吧,那写完之后啊提交OK,那它的这个W啊会刷写到哪里去呢?会刷写到这个。嗯。它的这个日志文件啊,Wl log里面,当然同时你去提交的时候,它会把提交的状态的信息写到这个啊,Commit log里面,同时呢,最后会刷到啊。OK。那么当我们这个需的B需要的buff里面的章数据比较多,什么叫章数据比较多呢?因为我们科下去的数据啊,一般来说是写到日志里面的,但是数据库底层啊,它是两份数据,一份是日志数据,一份是我们的数据。啊,一份是我们数据,所以那数据到底怎么写呢?数据一般来比如说它的算法里面,比如说它的数据张块已经有50%或者多少啊,它可以设置,那有很多砖块的时候呢,这个时候就会触发什么呢?触发我们的什么切泡的检查点。
33:13
啊,那这个检查点呢,这个进程啊,就会从这个下到下到buff里面去刷砖块到我们的data发里面去,什么叫砖块呢?也就是你的数据原来A在磁方里面,这个是把A写到写到内存里面A,然后这个是把A改成B的话,那么内存的数据是A。磁盘数据是内存的数据是B,磁盘数据是A的话,这两个数据不一致了,因为你改了之后是内存改善,内存里面改了,所以这个时候就要脏数据,那他们脏数据特别多的时候,我们要把它刷盘啊。那为什么不提交的时候刷呢?如果说提交的时候刷的话,那这个时候呢,它的性能就会比较差,因为我们要什么有IO帮的,就是IO绑在一起批量的去刷,这样的话,因为IO是数据库里面最大的信任问题。那么。
34:00
啊,大家想一下,那如果说呃,那到底到多少张块是吧,那如果说你张块一直不刷的话,那假设这个时候我的数据库clash挂挂掉了,我的服务器挂了之后,那我内存修改的数据全部丢了。丢了,那数据其实不会丢,因为我们有这个wii的这个啊,这个日志的话可以啊,重启的话,它实力恢复的话,可以把刚才丢的数据重新执行一遍,那如果说你的账块很多不刷的话呢,那你数据库起来的时候会非常太慢,因为它什么要去读WL日志,然后进行应用,那时间就比较长了,那读的是读哪呢?读这个文件里面什么检查解,这个检查的数据写在哪里呢?记在我们的呢?康,呃,这个记在我们的这个控制文件里面。啊,控制文件的PG con里面有个检查点的信息,检查点你可以理解就是恢复的起始点。这么去理解啊,这是一条update的语句,这么一个执行整个一个过程啊,当然当然。如果说你开归档,你开了归档什么意思呢?因为我们的W日志啊,它是循环写的,他写第一个,第一个写完之后写第二个第三个啊,那我要让他持久化保存在啊,保存起来归档,那我要做归档叫做归档,那这个时候触发这个归档是吧,写完这个触发归档。
35:18
啊啊,那这归档的好处就在于我后面恢复的时候呢,我可以通过备份加归档啊,这样的话数据可以恢复到另一点啊。呃,当然这里面还有其他一些进程啊,比如说像这个凹凸啊weakn啊,这个这个进程主要用在清理数据的,因为它的数据它修改起来一些数据都放在它的表啊,表里面,它的文件表的文件里面,这样的话有很多修改起来数据有很多前景下太多了,有些我这个数据我不用了,那放在那啊,这个浪费空间也啊降低我的效率,所以呢,我们会有这样的进程去定时去清理啊,这个像马Oracle是没有,因为Oracle马都有按度来实现的啊。
36:01
啊,这是不一样,那还有一些这个统计信息的收集啊,这个主要是为了提升后面社会执行的时候,我我的执行计划是吧,更精确一些,然后我需要有数据字典里面存放的我表的一些这个数据字典,比如说表的行啊的这样一些数据啊。好,那这个其他的啊,比如说写数据是有这个后台进程写写日志,也就是什么这个WL写啊,这是这个啊整个的一个,呃,整体啊,这样一条C执行的一个过程,OK。所以在这个里面,我们啊,可以看到的就是。啊,这样一个整体啊,就这里面非常重要的一个,就是我们的一个,呃。这个过程啊,这里面的过程里面大家啊。把它要调你理解,就是说你要先理解这个整体的啊,这样的一个post grade啊,整体结构的这个图如了之后呢,然后最好呢,就是你通过叭如说执行一个DML操作,然后把整个的过程,你把它理清楚,你把它讲清楚,它的各个功能组件以及逻辑关系,1230讲清楚啊。
37:05
啊,那这样的话,就对这个架构呢,有一定的理解啊,对这个架构一定的理解。好,那刚才提到这个配置文件啊,比如配置文件。那么像pgh BA这个配置文件,这个配置文件主要是我们客户端去访问我们数据库的时候,那么它会通过这个啊相关这个权限的配置来控制我是怎么访问的,比如说我访问这个连接的类型啊,什么数据库用户名啊,用户啊客户端地址认证的方式是密码的还是免密的是吧,还是MD加密的,诶这个地方来控制。啊,这个呢,我就想明天讲安装的时候,然后给大家去去解读这个文件。那post con figure这个呢,实相当就是啊,数据库的一个什么参数文件啊,这个参数文件用在我们启动。这个possible c的时候呢,那他要读这个参数文件,他要去什么分配内存,派新进程。
38:03
啊,这里面参数文件参数名等于一个值啊。这里面参数文件还是很多,我们通过啊这个修这个命令。啊修二这个命令啊,就要这个命令,然后这个这个命令。啊去啊去,可以看到还有一个possibly c or to config。这个呢?这个呢是我们啊动态的去修改啊,我们动态修改啊,那么动态修改这个这个这个参数啊。嗯。你改完之后,它可以持久化到这个里面啊。用out STEM这个命令啊去执行啊,它就会直接就把新的值写到这个里面,那下次我重启数据库也好,那么他最后以这个啊,Possibly auto config这个为主啊,最好还是要覆盖到啊上面这个参数上面去啊这几个大家先了解一下有这么几个啊配置文件。
39:00
啊,就这配置文件。OK。好,这是这个,呃,整体的一个架构啊,大家有一定的理解了吧啊。好一定理解之后,那我们啊。来看一下这个整体架构里面,我们把它拆分出来去看啊,我们来先来看一下这个抛这个数据库实例里面非常非常重要的一块就是内存结构。那内存结构,刚才其实我们讲了内存啊,它分为两大块,一块是共享内存,一块是私有内存,我们来看一下。共享内存啊,最主要的我列了两个参数文件,就是我们在。呃,配置这个参数里面这两个参数要关注一下,一个跟性息相关的需buff啊。这个参数主要是存放我们啊,缓存我们的数据,数据库的数据文件啊。因为我们说数据库,我要提高性能的话,我能不能尽量把我们要修改或者读取的数据呢,都放在这个需的buff里面呢?啊,最好是放在这个里面。
40:07
所以这个内存啊,越大越好,也就是我们这个需要的buffer,最好把我们数据库,整个数据库的数据全部放到这个里面是最好的,是最好的,为什么这么说,所以我们在。真正我们在配置数据库的时候,我们要考虑我们这个数据库底层的物理文件,它到底有多少多少大,比如说是100G还是200G,是不是,如果说你考虑啊,我的这个数据库的容量就是200G的话,OK,那我买一个啊,512G内存的就够了。就够了是吧?OK,如果说你的数据是好几个T,如果你的数据好几个T的话,那你的需要了八分呢,如果你一共啊,就设一个256G的话,OK,那这数据只能缓存什么整个一个G的什么25%,那75%是命中不了,都要去读磁盘,那这个时候呢,它的性能会比较差。
41:01
所以呢,我们这个地方要把它配的越大越好,当然那个地方要要要要考虑的一点就是你不能把所有的内存全配进去。啊,不能把所有的内存都配进去,你比如说你现在有一个51012G的这个啊,这样一个一块物理内存,一个内存条,对吧,那你这个地方能配多少是吧?诶他推荐说是1/4的物理内存,也就是把这个实例配成啊128个G。那么到底这样的推荐O不OK是不是,到底是合不合理,那我就说你要看你的到底你的数据库的数据文件到底有多大。如果说你的数据文件是吧,你比较大,比如说200G,那你配128G就不合适了,所以这里它这里只是个推介值,推介值。那么为什么我们不把它配到最大的,比如配个400G呢?啊,可能也可以这么配是吧,也可以这么配,配大一些。那我们一定要啊,配的越大越好,当然你要预留出一些空间出来,一些内存出来用作什么呢?第一个呢,你要留给什么操作系统用,比如说操作系统我要留十个G的数据啊,十个G的内存出来一个操作系统就是我们的Linux。
42:14
啊,或者我们的Windows使用。另外的话,你要留一部分类型出来,什么做什么,我们的连接用的啊,大家刚才啊,看了那个架构图,就说我们的用客户端去连我们的数据库,那么他就在会在数据库端会起一个什么一个PID,一个进程出来,那么这个进程呢,它需要消耗内程。那么这个内存呢?它是属于私有的一个连接一个,那如果说一个连接啊,默认比如说啊五兆。一般都有这样的算法经济值的啊,比如说你像Linux里面可能五到十兆啊,我举个例子啊,为什么这么说呢?就是你一个连接上来之后,这个连接里面这个操作可能有排序,可能有join都放在这个内存里面,是有内存里面,它的连接时间越长,它的内存越来越大啊,所以如果说你有1000个连接上来,你有1000个连接上来之后,这个时候我一个连接就是五兆的话,大家算一下多少。
43:11
是多少?5000兆是吧,5000兆。啊,1000个连接啊。那就要占什么,占个五个G内存连接点内存是吧,那数据库如果说你设了1万的话,那么它连接平均就要50个G了,对不对,所以你要。把你连接的内存也要考虑进去啊,而不要全部用光啊,不要全部用光,所以呢,这里只是个推介值,OK,那么它的默认值是比较小的,是128兆,这个太小了,如果说大家在装的时候,很多同学可能没有经验啊是吧,装是装起来用了,诶发现这个也不配直接上线了,诶发现这个数据库特别慢啊,他可能默认用的什么那什么。128G,你可以通过命令修。啊,修的B分号回车,你看到是128兆啊,一百十八兆,那这个就太小了是吧,默认太小啊。
44:04
然后它每个这个buff是吧,它每个这个buff里面的每个buff,我们叫page是吧叶啊。它是默认是8K啊,通过block size去看。啊,这是这个要是打。那么对于这个w buffer这个呢,这个倒不用设太大啊,这个不用设太大啊,因为它是缓存我们的这个W的啊,比如说我们做了这个操作,他要把修改,修改的一些数据呢,先写到这个WL缓存里面,最后他要写到我们的WL的日志文件做什么做我们这个持久化用的啊,做恢复用的。啊,这个不用设太大啊,这不啊,这是这两个参数比较重要啊,这个内存里面啊,我们只讲先了解这两个参数。那么。那么那么私有的内存啊,就是我们一个连接上来之后,我一个连接上来之后,那我们要去操作是吧?哎,那它有哪几个表啊,一个是我们临时八。
45:03
这个临时八福呢,一般是指啥呢?比如说我们的。这两个表情交易。这因为在数据库里面两个表进行连接的话,它要把产生这个表连接的这个值啊,会放到我们的啊,第三个表里面,就临时表里面一般会放到这个啊,临时八伏里面。那么。那么当然我们这个表交易完之后,这个任务执行完之后,这个临时空间就可以释放出来啊,所以呢,它是属于我们私有的这种会化集的啊,这样的一个内存。啊是一个绘画,他用这个内存是多少。呃,因为绘画我们也可以动态去改是吧,还有一个叫work work memory,这个呢,主要是用在我们的排序,因为我们经常去取数据的时候,我们要进行什么auto对吧?啊。或者做一些这个。啊哈希的操作啊,这个呢是放在这个workman里啊,这个我们之前啊做这个优化确实是个呃,会提升效率,比如说我们经常做auTo Bad的时候,发现这个啊,你的这个这个设太小了啊,设太小了,然后我把它调大,那这个时候你的这个这个绘画上面执行的这个C就比较快啊,就比较快,所以有的时候我们调CQ的时候,可能S方面我们调的已经很优化了,但是你这个。
46:17
这个参数没调的啊,特别的话,因为如果说你这个比较小的话啊,它做auTo Bad的话,排序的话比较慢的原因在于什么呢?就是说它实际上就是说你大家想一下你一个一块内存是吧,一块内存比如说一块内存,我就这个是十六十六兆了,对吧,十兆。那么用16兆的这样一个内存去排的话,比如说我排呃160,呃60兆的这个表的话,数据的话,就是表里面的磁盘里面的数据,我要放在这个十内照里面去排的话,那么它排的这个这个就比较慢了,怎么慢呢?是用什么样的算法呢?叫排序归并啊,就是说我把这个文件啊切成十份啊,剩十份第一份。
47:00
啊,第一第一个第一批啊。啊,第一批啊,第一批第一批16兆好,然后放到内存里排,重新让它排起来啊,放到一个文件里面啊,然后再切第二个水流照再去排,排完之后内存再写到我们的临时的这个盘里面去啊,临时的临时的这个这个。啊,这个比临临时的这个八伏零是嘛,是吧,我临临时的这个啊,缓存临时缓存,然后再依次啊,搞16个啊搞十个啊16兆的小文件,然后在每个16兆的话,都是从小到大,然后我要做做一个整体的话,那么我要在每个16兆十个里面,十个的16兆里面取个最小值,取一行取一行取一行取一行取一行啊然后把再把它放到这个十例里面去排。那一次再去再去再再写,来回折腾两次,然后就把整个再排完,那这个呢,那如果说我把这个参数直接设为160兆,一次性搞定吧,我一下子把这个主的主的直接一排,内存排完之后直接写就OK了,就显示出来,然后返回出就OK了,就搞定了是吧,就就心里就跟提前十几倍了啊,所以这个时候呢,我们有的时候我们要看啊,当然有很多同学说,哎,那我把这个说大点行不行,那也那也不行。
48:12
因为这是个私有的内存的这个这个大小,如果说我我设的特别大,我设160兆,那这个时候比如说我有1000个会话上来都要排序的话,那1000个人每个人160兆,这多少了。是吧?那这个时候你要需要啊,1000个的话,你要160兆的这个这个空间了是吧,做排序,那这个就可能爆掉了内存,所以这个呢,也不能设太大,也不能设太小,所以有的时候我们要作为DBA啊叫什么进行调试啊,进行调试,OKOK,还有一个维护,嗯,这个内存这一块了,这一块内存呢,主要用作一呢,就是我们有的时候要创建索引啊,这个是吧,或者我们去这个呃,创建表达一些那个什么主主外界啊,还有这个微就清楚数据啊,那肯定会用到这个啊这块内存。啊,就那些这是私有的,这私有的OK。
49:04
好,那内存大家了解了几个啊,就是因为时间关系啊,就企业里面还有好多这个这个对应的这个参数是吧,我们大家呢,可以去看这个官方文档,然后我们再看一下这个实例里面这个进程。那进程呢,是比较多啊是吧,进程。那进程我们可以通过一个命令啊,就是减EF的命令来看一下这个post Grace这个命令,在这个命令里面我们去找到一个什么呢?找到一个啊。主程序啊是吧,我们主进程这个主进程里面,哎,比如说它附近是一的这个比较关注这个一的,那么对应的这个进程,这个进程就是我们的,我们所谓的什么ma possibly must这个进程,也就是我们从这里可以看到它是通过呃,这个B下面这个这个执行程序执行出来了,对吧。那么我们看到这个这个PID,它对应的父亲是一,OK,那我们再看29289的话,这个进程它如果作为负进程有这么多,那说明什么意思啊,那前面这个就是它的子进程。
50:10
也就是说这个29289,它派生出这些进程,这些进程就是我们架构图里面看到的啊,这这这些对吧。检查检查点啊,写数据的,写日志的啊,清除清理清理数据的啊,数据统计信息的是吧,这些这些都是还有我们。这个。主进程啊,它还可以放出什么呢,我们客户端连进来的。就是我们接待客户端的这个进程,所以从这里也可以看到啊,他的这个进程号。啊,这好啊。啊,这是这个进程啊,进程等会我们可以,呃,再去执去执行一下,等我们啊,等会我们去看。那。那我们。
51:00
可以,呃,看到我的,我这边有环境的,我这边有个环境,提供了一个环境啊,就是类似于刚才那个命令嘛,就。DFTI。A post。Big。那这个呢,就是这个环境里面这个呢,在一的这个地方呢,它对应的这个呢,啊,然后这个就是我们的啊post master,然后他呢,呃,作为一个父亲是吧,父亲这个这个写在这个后面的拿这个子呃儿子精神是吧,那他这里有这些吧。啊,这两位还扣点上来的一个。那你比如说我现在有有个客户端你在这里是吧,那有个客户端你在这里,OK,那客户端到底是啥呢?那我们可以看到这里肯定有个客户。我这里是不是有个客户端里在这里OK,那你比如说那我我把这个客户端比如说K掉是吧,K掉,那你K掉的话,你就可以直接这样K掉解九啊,那这样的话,这个那个那个呃,那个那个就可能就断掉了,比如说我直接这样干掉对吧,那我这里的连上来这个客户端可能就不能去执行这些命令了,比如说我去执行一下。
52:18
啊,那执的就会报错了是吧,把它K掉了,所以说他这个连上来后台就会有啊有这样的一个。啊,这直可以看到是吧,这个时候我我再去看的话,我客户端连接的这个。好。好,那这个连接的过程啊。是这么一个过程啊,就是我们的客户端是吧,发起一个请求啊,通过TC pip这样一个请求,那这个呃。Post masterster你可以理解它是一个监听啊进程啊,它可以监听这个客户端的一个请求,他监听到请求之后啊,那么呃,然后呢,他会接收这个请求是通过啊,我们刚才讲的那个什么那个HBA那个conig那个是吧。
53:09
那个配置文件,如果那个啊是OK的,那就连进来是吧,连进来之后对他这个身份证区别就是用户名密码O不OK啊,如果OK的话,那我就放出一个什么。一个直径群,那就给他分配一个PID啊,这个这个直定群发出来之后,那么啊,他就跟客户端进行连接,那客户端后面就直接找这个post gra,就不会找这个post master吧,那我们这个新的版本里面就呃就都叫这个啊post gra是吧,就不叫post master找其他版本。啊,这么一个连接,呃,那这个呢,连接呢就更详细一些,就是说哎,我这个客户我的应用服务器,我要连接数据库是吧?是连post master这个进程,就是我们刚才看到那个进程,那连上来之后,如果OK合法的话,那我fo出一个什么一个紫禁程出来啊,那这样的话,如果是合法紫禁程出来之后,那我的应用就直接找这个指定程,然后上面做一些什么S的操作是吧,那操作过程当中,那我如果说我要去读数据,那我就读这个需的B分的数据是吧,我要改数据是到需buff里面去改数据,如果说下了buff的数据没有的话,OK,那我要还要什么去通过这个啊进程去读读啊,通过data方去读进来是吧,读进来读进来之后,然后再改,改完之后,如果是解答题发生解答题的时候,我这个。
54:24
这个right对吧,这刷到这的发区域啊,当然我在修改的过程当中,我才能经常写到这个,呃,Wl buff里面,然后。他提交的时候呢,它会写到这个啊,这个WL里面去啊,以前叫叉log里面一切啊,然后如果说这个呃。WL,这个日志是做归档,那归档会启动归档这个进程呢,他会把这个日志刷到我们的归档的目的地去。这是这样一个过程。好好,那我们再来啊,看一下这个物理的,好,那我们先来啊,发第二轮啊,第二轮的奖品啊,看大家里面啊,中这个第二轮奖啊,刚才那个。
55:07
小企鹅刚才有应该有,有谁中啊,有谁中了小企鹅了。看一下啊,来个第二个奖品,给大一分钟的时间啊,这个是CSDN的程序员杂志,有三份啊,大家赶紧抽。我看一下这里面有没有啥问题。我看到有个问题说这个,嗯,Workman是不是设置一个值属于的些申请使用望和示范。这个是私有的。这个你设完之后,比如说你呃设的话这样子,你比如说你全局设,设好之后,那所有的会话连接就按照你这个新新的啊,这个设好的值,比如说原来默认是16兆,那每个绘画点上呢,那如果说这个时候要做排序的话,最大可以达到16兆的。这个排序就是说,比如说那那当然如果是它是十兆的话,那肯定是满足,那如果说他32兆的时,这个时最大给你分配16兆给他,如果空间有的话,那他要排两次啊,那当然我也可以在绘画级别把它改大一些,比如呃,Set是吧,这个值把它改成这个一百六对吧,也是可以改,当然这个改完之后,这个值如果退出绘画就释放掉了啊这么去理解。
56:19
啊,讲的到底是内存还是存储啊,Workman是吧,这是内存。内存的排序。啊,内存的排序。不是越大越好嘛,但当然是越大越好,对吧,内存数据我最好都把它缓存起来,都把它缓存,但是我刚才讲了,你操作系统要不要用。是吧,你后台进程要不要用。你的连接进程要不要用,你把它全部设完了之后,那它没有连,没有内连接内存的话,所以为什么这个数据库里面有一个叫max connection这个参数来控制连接数的,因为你你如果说连接数设的特别大的时候,很多人都连上来,那每个连接都可能需要一定的内存,这个时候要连接要内存,这个时候你把后台的这个需要的八核设很大的时候,这个时候内存就OM了。
57:07
没了是吧,抢完了是吧,那你这个这个太慢了,太慢了,OKOK啊好,那大家啊,我最后还有一个,还有一个那个礼品是吧,那我们。到九点多,09:10在在那一个是,另外一个是。啊,等会再给大家解密啊,我们再继续看,我们来看一下这个啊,我们的核心里面,我们看看我们的,呃,物理结构啊,我们在深层次看一下物理结构,那么这个物理结构啊,物理结构内容比较多啊,然后因为刚才我们看到的整个整体我们看完了是吧,整体看完,然后一条C口怎么运行,我们也大概理解了,然后我们对内存和进程这种动态的一面理解,但是实际上核心里面非常非常重要,大家能看得到摸得着呢,可能可能物理结构里面。那么物理结构里面,我们最关心的就是我的数据库到底是怎么存放的,到底有哪些文件,这个是很多关系,特别是我们刚学这个数据库的时候,很想把它搞清楚,想很想爬到数据库里面去看看,到底这个数据是怎么存的,那其实这个数据库也提供了很多很多工具,让大家去理解这些东西。
58:13
啊,一些这些东西,那么我们在这里可以看到啊,数据库底层啊,它有数据文件,控制文件,日志文件,归档文件等等这样的文件。那么这个文件里面可能对于我们来说,我们比较关心的,对,特别是我们开发比较关心的,比如说我们的表,我创建一张表,这个表。表,其实真正去理解表的时候,有两层含义,从逻辑上来理解这个表的时候,表就是表明表里面的什么列。以及类型。那表的另一层的含义呢,就是物理层的话,就是它存储的底层的文件,我们把它叫什么segment。Table,那还有这个to,这个呢,是这个指的是这种,如果这个表里面这一行数据特别大,比如说他的某个字段特别大一个。
59:06
一放不下去了是吧,一个18K放不下去了,这个时候他肯定要用外力,哎这种大的。啊,所以在这Oracle里面什么叫行迁移是吧,行列间。那在这个里面通过这样的技术来实现,还有索引序列等等啊这样的一些对象。那么呃,我们去,呃看这个这样的环境里面,我们去看到底我有哪些啊,可以通过一个命令,比如说o I two。那么在这个命令里面,我们简单的去看到了,就是说这个表里的数据是吧,诶有模板零模板一,还有我们的啊Grace,还有我们DB下节ten的DB下节啊云贝。那么像这个模板。模板默认创建好之后,它有两个模板啊,一个零,因为一啊零这个模板我们最好不要改它是个,呃,它这个最好不要去改它,因为它是最基础的,最干净的一个。
60:12
模板,那么我们一般创建的话,通过TYPE1啊,对着TYPE1去改啊。但是你用TEMP1去改呢,这个它不能去改字符集啊,一般我们字符集也不会去改是吧?啊,那如果你要去改字符集的话呢,你用这个模板零啊,所以这个啊,然后我们默认的话,我们用啊TYPE1啊TYPE1对应的这个OID就是一啊。你啊,你可以把这个名看到这些名字,这些文件的名字看到它这就是个什么database name,它这里标注的也是database name啊,然后它这些都作为一个默认的表空接。那么什么叫默认的表空间呢?这个,然后对应的这个每个database都有一个OID,诶这个里面就很有意思,实际上我们在安装的时候啊,明天我会讲到安装的时候我们会定义一个。
61:04
这个PG get这个变量啊,那么PG这个变量里面,我基本上会把这个数据放在这个这个变量这个目录下面,那么这目录里面啊,我们CD过去这个o PT post PT CQ,呃,贝这个目录里面,这个目录里面有个非常重要的目录叫贝斯目录。这个base目录啊,这个base目录怎么去理解这个base目录呢?这个base就我们基本的默认的。这个数据库的数据啊,都放在这个杯里面啊,这个杯里面啊。那么这个杯四里面,你进去之后,我们到里面去看,我们可以看到你看啊,这里有1139113892,然后还有两个这个就刚才我们看到的啊这个值,也就是说我们通过最基本的命令哦,O ID two m的话,能看到base里面这几个目录,这个目录是我们比较啊非常非常重要的这个目录。
62:06
那么这几个目录你要去看的话,可也可以通过命令。啊,通过命令的方式。那么通过命令的方式,比如说我们去看一下我们的O,呃OID,然后。Base name啊G这样用这个命令的话也可以,刚才我们看到我们什么base下面什么。OIDID就是一个啊,数据库的一个唯一的一个ID号,就人的一个身份证一样的,然后每个数据库的名字啊,每个数据库的名字知道吧,这这两后面这两个是我直接的啊,定了一个编号啊,从这里可以看到。啊,这个可以看到。好,这是这一个文件啊。那么那如果说呃,我想看一下这个post Grace下面,哎,对应的我比较关心的,我现在看到文件,但是它到底下面有哪些表,是不是我想看到底哪些表,呃,哪些表。
63:06
有哪些表的话,我们要去看什么呢?看这个。Big。看看这个啊,看这个表,看这个表PG class这个表啊,能看出来我我到底有哪些啊,有哪些啊。哎,我们比如说我要看表的ID号,然后表里面它这个表是。啊,有哪些honor是吧,它属于哪个用户的啊,也属于哪个用户的,然后对应的。表的名字,我看几个吧。嗯,然后from PG。
64:06
呃,这这么多啊。当然这个里面你还可以在。嗯。看一下文件。好,那这个通通过这个文件,我们再区别这个文件下面有哪些表,这个文件就是我们刚才看到啊,比较多的是吧,比较多的比如说诶。啊,对应的刚才我们看到的那几个文件,我们通过这个文件来过滤啊,那这个文件来过滤啊,所以在这里呢,就是。看起来也不是特别清晰是吧,这个文件啊。
65:04
啊,这个文件指的是要这个base下面啊到base下面,Base下面一下面,比如说这个下面,哎,这些下面就是对应的文件,就是我们的final final。啊,反倒的这个基本里面就你可以理解就是存放我们的主要是什么呢?就是我们的这个啊。数据库的默认的一些存储啊,放在这个下面的,放这个下面,那么我们其实在这个里面啊,退退出来。呃,在这个里面还有一个,呃,叫global啊,就是base,存放我们数据库的一些默认的表控,就比如说我们自建了一些业务是吧,我们要放在这个里面啊,然后global global主要是存放了我们。这个数据库全局的啊,系统表格全局控制文件啊,这里面啊这么多表是吧,表都是用这样的一个,呃,表的对象OID,或者说这个find node这样的名字命名,这两个表的这个OID和这个文件这个no的是目认是一样的,什么时候不一样的,当你的表被这个check的表它就会不一样。
66:13
那这里面还有这个控制文件。这个控制文件主要是控制文件是二进制的,你直接看是看不了的,但是他也提供了一种这个命令可以去看,叫PG。CT啊data啊,这个命令,那这个命令里面可以看到啊,我们这个文件啊,就是8192的这个字节的这个文件里面有这么些内容。那么在这么多内容里面,我们比较关心的是什么呢?啊,这个里面我们如果说要对一个数据库进行恢复的话,那这里面这个检查点,你从哪个检查点开始恢复,OK,我要去找什么。吕度的位置,找到这个吕度的位置啊,找到吕度的位置啊,那从这个地方开始恢复,那么吕度这个位置,实际上把它这个值啊转换出来就是这个值,就是我要从这个文件下面去找,在这个文件去找,那么它其实也提供了呃,这样的一些这个啊命令啊,让你去去去啊去找啊去找这是这个。
67:15
啊,我们可以看到的那些文件,当然这里面还有很多啊,这个大家有兴趣可以去解读一下这个啊,控制文件啊控制文件,嗯。你比如说像他这种啊这个。这个值啊,这个值,这个值就是我们恢复用的,那实际上在数据库里面非常专业的一个词叫什么呢?叫l SM log second number啊,那如果说我想找一下我我这个数据库当前的这个日志到底写在哪里了,其实也可以去给他比你比对一下,比如说通过这个possibility里面提供的,比如说PG啊,当前的点wi,然后in。
68:02
那其实呃,这这一个值啊,零杠啊,然后这这个值,那我们看到这个控制稳机里面啊,就是这个啊,尾号是8D38啊对应的这里是叫8D18,那么为什么这个E8 e8肯定是大于这个,呃,大于这个三八,诶那。这个已经持久化到控制文件里面去了,那下次如果说我的数据库库然就宕机了啊,宕机之后呢,那么它就会读这个值开始恢复。因为这个数据库啊,一直在变化,所以它的这个当前的这个IM呢,它比较新一些啊,但恢复的时候呢,它是读这个控制文件去恢复的,这一点大家记到,其实一定要把这个数据库里面这个检查点啊,这个地方搞清楚啊,这是比较重要。那么呃,对于比如说像这个内容,我想把它单出来看一下,诶这个地方可能大家会比较有兴趣说,哎,那我想看看,比如说到底它执行的时候,这个操作命令到底这个里面什么值是吧,那其实这个数据库它也有一些这个这个。
69:02
啊,一些工具提供我们去解读它这个里面的执行的这个,呃,这个re的日志,因为这个wii就是讲数据库里面叫re嘛,就这么一个重做日志嘛,是吧,那么这个日志,你比如说我这个,比如说我这个时候,比如说让他发生一个什么这个泡的检查,你这个操作对不对,我发现一个检查的操作。啊,他必须要以这个超级管理员去操作,就是超级管理,就是要用我们要借的那个那个呃,我们要借的那个那个那个用户去操作才能行,我用为我用的是一个什么普通用户,普通用户他做不了这个叫号的操作,那么呃。Post post please大写U啊,Post release啊,用这个这样一个用户操作啊,比如说那我重新执行一下,比如说我当前我查一下我的这个,嗯,S写这个位置是吧,好,那我比如说我发现一个一个命令随便写一个,比如说我让他去读一个账块这个point,好check point发现了之后,然后我再去看一下我的这个日志的这个检查的信息。
70:04
大家看一下它这个是变了,从这个尾号是一八到16进制的这个。DE8到ED0肯定是变大了吧,对不对,那说明这个中间肯定做了操作了,它的日志变了变大了啊,那么这个日志里面变大,这个日志到底做了什么操作是吧?到底做了什么操作。啊,到底做了什么操作。哎,那我要从这个地方开始,到这个地方结束,去找这个日志,那数据库里面提供了,实际上在这个里面,在这个在我们这个数据目录下面,就是我们的主数据目录下面,我们有一个什么呢?有一个PGW,哎,在这个里面,我们日志是写在这个地方,让涛涛的那个命令他往这个地方写了,往这个地方去写了。啊,然后这个文件你可以通过呃,他提供的命令给他解读出来,比如说我想解读一下这个文件到底写在哪里,对不对,那其实这个数据库啊,它也提供了这样的命令啊,可以去解读。
71:09
我用这个名。是吧,他也可以去解读啊,比如说我通过呃,Name。我。比如说我把我把那个,呃那个我想把那个日志啊解读一下,看他在哪个文件下面。到wl five。Upset。然后。啊,把这个写进去,比如说我看看这个在哪里。
72:11
啊,有单引号。啊,就是把这个我我想去让他,呃,看一下这个文件在哪,你看是吧,在这个74这个地方,OK,那后面这个第74这这个第几个这个字节是吧是吧,然后你可以看到它是就在。啊,就在这个74是吧,这个这个里面啊,这个计量在这个里面,那就可以看到,包括这个呃,你。然后这个是哪里的话,你也可以通过这个来解读出来啊,那如果说我刚才把那个切割的那个操作这两个,其实你的操作就是开始从这里开始,然后发现了这个切割炮的命令,包括包括我们d Di的操作,然后再再查一下它这个呃,日志位置,把这两个点的操作日志给解出来的话,那它其实也是提供一个啊命令可以去解的啊,去去去解的啊,什么命令叫PG,这个waal单口,然后干P,嗯。
73:09
呃,PGPGWL单口。然后对应的这个路径下面。啊,在下面,然后杠S-S就开始start start从哪开始呢?从。嗯。从这个地方开始,OKOK。啊,然后解en的的话,那我就。那这样的话,就把我这两个两点之间所产生的读劳日志给解出来啊,这个就是可以去解读,就如果说你要自己写一个程序去解读这个数据啊,它是可以解出来,那这个数据就是我啊刚才解出来的数据,那这个里面你可以去找一下啊,有没有啊发生过这个上面这个这发生过什么check meaning令的操作是吧,这边就是有啊再去check的操作啊,对这个度的一个操作啊。
74:08
啊,包括这里是什么OID是吧,你可以看到自己的对象去对比一下啊,这是这个。日志数据啊,这数据好。啊。好,那我们继续PPT里面,PPT里面我们不要啊,关这几个点啊,一个base的要搞清楚,它是我们整个数据库的默默默认的啊,Global里面有控制文件,控制文件件了,非常重要的一些啊,关键点,比如说数据库的这个ID号啊。然后呢,里面有什么检查点的信息等等啊。然后这个W志是吧,这个日志非常非常重要,那我们刚才通过命令来解读解读了一下,那么这些目录日志里面啊,不管是这个base啊,或者说这个WL是吧,那这些是非常非常重要的,刚才讲了,那么我们表,我们表的数据啊,我们叫表的物理啊,这个段叫segment啊,这个所有的数据库都这么命名的啊,大家以后看到segment其实就表,就表真正存的底层数据库,我们叫segment。那么在。
75:08
PG面。啊,在PG里面,呃,Segment可以包括很多,包括其他数据库,像表啊,索引啊,临时段啊,按度啊是吧,我回滚段啊都是可以要叫segment,那那么这个呃在这个里面,如果说我们在PG里面,它的文件名就是呃用来表示啊,就刚才我们看的那个。啊,文件啊这个。就是在我们database后面存放的那个ID号,就是啊,比如说DATABASE1对应的模板就TEMP1是吧,Database name是吧,那它后面的这个编号就是我们的,也叫什么,我们的对象I,就是我们对应的表达IOK,大家这么去理解,那么当我的一个表如果说呃,超过一个G啊,那他这个这个数据啊,就会进行什么。
76:00
啊,就会进行分裂,就分裂啊。好,那我看看这个09:10了,这么快这个时间过的啊,我讲进去这个这个时间过得太快了,然后呢,我去再发发一波发一波这个。这个奖品。啊,再等会吧,九点09:20是吧,嗯,到09:20分发啊,然后这个表它会变到一个级的时候,它会变大,它会变大啊,就变到一个级的时候,它会进行分啊find not1啊这个这个这样这样这样变。那么对这个怎么去理解是吧,这样怎么去理解这个东西。实际上这个我们如果说我们等会我们通过一个实验来看吧,我们通过一个实验去看啊,就是我创建一个表,然后呢,这个表让它变大之后,那么这个文件就会变多啊,我们来先看一个例子吧,这个理论比较就看起来比较,我们来看一下,就是我们在。这个目录下面,我们看贝斯下面啊,我们数据一般放在杯下面,是不是放在杯下面,好好,那我比如说我。
77:05
呃,我用一个。啊,我用一个,比如说呃,我们来看一下我整个数据库有几个啊,我有这么几个数据库,那我连到,比如说我连到我的那个云被DBDB云被下面,哎,那通过杠C,然后DB0倍,OK,那么连进去之后呢,那比如说我在这里面创建一个大的表,我们来看看我怎么来区分这个这个大表,那你比如说我现在创建一张啊一张表叭如说T。因背一哎这个表。呃,I我。专业这么一张表是吧,专这么表这张表,然后我插入一个比较大的数据,比如说我插入一个超过,呃,比如说我大家看一下,我借这么一张表,T下云边一这张表,那么注意在借的时候这张表占占空间呢,通过这个面积可以看啊PG relax。
78:06
然后size命令,诶这个命令可以看这个。我记得这张表占了多少空间。网名。它其实是每占空接的OK,每占空间的啊,每占空间的OKOK好,因为数据库啊,这个为了更好的去节省空间,它一个空表,你没查到数据,他不会给你分配一个空间,因为分配空间最小是这个区嘛,对吧,他不会给你分配好,那这个时候比如说我操作一个什么操作呢,我插一个呃,2000万行数据进去,对吧,2000万行数据。这里。一啊,然后来,然后我用一个函数就是。我。一到2000万。234678。
79:02
好,去观看数据。嗯。我随机。好,执行这么一个操作,OK,那么这个操作下去之后呢,就会会产生大量的数据啊,产生大量的数据,OK。那么对于这个数据啊,对这个数据啊,就差太多了个十百七万十万百万千万两千万啊。2000万数据。好2000万数据,那么这个时候你去看这个数据的话,那可能就不是零了,这个数据就比较大了,哎,这个数据比较大了,OK。对吧,那是数据变这么大,1.3个G对不对,1.3个G啊,1.3个G好。
80:01
那么对于这个数据啊,到底在哪里,就是说它这个数据到底在哪里,哎,可以通过一个命令可以把它导出来,通过这个PGPG,这里面提供了很多这个函数,这个大家用多了可能就不用记啊,这个用多了你肯定就知道five pass这个就如果。开始不知道的话,其实查文档就可以了,你你你对刚才那个一是吧,啊这个表,哎,这个表的。PG下划线。啊,不是这个。Five。写错了是吧。
81:06
Fine。T。刚才我接了一个表啊,接了这个表。T,下一点呗。文件路径pass。这。出来。断掉了这个链接,这个链接断掉了,这个链接断掉了,这个链接断掉了,嗯,可能刚才操作有点大,我换一个连接,换一个连接,换一个窗口。我换一个窗口,你这个理解行不行。
82:02
这个笔记刚才也断掉了,重新理一下退出来。刚才执行的时候可能比较大,他这个嗯。然后呃,有一个新的窗口进去吧,命令我觉得应该不会错的。PG。PG。啊,写错了。Relation,啊,这个写错了,不好意思,这个啊接反了这个,那我们可以看到它这个刚才我们创建了一个多G的数据啊,就是写在这个地方,那我们通过这个路径可以找到是吧?16401这个什么呢?这个是我们的database ID database ID就是我们的什么DB云贝这个I这个这个这个对应的这个呃,Database ID,然后下面就是我们的这个node,就是我们的对象文件对象就是我T象就云倍一,诶那我们可以到。这个看一下它如果产生一个一个及以上的,它这个数据是怎么样,后面16401下面啊16433OK好,那我们到呃,下面可以看到16401是一个四是吧,16401。
83:11
1040是个德杯啊,就是我们贝下面就是我们德杯啊,就DB云杯啊,然后这下面有很多是吧,那这个里面有16433吧,是吧,是16433,我们可以看一下。16433。啊,103我们可以搜一下啊,这不多,我们也可以不用,你看10433有有有什么有有两个,为什么它超过一个级了,你看这是一个级吧,超过一个G就是B第二个了,啊第二个,然后下面还多出一个FSM,这个是指的空写的空间的一个指针,映射指针就是什么意思呢?当我们要往这个文件里面插入数据的时候,这个文件底层就是一个个什么,一个个快啊,一个个快,呃,那哪些是空空空的,那我这个映射里面就告诉你往哪个地方去插,哎,VM是什么呢?就是可借的啊,这个映射或者说我们要去清除,用V去清楚这里面的一些过期的数据,通过这个映射表里面去找,那这样的很快速的提升,我们扫描数据的时候就是啊,不清的数据那我去读是吧,要清的数据我通过这个去清除。
84:14
啊,这个呢,就是我们啊看到的这样一个一个数据,OKOK好。呃,对于这个快是吧,快啊这种大小啊,都是这个8K啊,大家可以通过参数可以去去看啊,这个就不解读了,然后对于这个行啊,这个里面的这个刚才我们看了是吧?通过这个嗯,可以看到啊,我里有啊下面是我们定的database的ID号,Database下面就是我们的啊啊OID也就是我们的final node就是文件ID,然后文件如果超一个表超过一个G的就会啊呃,这个呃,Final啊一是吧,那编号后面就会点1.2吧,这样下去,然后还有这个啊FSM和VM是吧,这两个。这样一个一个。啊,这是这个。
85:01
好,那我们再来发一波奖品啊,大家可能听起来这个确实比较枯燥啊,这个我们福利还是要正常啊,大家来抽第二个啊,来啊,给大家抽这个CSDN的定制T恤三份啊,这个我看群里面啊,有人说这个抽到有些定没抽到是吧?来看看谁中奖了。看谁中奖啊,刚才有人告诉我了,这个我写错了,不好意思。来。假如,呃,假如十个用户连接排序是16兆的,共共用16兆,还是每个每个每个私有的就是每个啊。啊。这个workman啊,就是什么叫私有的,私有的值是你每个人是一样的啊,所以这个不能设太大啊,你说16兆的话,就是每个人啊,十个人就是160兆好不好啊,这个要理解这个。
86:00
嗯,谁收到了。啊,谁知到了。有没人车到?可以发出来,抽到同学可以发出来,抽到同学可以发出来,抽到同学可以发出来,OK。OK。责任就可以发出来。到同学可以发出来。我来看看。嗯。哪个同学收到了?抽不到是吧。抽不到这么难吗?那我直接抽到了,OK,那看来这个人比较多啊,今天这个。好,那没关系啊,明天我们继续抽啊,明天我们我明天我继续讲啊,明天我去讲,然后我们再来看,我们还没讲完啊,啊对于这些目录呢,我不再去一一去讲了,因为我觉得这些东西啊,其实都是固定的,对物理空间里面这些东西都固定的,大家呢,根据文档,然后啊去对着去看就可以了,只要你这个东西用多啊,你就有感觉了啊,不需要去记啊,不需要去记这个我不一一去解读这些概念啊,像物理的OID啊,Find no啊什么,然后他的关系啊这种我觉得没有必要去,只要你操作,你了解了之后呢,做一些实验操作,然后再验证,然后看看你理解的这个东西跟你的实际的是不是一致的啊,就你想的你理解的跟你是不一致的,然后对啊,这个如果更细化的话,大家除了了解就是我创建这张表,然后表底层这个文件怎么存的是吧,然后放在我们哪里,比如base是存放我们的数据的,然后这个。
87:41
啊,我们的global是吧,请方我们全局的控制文件啊这种是吧,还有其他一些文件放在外面,那么对于这个大家真的去理解这个底层数据是怎么存的,大家有兴趣可以去解这个快的格式。实际上这个所有的数据库里面,所有的数据库里面,所有的数据库里面,它这个快啊,都是从上往下写的啊,第一行写的这个,呃,这个最后面啊,前面有一个几个字节啊,最后有几个字节是做一个比较特殊的减半的,然后后面就是。
88:10
数据这样存放,从下从下往上写。那么最上面是我们这个块头。块头里面主要是定义了我们快的一些啊,一些一些非常重要的些信息,比这个快是第几个块,然后这个快它修改的时候,它对应的re多日志就是lsm是在哪里对不对?哎,有这么些信息啊,包括它的边界啊,它第一行在哪,最后一行指向哪里,这个边界在哪里。然后对应的呃,它的空隙空隙位置啊,你这样的话,它就比较好去找这个配置里面哪个空隙的快啊,这个呢,我觉得大家呢,去解读那个他的那个官方文档就可以了啊,这个也比较不是很难是吧,大家如果有兴趣的话,解读这个好,这个对于这个行里面的啊,这些内容怎么去解读,我觉得大家真正的去去学这个数据库,一定要把这一个个点啊给它搞清楚,因为这个时间关系啊,我这里就不一一去解了,因为我PP啊内容每次干货比较多,所以呢,通过一个半小时啊,是很难就是一点一点的把它解清楚啊,这个需要大量时间,那最后一张呢,是非常的关键的一章,也就是说对于我们真正去用的话,可能我们开发人员或者我们真正去使用的时候,不是很关心它的底层结构什么,文件在哪里啊,这个快的格式啊等等,我只要怎么去使用,我觉得这个是最主要的,我觉得这个是最主要,所以我们来看一下这个逻辑结构啊,逻辑结构是怎么理解。
89:33
那么一个数据库啊,我们最上层叫base class的这么一个概念,实际上这个理解不要大家不要不要被他,被他的class这个名字吓坏了,什么数据库急促是吧。实际上这里可以理解就是一个数据库的一个实例,就数据库它对应的比如说后台,后台有一些这个啊进程嘛,对吧,那这一套这一套就是PSGF这个post screen,呃,Gras这一套里面的进程,后台进程前端这一套叫class,它对外提供服务,它有一个套端口,对不对啊,那这个下面可以创建多个数据库啊,创建多个数据库,创建多个数据库,我数据库创建好之后,它就会在我们的base下面生成一个ID号在我们下面对不对,那你database你理解是什吧,就是一个目录而已,OKOK,好,那呃,数据库创建好之后,那我在数据库下面是不是可以创建表啊,OK,那它数据库下面会创建什么?Find,就是我们表的OIOK,那么数据库跟表是有关联的,OK,那么大家再想一下数据库,数据库是啊,实际上物理上就是一个IOID是吧,一个目录,然后对应的表,其实一个目录,那表里面这个,嗯,这个。
90:43
啊,表这个目录里面,那对应的里面就是什么具体的文件是吧?有有这个啊对应的各种这个呃文件,那么我们要去使用管理的话,我们光数据库跟这个表还不够,我们需要什么?有这个账户,就是通过一个用户名密码里定去操作这个数据库底层的表,诶那这里面为什么还有一个scheme这个概念,Schema到底干啥了?这个多了是不是多出来了?OK schema为什么这里多了一个sIgMa呢?大家这么去理解,比如说我这个用户要操作两个相同的表怎么办?比如说我这个用户,我我这个我我今天我要去操作两个表,这两个表名字是一样的,都叫T表,那这个时候我能不能诶在T表前面再加个前缀,哎,比如这叫这个。
91:24
云被点啊scheme或者叫Tencent,腾讯点scheme就是腾讯的scheme名就是名字叫腾讯下面的表啊tencent.T表,或者叫云被点T表,是不是可以这样,那这个表前面那个前缀就是scheme,而不是什么use。这里面大家要记,记得这里这个在post里面非常讲究的1.sIgMa,但是大家想一下,在Oracle里面为什么大家不是,诶觉得这个sIgMa不是特别重,感觉不到啊,有没有sIgMa好像无所谓,实际上在Oracle里面一个use对应的一个sIgMa,因为大家想一下,我在Oracle里面我就用这个啊表的话,我们要把它创建这个创建一个什么一个表空间,然后然后再创建一个用户,这个用户跟表关联起来,然后这用这个用户进去啊创建的话,那这个数据呢,全部这用户所在默认表环境里面,那么对应的其实就是S给嘛,然后我们去用。
92:18
这个对象的话,我们前面可以加一个,呃,用户点对象也可就是sIgMa的对象,这Oracle里面一对一的对吧,OKOK,那么在马Le里面其实也很弱化这个sig,为什么呢?因为Oracle里的这个马里面创建一个一个数据库就是一个目录,一个数据库就是一个目录,一个数据库就是一个目录,然后这个数据库下面就对应的是。表啊,所以这个在马SQL里面数据库就是Che码,诶这个你就很难理解,很难理解啊,很难理解,然后post里面呢,它有这个chema,所以呢,我为了让大家解读清楚,我做一个实验啊,这个地方大家可能一定要把这个搞清楚,你这个搞清楚,你今天的收获就不止一点点了,因为这个地方很多人是搞不搞不清楚的,包括很多可能DBA我觉得都不一定搞清楚这个SMA的概念,所以我通过一个实念来告诉大家怎么去理解这个schema,怎么去理解schema,好,大家肯定要延迟一下这个O,不OK,延迟一下,我们顺便把这个讲完,这个这个比较重要。
93:13
好,那么呃,我要去理解这个,比如说我现在已经连进来了是吧,我就连进来了OK。好,我连进来了,那么我们想一下,如果说我要去创建啊一个账户啊,比如说我创建一个用户出来啊,比如说我创建一个用户叫credit us给哎用户给用户,比如说我创建一个用户啊,创建个us啊,比如说创建个用户。呃,叫Tencent啊,腾讯啊,创建个用户名,这个用户名是吧,比如说我创建个用户,我们是不是这样创建的,这不叫用户是吧,这个用户创建不出来什么原因啊,因为什么,因为我这个权限不够,我这个权限我要找什么,我找那个权限比较大的,用他来创建OK。对吧,让他来创建我,他来创建一个账户,大家看懂啊,最后你要大家要学会我最后这我理解的讲的逻辑上的啊,就开发也好,或者我们基本使用要把数据库会用,那么创建这个用户出来之后呢,嗯。
94:09
那么我问大家,你这个时候有了用户了,那我怎么数据库跟用户怎么关联起来,我问大家怎么关联好,那比如说我创建一个这个啊数据库啊,Database OK,我问大家怎么关联,诶,呃,Class database怎么关联跟数据库,呃,比如说叫这个DB下滑键test有没有这个。我是这样,然后我要关联用户怎么用honor,可不可以这样,Honor取出了。Honor。好什么呢,You什么?是不是?啊,这样的话,我数据库跟用户进行关联。好,那这个这个数据库已经存在了,我认为T1吧,OKOK,好是吧,我T一下为T1这个库跟U_T的这个用户进行关联。
95:05
OKOKOK好,那诶我这个时候比如说诶我这个大家看下,这个时候刚L看到大家看清楚我刚才创建的这个database name是不是DB消息特一啊,他对的owner是不是用户啊,是他OKOK好好那我问大家这个时候我退出数据库干Q退出数据库,退出数据库之后干嘛呢?我这个时候用新的账户来连OKOK那一是什么给的B是是吧。就是B_Tencent。然后又。就是我们的用户是吧。就是啊U下划线。特是吧,连进来了,大家看啊,大家看到有我通过这个呃,DB啊DB小于特征一跟U相特的连进来了,连进来之后大家想一下,这个时候我连进来了。
96:05
那么我离进来这个时候,比如说我创建一个表啊,比如说大家来看啊来看好我创建个,比如说我创建一个T上划线,哎,Tencent这个表啊,大家看这个表啊,看这个表很简单,这个表那就很简单的一个表,这表挖。好吧,我这一个很简单表,OK,好这个表上就出来,然后呃,这个表我就呃抄一行记录吧,我不用1000行了,差一行记录注。老T。随便写吧,用提交,OKOK,好,我问大家,我问大家,我这个时候我想查一下这个表的属性,哎,我要查下这个表的属性,怎么查这个表的属性呢?我就问大家这个表到到底在哪个时间,呃,到底属于。
97:06
我创建的是T小节Tencent这个表是吧,我like这个表,看一下这个表的属性。我问大家,这个表到底属于哪个词给码?因为我这个时候你接了用户让着我嘛。啊,看一下。哎,为什么我用。这一个右下attention这个用户,然后指定的库是DB ten的一它表是这个呃表。表方示T消test,然后用户是U消特,它为什么没有连到是给DB的这个里面呢,连了个public呢,啥原因呢,为什么。诶,这里面有一个非常重要的一个概念,就是什么呢?就是说在boss里面,这个也是,呃,很多人学数据库的时候没搞清楚的,在这个里面,在这个里面就是说。
98:04
我们在创建表的时候,它会搜索这个sIgMa,首先会去找这个Dollar use Dollar use,这个schema就是我们创建的这个用户名啊,就是我们的优势这个。那当然我们优势这个名字叫什么。刚才叫什么叫you_test是吧,它这个没有创建一个scheme的名字,所以呢,没找到就找到什么public public是公共的,那public有什么好处,有什么缺点呢?如果你用public,那么这个库就是你在用,没什没什么用,用户很少,或者你这个库就是个测试库,所以我们如果说你几个用户。共用一个基,呃,共用公共的public作为schema去访问数据库的话,是有分析的,除非你这几个用户是互信的,或者说你用户仅行一个,所以我们一般不会用public scheme作为我们的啊这个schema那怎么办,那怎么办那怎么办?诶这个时候我们可以创建一个S给码,所以这个地方大家一定要搞清楚啊,给码。
99:09
我们创建一个sIgMa,比如说S这个sIgMa叫Tencent OK OK,我创建了一个sIgMa出来,OKOK,那么呃,我创建个sIgMa,那么我这个schema怎么样去附署到刚才。哎,我那个用户上面去呢,我们可以通过格命令,诶通过格命令也可以啊,就叫UCUCGS。SMA schema什么呢?就是我schema是S下ten,诶,然后to给我们的U下ten,就是相当于我什么,我把这个scheme跟use关联起来,OKOK。那这样关联起来的话,那这个时候你啊,再去创建表的时候,注意创建表的时候,比如说我在创建一张表,跟他一模一样的表O不OKO不OK,比如我创一张一张一模一样的表O不OK啊在其实这样我问大家肯定很多人晕了,这个地方我创一张同样表O不OK,十计三,这个时候创业肯定不OK了,因为它默认是找public,那怎么办?这个时候我们指定什么一个马叫。
100:15
点诶O不OK可以吧,是不是可以,所以这个时候我们再去查这个表的时候,你发现在我这一个数据库里面。哎,怎么有两个同样的表呢,因为我这两个表在不同的sIgMa下面,OKOKOK,能理解吧理解吧,OK,那很多人想,那我借这么四个嘛,这么多我都乱了,那那怎么办,那怎么办?哎,我告诉大家,你去借这个。啊,你去记的时候最好是怎么建呢?最好你把你的这个数据库的名字跟skyma名字搞成一样,这样你创建的时候,它就自动去找数据库这个用户的名字的那个STEM了,怎么做呢?这个是比较好的一个方法,我来给大家演示一个,比如说我给大家再创建一个,比如说我创一个新的,我告诉他怎么做呢,Correct,比如Che,呃,Chema。
101:12
啊,SIgMa啊,C schema。嗯。呃,Creditche CLA sche,我想想啊,这个chema叫。嗯,S这个已经用过了是吧,那我借个U,诶就是说我借的一个跟我们用户名一样,这个O不OK。看一下啊,You下回Tencent,大家看you you下回ten是我们的use是吧?那我把use跟S搞成一样O不OK,可以啊,然后also面证奥来。然后U学你是说S跟用户名搞定一样。哎,稿成一样,哎,搞成一样,搞成一样,大家看我现在大我我再退出来,我就退出来,我大家看清楚。
102:02
我退出来走,然后我们可以看我现在里的时候是不是通过杠大写的U是不用户名是U下T是不是DB移知道这个什么DB,这个叫T1下面是吧,O不OK好进来之后呢,这个时候比如我串建一张表,大家看一下,我这个时候再串建一张啊,同样的表我看啊看清楚,看那public之前那张表啊。这张表后前缀什么都不加,前缀什么都不加,就表前面我什么都不加,看看能不能创建出来。你发现也能算出来就很神奇是吧?好,我们再来看,我们再来看。你发现诶,这个时候我什么都不加的时候。我的这个表,诶这里找了一个U_Tencent什么意思啊,就是说啊,它实际上这个优先级是什么,根据我们这个参数来找S给码的,所以这个地方学数据库,我告诉大家这个地方很多人如果说你的s gamema搞不清楚,你的你的这个PG是搞不搞不定的啊,那这个地方它找的什么Dollar Dollar use,就是我们的用户名,那如果说我把用户名的scheme,呃,STEM搞成用户名一样的话,OK,那我创建表的时候就不要写STEM的绝对路径前面就空掉,这样的话它自动就会找什么这个优势,当然当然我们也可以去设置这个,呃,设pass,就是我可以设定理,可以把那个pass路径给自己给改掉,也是可以改的啊,这一点一点重要,所以其有很多人在学习这个的时候。
103:39
它这个地方就懵了,就sIgMa实际上我想告诉大家的就是说sIgMa在这个。概念里面实际上就是一个文件夹,那我再考大家一个一个一个,我这个时候再考大家一个问题,那大家,呃,今天我们讲的是possible是吧,那我这段问大家一个马Q里面,马Q里面一个数据库对应的一个S码,因为我们创建一个数据库就会创建一个目录,这个目录其实就是对应的干码,一个目录对不对?那嗯,我要把两个不同的表,一个同样的表放在不同的目录里,不同的数据库里面是OK的,好,那一个数据库一个干码,那我问大家如果出现像马L里分库分表,就是说我把这个表分布在不同的机器上面去,然后每个表名是一样的,这个时候我schema跟数据库怎么对待,这个时候就是一个stemma多个数据库,所以这个时候一定要把这个stemma提到一定的high life,理解,真正理解这个sIgMa的概念。sIgMa它对应的下面对象是什么?就是表、视图等等的一些对象,所以可以看到我们去写一个什么呃呃,什么什么叠表。
104:46
好是吧,前面就是schema贴表明,而不是用户名底表明,这个一定要去理解,像articleacle里面,我们经常说我要把那个用户A用户的数据授权给A,用户的表授权给BA用户,那AB2个他虽然是就借了用户的ABA,它后端对应的就是K嘛,A用skma SK BA,那么A要去用户要访问B用户的下面的的话,那我就b.sche码B作为sche码B点一个表就可以反问过来,然后授权给他就可以了啊,那这个里面也是这样的概念,OKOK,所以这个呢,理解了之后啊,你后面看任何啊,这个后面文档这么一个啊。
105:22
Database卡一个实例下面可以记很多database。那些database。啊跟这个呃,这个这个啊,用户之接的关系,一个用户可以有很多database是吧,一个用户也可以有很多嘛,啊所以它这个是比较桀耦的,比较灵活,比较灵活啊。当然这个里面表空间也是个逻辑上的概念啊,所以说逻辑上的几个概念,大家今天通过这个呢,一定就是我讲了这么多啊,大家一定要把后面逻辑概念上面讲的这个一定要发清楚啊,记住就是我们的个实例啊,下面可以记很多database database就是我们下面一个个目录是吧,通过OID表示,然后借表的时候,在库下面又有很多这个反漏,就是我们的表的ID是不是,然后我们要控制这个的话,我们通过用户进去,那么用户呢,跟这个schema啊进行关联,那这样的话我就可以用户可以发现schema下面的对象O不OK,那表空间那就理解了。
106:13
好,那今天我们学了这个整个啊,大家都学了这个整个题架构,从这个架构的整体架构,然后架构里面啊,我们的内存结构,我们的进程是吧,然后我们的物理文件啊,最后我们讲讲我们的逻辑结构啊这些概念。好,那么这个里面大家有如果有兴趣的话,可以去做一个作业,比如说通过一些命令,我怎么去看我的各种进程是吧,那这个进程到底有哪些功能,哎,这个可以理一理啊,另外呢,可以啊,用这个一条SL语句执行在整个的体结构里面,是啊,怎么样去走的这个呢,经常啊,不管是orac嘛,S possibly等等面试里面都会问到一呢,去通过这个呢去呃问你呢,看看能不能理解这个数据库是吧,他一一个这个执行,那么执行当中它涉及哪些组件,这些组件的功能,以及整个数据流是怎样子的,可以考虑的这这道这道题啊对吧,好,然后比如创建一个A是吧,那是怎么存放的这个呢?去理解它的物理结构,它的逻辑结构啊,这样的一个观念啊,就些理解,就感觉理解,所以今天的课啊是非常非常重要的啊,我其实呃这样去讲啊,就是很多人肯定不一定这个搞得清楚,其实没关系,因为啊,我们碰到一个新的事物,你只要知道你自己不知道了,这个时候你是么?你这个时候去学,这个时往上爬就可以了啊,所以这个时候为什么要学习是吧,这个是充电就。
107:31
是你因为你现在我讲的这个,你现在啊,从这个。啊,不知道,他知道,但是知道的时候你肯定还是有点懵是吧,但是你知道要从哪个地方去找资料去看啊就OK了,就OK好,那么今天啊就讲到这里啊,延迟了一点时间好。好,非常感谢大家啊,非常感谢大家。
我来说两句