关于Linux系统的HugePages与Oracle数据库优化,可以参考熊爷之前的文章,相关概念介绍的非常清晰:
https://www.percona.com/blog/why-linux-hugepages-are-super-important-for-database-servers-a-case-with-postgresql/
在 Linux 中大页分为两种: Huge pages (标准大页) 和 Transparent Huge pages(透明大页)。
谈到内存管理,最先想到的就是分段和分页机制。计算机刚出现的时候,并没有这些,刚开始是直接使用的物理地址,也就是代码中操作的地址是可以直接和物理地址对应上的,可是后来随着多进程调度的需求,以及有限的物理内存,于是人们就开始做规定,比如对于一块内存,某个范围是属于内核,然后另外一个范围属于进程A,再另外一个范围属于进程B,如下图所示
HugePages是Linux内核2.6+集成的一个功能,可以允许管理大于4KB的页。
Kong(8000端口) 是请求进入端口,用户发送请求先到 Kong 项目的 8000 端口,kong根据配置的规则转发到真实的后台服务地址。
mysql通常使用odirect使数据绕过OS缓冲区落盘,wal还是使用系统缓冲。这样数据的写盘不会造成系统刷脏抖动。在pgsql中数据是与OS缓冲绑定的,自己没有做字节对齐,也不使用odirect的方式直写设备,社区对数据直写的态度也一直很悲观,原因是之前也做过很多探索,结果都不是很好:
HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。尤其是对于8GB以上的内存以及较大的Oracle SGA size,建议配值并使用HugePage特性。本文基于x86_64 Linux下来描述如何配值 HugePages。 有关HugePages的特性请参考:Linux HugePage 特性
在进行部署 Kubernetes 时,我们往往会发现这样一种场景:官方强烈建议在环境初始化时关闭 Swap 空间 。比如在进行 K8S 相关操作时,给予如下提示:
PG使用共享内存在多进程之间进行数据共享。使用动态共享内存段dynamic shared memory segments在并行workers之间进行数据交换,这个内存在启动时分配固定大小。但是PG后端进程必须管理私有内存用于处理SQL语句。本文,介绍PG如何使用memory context,即内存上下文,来管理私有内存;以及如何检查内存使用情况。这对于编写服务器代码的人来说很有意思,但我要重点关注用户如何理解和调试SQL语句的内存消耗。
学习的过程中,高大上的学,基础的也要会,POSTGRESQL 学习过程中发现不捋一捋基础的知识,让基础更夯实,则楼搭的不踏实稍微一个问题,可能就要翻车。
一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页,当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面,但是有时候我们需要锁住一些物理页面防止其被回收(如时间有严格要求的应用),Linux中提供了mlock相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。
用户经常因为OOM killer造成数据库崩溃问题来找我们寻求帮助。Out Of Memory killer会杀死PG进程,并且是我们遇到的数据库崩溃问题中首要原因。主机内存不足的原因可能有多种,最常见的有:
在上篇文章 《深入理解 Linux 虚拟内存管理》 中,笔者分别从进程用户态和内核态的角度详细深入地为大家介绍了 Linux 内核如何对进程虚拟内存空间进行布局以及管理的相关实现。在我们深入理解了虚拟内存之后,那么何不顺带着也探秘一下物理内存的管理呢?
墨墨导读:本文介绍PostgreSQL里如何使用pljava扩展支持java编程。
今天写了个脚本,虽然实现的功能不多,但是个人感觉是一个好的开始,架子出来了,后面要补充的细节加进来就逐步完善了。 这个脚本的运行效果如下: OS Version is :[ RHEL_6.3 ] Oracle Version is :[ 11.2.0.3.0] Oracle Instance is :[ dgtest ] dgtest ORACLE_HOME is :[ /U01/app/oracle/product/11.2.0.2/db_1 ] Oracle status is
Linux 操作系统中的 " 堆内存 “ 是通过 malloc 等函数 ” 动态分配 " 的 内存区域 ;
设置连接数控制,避免过高的连接导致访问报错,当超出连接数上线后,对后续的访问进行排队等待。
PostgreSQL某些时候会耗尽操作系统的各种资源限制,当同一个系统上运行着多个拷贝的服务器或在一个非常大的安装中时尤其如此。本节解释了PostgreSQL使用的内核资源以及你可以采取的用于解决内核资源消耗相关问题的步骤。
为进程分配内存的百分比,默认是50,vm.overcommit_memory = 2 的情况下生效
在Ceph中,每个块(/dev/vda)设备会被拆分为若干个小块,并均匀分配到各个物理节点(服务器)的各个物理磁盘上。那么,Ceph是如何做到这样的均匀分配的呢?
本博客的目的在于简述MySQL和PostgreSQL之间如何跨数据库进行复制。涉及跨数据库复制的databases一般被称作异构databases。这是将数据从一种RDBMS server复制到另一种server的一种很好的方法。
如果阅读过手册一定听过postgresql cluster的概念,第一次听到这个概念可能都会有一些困惑。cluster在安装数据库时,由initdb工具生成,initdb后产生的pgdata文件夹可以理解为cluster的物理存储结构。数据库启动、停止时pg_ctl -D参数指定的文件夹即cluster文件夹,所以一个PG Server可以运行在一个PG Cluster上。
mm_struct 结构体 在 Linux 源码 linux-4.12\include\linux\mm_types.h#359 位置 ;
未来的数据库发展一定是往云上发展的,倒不是云有什么好,主要还是成本的因素,成本因素比较复杂,这里不探讨,如果你单单认为只是一些机房等基础那就大大的错误了,有机会在探讨为什么以后DBA 大多都不会触及一些基础的数据库架构,要在云上去进行新一代的DBA 生涯了。
冻结(FREEZE),相信熟悉pg的人都对这个词不陌生,因为冻结过程对数据库的资源消耗极大,影响业务的正常运行,所以也被称为“冻结炸弹”。网上关于冻结的文章也比较多,本文就系统性的介绍一下冻结过程的原理以及如何预防。
备份 pg_basebackup -D /tmp/pg_backup/ -Ft -Pv -U postgres -h 1.15.57.253 -p5432 -R -D 空文件,没有该目录会自动创建 F 格式话 t 打包为tar包 Pv 显示备份的详细过程 -u 用户 -p 端口 备份报错: 📷 在配置文件pg_hba.conf增加一行: 📷 备份流程: 📷 pg_basebackup: initiating base backup, waiting for checkpoint to complete
PG数据库的总控制进程,负责启动和关闭数据库实例,是一个指向PostgreS命令的链接,算是第一个PostgreS进程。Postmaster的主进程,还会fork出一些辅助子进程。
准确来说 CMDB 应该算作一种 IT 信息管理理念,对信息处理工具的信息通过信息系统进行管理的一种理念
对于用户空间的应用程序,我们通常根本不关心page的物理存放位置,因为我们用的是虚拟地址。所以,只要虚拟地址不变,哪怕这个页在物理上从DDR的这里飞到DDR的那里,用户都基本不感知。那么,为什么要写一篇论述页迁移的文章呢?
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
方式一:bgwriter刷脏:后台刷不影响用户使用,但从全局上看可能会有单页多次重复刷 方式二:checkpoint刷脏:阻塞性刷脏,严重影响QPS,但从全局上看可以等单页写多次,减少刷的次数
最下面的蓝色长条可以看成一个个主机,里面的灰色圆柱形可以看成一个个OSD,紫色的cabinet可以也就是一个个机柜, 绿色的row可以看成一排机柜,顶端的root是我们的根节点,没有实际意义,你可以把它看成一个数据中心的意思,也可以看成一个机房的意思,不过只是起到了一个树状结构的根节点的作用。 CRUSH从root下的所有的row中选出一个row。 在刚刚的一个row下面的所有cabinet中,CRUSH选出三个cabinet。 在刚刚的三个cabinet下面的所有OSD中,CRUSH分别选出一个OSD。 这样做的根本意义在于,将数据平均分布在了这个集群里面的所有OSD上,同时,这样选择做到了三个OSD分布在三个不同的cabinet上。
这些集群范围内的配置参数定义在Ceph的配置文件中,因此任何一个Ceph守护进程启动时都将会遵循已定义的设置。缺省的配置文件是ceph.conf,放在/etc/ceph目录下。这个配置文件有一个global部分和若干个服务类型部分。任何时候一个Ceph服务启动,都会应用[gloabl]部分,以及进程特定部分的配置。一个Ceph配置文件有多个部分,如下图所示。
⑤ 堆内存 : 通过 malloc brk vmalloc 等函数 申请的 动态分配 的内存 ;
https://yum.postgresql.org/14/redhat/rhel-7-x86_64/repoview/postgresqldbserver14.group.html
今天发现突然有一台主机无缘无故死机了,于是翻看了/var/log/message日志,发现提示: echo 0 > /proc/sys/kernel/hung_task_timeout_secs;
/* * linux/mm/memory.c * * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds */ /* * demand-loading started 01.12.91 - seems it is high on the list of * things wanted, and it should be easy to implement. - Linus */ /* * Ok, demand-loading wa
sh 删除7天前的文件 注意修改目录.\ 扩展名.csv find ./ -type f -mtime +7 -name "*.csv" -exec rm -f {} \; find ./ -type f -mtime +7 -name "*.log" -exec rm -f {} \; 编译 ./configure --prefix=/home/mingjiegao/dev/bin/pg1400 \ --enable-tap-tests \ --with-tcl \ --enable-depend \ -
PostgreSQL 是一个基于 POSTGRES 的对象关系数据库管理系统(ORDBMS),版本4.2,由加州大学伯克利分校计算机科学系开发。POSTGRES 开创了许多概念,这些概念在很久以后才在某些商业数据库系统中出现。
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/80666735
分页单元可以实现把线性地址转换为物理地址, 为了效率起见, 线性地址被分为固定长度为单位的组, 称为”页”, 页内部的线性地址被映射到连续的物理地址. 这样内核可以指定一个页的物理地址和其存储权限, 而不用指定页所包含的全部线性地址的存储权限.
📷 这个问题的起因在PostgreSQL 测试的过程中,测试人员发现在对POSTGRESQL 产生toast表后,在删除数据,做vacuum full 后发现系统中给出的toast的文件的物理文件名,
问题是这样的,回答一个关于vacuum操作的问题的时候,由于学艺不精,知识不扎实,选择了错误的答案,有幸于马上有人指出错误。才不至于将错误的理解延续,所以的写一篇来将错误的理解纠正,并加深印象。
Linux 内核中 , 内存节点 ( Node ) 是 " 内存管理 " 的 最顶层的结构 , 下层分别是 区域 和 页 ;
ceph-mon和ceph-mds需要2G内存,每个ceph-osd进程需要1G内存。
领取专属 10元无门槛券
手把手带您无忧上云