zoukankan      html  css  js  c++  java
  • 小知识记录:第X篇

    1.声道
    声道(Sound Channel) 是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。声卡所支持的声道数是衡量声卡档次的重要指标之一,从单声道到最新的环绕立体声。
    --立体声
    单声道缺乏对声音的位置定位,而立体声技术则彻底改变了这一状况。声音在录制过程中被分配到两个独立的声道,从而达到了很好的声音定位效果。这种技术在音乐欣赏中显得尤为有用,听众可以分辨出各种乐器来自的方向,从而使音乐更富想象力,更加接近于临场感受。立体声技术广泛运用于自Sound Blaster Pro以后的大量声卡,成为了影响深远的一个音频标准。时至今日,立体声依然是许多产品遵循的技术标准。
    --四声环绕
    四声道环绕规定了4个发音点:前左、前右,后左、后右,听众则被包围在这中间。同时还建议增加一个低音音箱,以加强对低频信号的回放处理(这也就是如今4.1声道音箱系统广泛流行的原因)。就整体效果而言,四声道系统可以为听众带来来自多个不同方向的声音环绕,可以获得身临各种不同环境的听觉感受,给用户以全新的体验。如今四声道技术已经广泛融入于各类中高档声卡的设计中,成为未来发展的主流趋势。
    --5.1声道
    5.1声道已广泛运用于各类传统影院和家庭影院中,一些比较知名的声音录制压缩格式,譬如 [1] 杜比AC-3(Dolby Digital)、DTS等都是以5.1声音系统为技术蓝本的,其中“.1”声道,则是一个专门设计的超低音声道,这一声道可以产生频响范围20~120Hz的超低音。其实5.1声音系统来源于4.1环绕,不同之处在于它增加了一个中置单元。这个中置单元负责传送低于80Hz的声音信号,在欣赏影片时有利于加强人声,把对话集中在整个声场的中部,以增加整体效果。相信每一个真正体验过Dolby AC-3音效的朋友都会为5.1声道所折服。
    --7.1声道(俗称8声道)
    7.1声道系统的作用简单来说就是在听者的周围建立起一套前后声场相对平衡的声场,不同于5.1声道声场的是,它在原有的基础上增加了后中声场声道,同时它也不同于普通6.1声道声场,因为 [2] 7.1声道有双路后中置,而这双路后中置的最大作用就是为了防止听者因为没有坐在皇帝位而在听觉上产生声场的偏差。

    2.MOV
    MOV即QuickTime影片格式,它是Apple公司开发的一种音频、视频文件格式,用于存储常用数字媒体类型。当选择QuickTime(*.mov)作为“保存类型”时,动画将保存为·mov文件。QuickTime用于保存音频和视频信息,包括Apple Mac OS,MicrosoftWindows95/98/NT/2003/XP/VISTA,甚至WINDOWS7在内的所有主流电脑平台支持。

    3.DRM
    DRM,英文全称Digital Rights Management, 可以翻译为:数字版权管理。指的是出版者用来控制被保护对象的使用权的一些技术,这些技术保护的有数字化内容(例如:软件、音乐、电影)以及硬件,处理数字化产品的某个实例的使用限制. 本术语容易和版权保护混淆。版权保护指的应用在电子设备上的数字化媒体内容上的技术,DRM保护技术使用以后可以控制和限制这些数字化媒体内容的使用权。数字版权管理(Digital Rights Management,DRM)是随着电子音频视频节目在互联网上的广泛传播而发展起来的一种新技术。其目的是保护数字媒体的版权,从技术上防止数字媒体的非法复制,或者在一定程度上使复制很困难,最终用户必须得到授权后才能使用数字媒体。
    --工作原理
    DRM技术的工作原理是,首先建立数字节目授权中心。编码压缩后的数字节目内容,可以利用密钥(Key)进行加密保护(lock),加密的数字节目头部存放着KeyID和节目授权中心的URL。用户在点播时,根据节目头部的KeyID和URL信息,就可以通过数字节目授权中心的验证授权后送出相关的密钥解密(unlock),节目方可播放。
    需要保护的节目被加密,即使被用户下载保存,没有得到数字节目授权中心的验证授权也无法播放,从而严密地保护了节目的版权。
    密钥一般有两把,一把公钥(public key),一把私钥(private key)。公钥用于加密节目内容本身,私钥用于解密节目,私钥还可以防止当节目头部有被改动或破坏的情况,利用密钥就可以判断出来,从而阻止节目被非法使用。 上述这种加密的方法,有一个明显的缺陷,就是当解密的密钥在发送给用户时,一旦被黑客获得密钥,即可方便解密节目,从而不能真正确保节目内容提供商的实际版权利益。另一种更加安全的加密方法是使用三把密钥,即把密钥分成两把,一把存放在用户的Pc机上,另一把放在验证站(access ticket)。要解密数字节目,必须同时具备这两把密钥,方能解开数字节目。
    毫无疑问,加密保护技术在开发电子商务系统中正起着重要的防盗版作用。比如,在互联网上传输音乐或视频节目等内容,这些内容很容易被拷贝复制。为了避免这些风险,节目内容在互联网上传输过程中一般都要经过加密保护。也就是说,收到加密的数字节目的人必须有一把密钥(key)才能打开数字节目并播放收看。因此,传送密钥的工作必须紧跟在加密节目传输之后。
    对内容提供商而言,必须意识到传送密钥工作的重要性,要严防密钥在传送时被窃取。互联网上的黑客总是喜欢钻这些漏洞。因此我们需要一种安全的严密的方式传送密钥,以保证全面实现安全保护机制。
    市场上比较多应用的是微软的 DRM 技术。

    4.Linux内核绑定
    对进程或线程设置相应的cpu亲和力(affinity),确保进程或线程只会在设置了相应标志位的cpu上运行,进而提高应用对cpu的使用效率。如果应用可以在多个cpu上运行,操作系统会在cpu之间频繁切换应用,引起cpu缓存失效,降低缓存的命中率,导致cpu的使用效率下降。所以,如果使用cpu绑定技术,在一定程度上会避免上述问题,提升系统性能,类似技术还有gpu绑定、mic绑定等等。
    a.安装
    yum -y install util-linux
    b.查看应用的CPU亲和性
    taskset -p pid #可以查看到一个16进制的cpu号
    taskset -pc pid #可以查看到cpu列表以及绑定的cpu号(十进制)
    c.将进程绑定到指定cpu核运行
    taskset -p 0x1 pid #0x1为16进制cpu核号
    或者使用 taskset -cp 0 pid #直接使用cpu号的十进制表示方法
    d.通过taskset命令绑定应用到指定的cpu上,也可以通过taskset命令启动应用,并指定应用运行的cpu
    taskset 0x1 sleep 10000 &
    除了通过taskset命令实现cpu绑定,很多语言都提供了相应的api实现cpu绑定功能,例如c的sched_setaffinity和sched_getaffinity,python 3的os.sched_setaffinity和os.sched_getaffinity。

    5.NAT
    NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
    NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
    --静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
    --动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
    --端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
    --ALG(Application Level Gateway),即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 "A" 和 "PTR" queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
    如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常我们使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。

    6.内存溢出和内存泄漏
    --1、内存溢出:在分配的java内存无法满足编写的程序时,会发生这种情况,比如用到的方法栈过深,大对象过多等
    --2、内存泄漏:由于代码缺陷导致对象不断创建而垃圾回收无法及时回收对象,或者根本不回收,比如创建线程再不用后不关闭,频繁创建对象而不销毁等,长时间运行下来,再大的内存都会OutOfMemoryError
    --3、重点说一下两者区别:内存溢出代码本身没有原则问题,最多算是代码品质不高,想要消除报错只能增加java分配的内存或者优化代码、而内存泄漏则是由于代码存在缺陷,如果不修改代码问题,即使分配再大的内存也会最终报错

    7.跨域资源共享 CORS 详解
    http://www.ruanyifeng.com/blog/2016/04/cors.html

    8.YUV
    YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。
    YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
    Y′UV,YUV,YCbCr,YPbPr所指涉的范围,常有混淆或重叠的情况。从历史的演变来说,其中YUV和Y'UV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的视频信号,适合视频与图片压缩以及传输,例如MPEG、JPEG。但在现今,YUV通常已经在电脑系统上广泛使用。
    Y'代表明亮度(luma;brightness)而U与V存储色度(色讯;chrominance;color)部分;亮度(luminance)记作Y,而Y'的prime符号记作伽玛校正。
    YUVFormats分成两个格式:
    紧缩格式(packedformats):将Y、U、V值存储成MacroPixels数组,和RGB的存放方式类似。
    平面格式(planarformats):将Y、U、V的三个分量分别存放在不同的矩阵中。
    紧缩格式(packedformat)中的YUV是混合在一起的,对于YUV常见格式有AYUV格式(4:4:4采样、打包格式);YUY2、UYVY(采样、打包格式),有UYVY、YUYV等。平面格式(planarformats)是指每Y分量,U分量和V分量都是以独立的平面组织的,也就是说所有的U分量必须在Y分量后面,而V分量在所有的U分量后面,此一格式适用于采样(subsample)。平面格式(planarformat)有I420(4:2:0)、YV12、IYUV等。

    9.zookeeper
    https://cloud.tencent.com/developer/article/1586961

    10.Windows服务器修改默认TTL值的方法
    不同的操作系统,它的TTL值是不相同的,默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。笔者单位使用的是Windows 2000服务器,TTL值默认为128,如果将该值修改为255,那么局域网内的用户就会以为这个服务器是Linux系统或UNIX系统,那么他们就会针对Linux系统或UNIX系统来查找Windows 2000服务器的安全漏洞,不过他们是不会找到什么安全漏洞的,这样一来,服务器就安全多了。
    修改TTL值
    通过注册表编辑器就可以实现,点击“开始→运行”,在“运行”对话框中输入“regedit”命令并回车,弹出“注册表编辑器”对话框,展开“HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParameters”,找到“DefaultTTL”,将该值修改为十进制的“255”,重新启动服务器系统后即可。

    11.CDB实例性能压测
    https://cloud.tencent.com/document/product/236/8842

    12.mysql表碎片化整理
    https://www.cnblogs.com/kerrycode/p/10943122.html
    --碎片类型
    行碎片(Row fragmentation):这种碎片指的是数据行被存储为多个地方的多个片段。即使查询只从索引中访问一行记录。行碎片也会导致性能下降。
    行间碎片(Intra-row fragmentaion):行间碎片是指逻辑上顺序的页,或者行在磁盘上不是顺序存储的。行间碎片对诸如全表扫描和聚簇索引扫描之类的操作有很大的影响,因为这些操作原本能够从磁盘上顺序存储的数据中获益。
    剩余空间碎片(Free space fragmentation):剩余空间碎片是指数据页中有大量的空余空间。这会导致服务器读取大量不需要的数据。从而造成浪费。
    对于MyISAM表,这三类碎片化都有可能发生。但InnoDB不会出现短小的行碎片;InnoDB会移动短小的行并写到一个片段中。InnoDb会移动短小的行并重写到一个片段中。
    --查看碎片
    方法1:使用show table status from xxxx like 'xxxx' G;
    不太实用,仅仅可以针对一个表查看碎片情况,无法针对所有表
    方法2:查询information_schema.TABLES获取表的碎片化信息。
    --整理碎片
    OPTIMIZE TABLE:OPTIMIZE TABLE 会重组表和索引的物理存储,减少对存储空间使用和提升访问表时的IO效率。对每个表所做的确切更改取决于该表使用的存储引擎
    OPTIMIZE TABLE的支持表类型:INNODB,MYISAM, ARCHIVE,NDB;它会重组表数据和索引的物理页,对于减少所占空间和在访问表时优化IO有效果。OPTIMIZE 操作会暂时锁住表,而且数据量越大,耗费的时间也越长。
    ALTER TABLE table_name ENGINE = Innodb:这其实是一个NULL操作,表面上看什么也不做,实际上重新整理碎片了.当执行优化操作时,实际执行的是一个空的 ALTER 命令,但是这个命令也会起到优化的作用,它会重建整个表,删掉未使用的空白空间。

    13.Nginx配置启用ETag提高访问速度
    注:目前版本已经对Etag有支持,若编译安装时没有安装对应模块,则选择重新编译安装下。另对于gzip的影响,目前版本已经支持了gzip和etag的同时存在,可以参考如下查看确认。Etag是针对资源级别的,存在于http模块和location模块。
    https://www.cnblogs.com/goloving/p/9379127.html
    http://www.mrliangqi.com/1184.html
    -----------------------------------------------------
    Etag全称EntityTags,http协议规格说明中定义“etag”为被请求的实体值,也可以把它理解为etag理解为是一个客户端与服务器关联的记号,这个记号告诉客户端,当前网页在上次请求之后是否有变化,当发生变化时候,etag的值重新计算,并返回200状态码,如果没有变化,返回304状态码,而不会重新加载整个页面信息。

    1,确认nginx版本
    # /usr/local/nginx/sbin/nginx -v
    nginx version: nginx/1.8.1

    2,下载配置
    #git clone https://github.com/mikewest/nginx-static-etags
    重新编辑nginx把etag模版加进去,可以先尝试直接在http中添加,要报错或者没有etag再编译。

    -V/usr/local/nginx/sbin/nginx -v
    --add-module=/usr/local/nginx/conf/nginx-static-etags & make
    版本为1.7.3及以上,按以下步骤1,版本为1.7.3及一下,按步骤2操作,版本1.3.3以下不支持etag,升级后再使用。

    1,在http段加入etag on;即为启用etag。
    http {
    etag on;
    # /usr/local/nginx/sbin/nginx -s reload 即可生效。
    开启gzip时,可能与etag出现冲突,用浏览器多次请求此网站的静态元素,如果只返回200,不返回304,证明存在冲突。

    2,关闭gzip即将上一部中的gzip on 改为gzip off。再添加etag on;。
    若不想关闭gzip,且要开启etag,同时仍要坚持使用当前版本,需要修改nginx源码并重新编译。编辑ngx_http_gzip_filter_module.c 文件的309行代码,如果找到ngx_http_clear_etag(r);删掉或者 ,如果没有找到而是ngx_http_weak_etag(r);表示gzip和etag没有冲突,不用修改。
    # vim src/http/modules/ngx_http_gzip_filter_module.c
    ngx_http_clear_content_length(r);
    ngx_http_clear_accept_ranges(r);
    ngx_http_weak_etag(r);
    return ngx_http_next_header_filter(r);

    3,使用验证
    在http段添加之后,可以使用location进行所有的静态资源内容配置etag。
    #expire缓存功能#
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
    etag on;
    access_log off; #不记录不需要的访问日志
    expires 3d;}
    location ~ .*.(js|css)?${
    etag on;
    expires 30d;}
    -----------------------------------------------------

    14.ACPI
    https://blog.csdn.net/pankul/article/details/9919085
    http://zh.wikipedia.org/wiki/ACPI

    15.GOP
    -----------------------------------------------------
    GOP group of pictures
    GOP 指的就是两个I帧之间的间隔. 比较说GOP为120,如果是720 p60 的话,那就是2s一次I帧.
    在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下图所示。
    1. I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
    2. P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
    3. B帧即Bidirectionallypredicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图
    像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码
      在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。

      所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
      需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。
      同时,由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会影响Seek操作的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。

    H.264中的I帧,B帧和P帧
    在H264中的图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。
    IDR图像:一个序列的第一个图像叫做IDR图像(立即刷新图像),IDR 图像都是I帧图像。H.264引入IDR图像是为了解码的重同步,当解码器解码到IDR图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像数据来解码。
    一个序列就是一段内容差别不是很大的图像编码后生成的一串数据流。当运动变化比较少的时候,一个序列可以很长,因为运动变化的少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。
    三种帧的说明
    1、I帧
    I帧:帧内编码帧 ,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
    I帧特点:
    - 1)它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
    - 2)解码时仅用I帧的数据就可重构完整图像;
    - 3)I帧描述了图像背景和运动主体的详情;
    - 4)I帧不需要参考其他画面而生成;
    - 5)I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
    - 6)I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
    - 7)I帧不需要考虑运动矢量;
    - 8)I帧所占数据的信息量比较大。
    2、P帧
    P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
    P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
    P帧特点:
    - 1)P帧是I帧后面相隔1~2帧的编码帧;
    - 2)P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
    - 3)解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
    - 4)P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
    - 5)P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
    - 6)由于P帧是参考帧,它可能造成解码错误的扩散;
    - 7)由于是差值传送,P帧的压缩比较高。
    3、B帧
    B帧:双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
    B帧的预测与重构
    B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。
    B帧特点
    - 1)B帧是由前面的I或P帧和后面的P帧来进行预测的;
    - 2)B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
    - 3)B帧是双向预测编码帧;
    - 4)B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
    - 5)B帧不是参考帧,不会造成解码错误的扩散。
    注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。
    -----------------------------------------------------

    16.mysql内存分配问题
    --共享内存:show variables where variable_name in ('innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additional_mem_pool_size','key_buffer_size','query_cache_size');
    innodb_buffer_pool_size
    该部分缓存是 Innodb 引擎最重要的缓存区域,是通过内存来弥补物理数据文件的重要手段,在云数据库 MySQL 上会采用实例规格配置的50% - 80%作为该部分大小(上图为1000MB * 0.5 = 500MB)。其中主要包含数据页、索引页、undo 页、insert buffer、自适应哈希索引、锁信息以及数据字典等信息。在进行 SQL 读和写的操作时,首先并不是对物理数据文件操作,而是先对 buffer_pool 进行操作,再通过 checkpoint 等机制写回数据文件。该空间的优点是可以提升数据库的性能、加快 SQL 运行速度,缺点是故障恢复速度较慢。

    innodb_log_buffer_size
    该部分主要存放 redo log 的信息,在云数据库 MySQL 上会设置64MB的大小。InnoDB 会首先将 redo log 写在这里,然后按照一定频率将其刷新回重做日志文件中。该空间不需要太大,因为一般情况下该部分缓存会以较快频率刷新至 redo log(Master Thread 会每秒刷新、事务提交时会刷新、其空间少于1/2时同样会刷新)。

    innodb_additional_mem_pool_size
    该部分主要存放 InnoDB 内的一些数据结构,在云数据库 MySQL 中统一设置为8MB。通常是在 buffer_pool 中申请内存的时候还需要在额外内存中申请空间存储该对象的结构信息。该大小主要与表数量有关,表数量越大需要更大的空间。

    key_buffer_size
    该部分是 MyISAM 表的重要缓存区域,所有实例统一为16M。该部分主要存放 MyISAM 表的键。MyISAM 表不同于 InnoDB 表,其缓存的索引缓存是放在 key_buffer 中的,而数据缓存则存储于操作系统的内存中。云数据库 MySQL 的系统是 MyISAM 引擎的,因此需给予该部分一定量的空间的。

    query_cache_size
    该部分是对查询结果做缓存,以减少解析 SQL 和执行 SQL 的开销,在云数据库 MySQL 上关闭了该部分的缓存。主要适合于读多写少的应用场景,因为它是按照 SQL 语句的 hash 值进行缓存的,当表数据发生变化后即失效。

    --私有内存:show variables where variable_name in ('read_buffer_size','read_rnd_buffer_size','sort_buffer_size','join_buffer_size','binlog_cache_size','tmp_table_size');
    read_buffer_size
    分别存放了对顺序扫描的缓存,当 thread 进行顺序扫描数据时会首先扫描该 buffer 空间以避免更多的物理读。

    read_rnd_buffer_size
    分别存放了对随机扫描的缓存,当 thread 进行随机扫描数据时会首先扫描该 buffer 空间以避免更多的物理读。

    sort_buffer_size
    需要执行 order by 和 group by 的 SQL 都会分配 sort_buffer,用于存储排序的中间结果。在排序过程中,若存储量大于 sort_buffer_size,则会在磁盘生成临时表以完成操作。

    join_buffer_size
    MySQL 仅支持 nest loop 的 join 算法,处理逻辑是驱动表的一行和非驱动表联合查找,这时就可以将非驱动表放入 join_buffer,不需要访问拥有并发保护机制的 buffer_pool。

    binlog_cache_size
    该区域用来缓存该 thread 的 binlog 日志,在一个事务还没有 commit 之前会先将其日志存储于 binlog_cache 中,等到事务 commit 后会将其 binlog 刷回磁盘上的 binlog 文件以持久化。

    tmp_table_size
    不同于上面各个 session 级的 buffer,这个参数可以在控制台上修改。该参数是指用户内存临时表的大小,如果该 thread 创建的临时表超过它设置的大小会把临时表转换为磁盘上的一张 MyISAM 临时表。

    17.LINUX TCP套接字详细配置
    https://www.cnblogs.com/anruy/p/4895942.html

    18.nginx下的缓存控制
    https://www.cnblogs.com/kevingrace/p/10459429.html

    19.shell脚本给字符串添加颜色
    echo -e "33[字背景颜色;文字颜色m字符串33[0m"
    -e 表示后面跟的字符串需要被解析执行
    33 表示标志位,可以替换为其他内容,保持前后一致即可
    [0m 表示控制选项,还有其他值
    常用颜色:
      字颜色:30—–37
      echo -e “33[30m 黑色字 33[0m”
      echo -e “33[31m 红色字 33[0m”
      echo -e “33[32m 绿色字 33[0m”
      echo -e “33[33m 黄色字 33[0m”
      echo -e “33[34m 蓝色字 33[0m”
      echo -e “33[35m 紫色字 33[0m”
      echo -e “33[36m 天蓝字 33[0m”
      echo -e “33[37m 白色字 33[0m”
      字背景颜色范围:40—–47
      echo -e “33[40;37m 黑底白字 33[0m”
      echo -e “33[41;37m 红底白字 33[0m”
      echo -e “33[42;37m 绿底白字 33[0m”
      echo -e “33[43;37m 黄底白字 33[0m”
      echo -e “33[44;37m 蓝底白字 33[0m”
      echo -e “33[45;37m 紫底白字 33[0m”
      echo -e “33[46;37m 天蓝底白字 33[0m”
      echo -e “33[47;30m 白底黑字 33[0m”
      最后面控制选项说明 www.2cto.com
      33[0m 关闭所有属性
      33[1m 设置高亮度
      33[4m 下划线
      33[5m 闪烁
      33[7m 反显
      33[8m 消隐
      33[30m — 33[37m 设置前景色
      33[40m — 33[47m 设置背景色
      33[nA 光标上移n行
      33[nB 光标下移n行
      33[nC 光标右移n行
      33[nD 光标左移n行
      33[y;xH设置光标位置
      33[2J 清屏
      33[K 清除从光标到行尾的内容
      33[s 保存光标位置
      33[u 恢复光标位置
      33[?25l 隐藏光标
      33[?25h 显示光标

    20.Linux shell unicode转utf8
    native2ascii -encoding UTF-8 -reverse A.json test.json
    需要安装native2ascii命令包,不实用,可参考

  • 相关阅读:
    redis系列:分布式锁
    Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
    DelayQueue
    java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)
    Java的类加载机制
    数据库事务特性ACID
    MQ关于实现最终一致性分布式事务原理解析
    数据库分库分表容量划分建议参考阿里云DRDS原则
    异常解决:Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    OpenResty 简介
  • 原文地址:https://www.cnblogs.com/hrers/p/14145490.html
Copyright © 2011-2022 走看看