Oracle进程内存结构-如何察看Oracle进程消耗的内存Last Updated: Sunday, 2004-11-28 11:12 Eygle 经常有人问到如何在Unix下确定进程消耗的内存资源 实际上是Top输出显示的Oracle进程内存使用,包含了SGA部分。这也是SGA的意义所在。SGA可以被共享,可以被所有进程所访问,在进程的寻址空间里就包含了SGA的大小。 至于如何更为精确的确定进程的内存消耗,本文简要介绍如下(在QuickIO下,你可能无法看到本文描述情况): 1.系统平台及数据库版本$ uname -aSunOS billing 5.8 Generic 0 0.00% oracle3.Pmap输出及进程内存计算$ ps -ef|grep ora_ oracle 9881 9872 0 10:49:57 pts2 0:00 grep ora_ oracle :337360K - 266240K = 71,120k这就是一个进程所消耗的内存.4.用户进程内存使用举例 $ ps -ef|grep LOCAL oracle 10080 9872 0 11:00:
1.Oracle内存管理技术 2.配置自动内存管理(AMM) 3.监视自动内存管理(AMM) 4.配置自动共享内存管理(ASMM) 5.配置自动PGA内存管理 Reference 1.Oracle内存管理技术 ,防止Oracle自动调整为低值或零值。 Oracle11g 建议使用AMM配置新数据库,然后监视总体内存分配的效果,后续可以将数据库切换到ASMM,以便更精准的控制SGA的总大小。 (AMM) 3.1 通过EM查看 EM主页:服务器(Server) -> 数据库配置(Database Configuration) -> 内存指导(Memory Advisors) 3.2 直接查询动态性能视图 --PGA设置起点 Oracle单实例可用内存设置为占机器物理内存的80% OLTP(在线事务处理):PGA占可用内存的20% DSS(查询使用大量内存):PGA占可用内存的50%~70% --查询pga
开学季邀新,赢腾讯内推实习机会
查询是否为内存表, enabled--内存表 disabled--非内存表 (普通当前用户执行) t.table_name, t.inmemory, t.inmemory_priority, t.inmemory_distribute
关于内存的配置,是最影响 Oracle性能的配置。内存还直接影响到其他两个重要资源的消耗: CPU 和 IO. 那Oracle 内存存储的主要内容是什么呢? 数据库启动时,系统首先在服务器内存中分配系统全局区( SGA), 构成了 Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了 Oracle 的 进程结构,内存区域和后台进程合称为一个 设置这个参数后,就不需要为每个内存区来指定大小了。SGA_TARGET指定了SGA可以使用的最大内存大小,而SGA中各个内存的大小由Oracle自行控制,不需要人为指定。 共享池的内存管理 当一条SQL语句被提交给Oracle执行,Oracle会自动执行以下的内存分配步骤: 1.Oracle检查共享池,看是否已经存在关于这条语句的共享SQL区。 如果设置了SGA_TARGET参数,Oracle会从SGA中分配内存给流池; 如果没有指定SGA_TARGET,则从buffer cache中转换一部分内存过来给流池。
Oracle实例=内存+后台进程 Oracle数据库=实例+物理存储结构 由上图可知Oracle实例(一个Instance)由内存结构和程序结构组成,内存结构主要是SGA,程序结构主要是后台进程。 ) SGA区包括Oracle实例需要的一系列内存组件,用于存放数据信息和数据控制信息,这些内存信息被所有进程所共享。 Program global area(PGA) 不同于SGA,PGA属于独占式内存区,它的数据和控制信息为某个会话所独有,当一个会话产生时,Oracle会为这个会话分配一个PGA内存区域。 Software code areas Oracle存放自身软件代码的一部分内存区,不允许其他会话访问 后台进程 Oracle的进程 用户进程 user process 服务器进程 server process 后台进程(链接内存和磁盘的桥梁) 系统监控进程SMON Oracle数据库至关重要的一个后台进程,SMON 是System Monitor 的缩写,意即:系统监控。
,所有实例的内存融合信息构成了整个GRD。 LMS和LMD进程实现了对GRD的访问与管理,LMS进程负责GCS资源和锁,LMD进程负责GES资源和锁,服务器进程作为访问GRD的客户端,需要同LMS和LMD进程进行协作,完成客户端发送的请求,可以认为服务器进程是 GRD的客户端,LMS和LMD进程是GRD的服务器进程。 当一个资源第一次被访问的时候,Oracle根据哈希算法计算出该资源所对应的节点,并将这个资源的定义信息以及资源上所有的锁信息保存在主节点上。 DRM参数 _gc_policy_time:这个参数指定了Oracle统计每个节点对某个数据库对象访问次数的时间间隔,默认值为10分钟。
早上到单位 发现服务器 mysql 服务器停了 然后起来了 查询日志 显示 内存满了 把mysql服务给杀了 linux 服务器如果 内存满了 会自动清理进程 防止服务器挂掉 选择的话 谁占的的内存大 就先杀谁 我的服务器里面 mysql服务占的内存是最大的 所以就把mysql就给杀了 image.png 然后 重启mysql 查询内存 image.png 在这说一下 怎么看linux的内存 举个例子 空闲的内存数: 232M shared 当前已经废弃不用,总是0 buffers Buffer 缓存内存数: 62M cached Page 缓存内存数:421M 关系:total(1002M) = used 记住内存是拿来用的,不是拿来看的.不象windows, 无论你的真实物理内存有多少,他都要拿硬盘交换文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分的时候 ,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常 swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准哦
方法一:修改Oracle最大占用内存 通常我们在自己电脑上搭建项目环境时,都免不了要安装Oracle。不管你硬件多强悍,都会发现,Oracle服务一旦启用,内存立马吃紧。 再启用Oracle服务,内存马上飙升五六百兆,程序便会频繁出现假死。 ? 其实这是因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大。 而通常,我们自己的环境并不需要分配那么大的内存来支持Oracle,这种情况下,我们可以通过修改sga值来减少系统中oracle占用内存过大问题。 方法二:不用时关闭Oracle服务 Oracle启动之后占用了大量内存。所以解决这个问题就是关闭oracle的一些开机启动服务就可以。等你用oracle的时候在手动开启就可以了。
使用python连接oracle数据库服务器需要三个软件的位数一致额版本配套(python版本、oracle数据库服务器版本和oracle客户端连接工具版本) Oracle客户端工具 使用python来操作oracle数据库,我们需要先下载一个oracle的客户端连接工具。 ,我们这边下载的是cx_Oracle-5.3-12c.win-amd64-py3.6-2.exe,其中12c代表支持的oracle服务器版本,win-amd64代表支持64位操作系统。 ) cursor.close(); db.close(); 首先我们需要导入cx_Oracle库 通过connect命令进行连接,连接参数分别为用户名、用户密码、oracle数据库服务器IP:端口/实例名 过程中的报错处理 版本不对应 当出现如下图所示的告警,表示我们安装的软件版本不匹配,只需要保证oracle客户端、oracle服务器和cx_Oracle版本匹配一致就好了 ?
原理: 一、Oracle客户端与服务器端的通讯机制 1、OracleNet协议 如下图所示,Oracle通过Oracle Net协议实现客户端与服务器端的连接以及数据传递。 Oracle Net是同时驻留在Oracle数据库服务器端和客户端上的一个软件层,它封装了TCP/IP协议,负责建立与维护客户端应用程序到数据库服务器的连接。 2、客户端与服务器端的连接过程 在分析客户端与服务器端的连接机制之前,先要定义两个概念,一个是Oracle监听器,一个是Oracle网络服务名。 Oracle数据库服务器通过一个名为“OracleNet监听器”的组件接收来自客户端的连接请求。 \product\11.2.0\dbhome_1) (SID_NAME = myorcl) ) 说明: ORACLE_HOME 给出服务器上Oracle可执行程序的位置 GLOBAL_DBNAME
拉取镜像 docker pull wnameless/oracle-xe-11g 这个比较耗时,中间可能会中断,继续拉取即可 启动实例 注意将selinux关掉,不然实例启动失败 修改/etc/selinux SELINUX=disable 启动 docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g 49160是ssh访问端口,初始密码 admin 49161是数据库访问端口 实例信息 hostname: localhost port: 49161 sid: xe username: system/sys password: oracle /39251947 安装完成client,启动pl-sql 设置oracle安装路径 ? File: F:\installsoft\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora # Generated by Oracle
分区500M 创建物理卷sda2 使用全部剩余空间 pv sd2创建完成,准备创建卷组和逻辑卷 新建vg,名称为system,PE选择默认的4M(PE越小硬盘利于率越高),此时vg最大大小为256G (每个vg块的PE最大数量是65534,4M*65534=256G),可根据实际情况选择PE大小;逻辑卷大小可根据实际情况赋值;swap也位于逻辑卷中以方便扩容;由于虚拟机内存是2G,此时swap设置为 4G,对于虚拟内存设置,有个参考: 4G以内的物理内存,SWAP 设置为内存的2倍; 4-8G的物理内存,SWAP 等于内存大小; 8-64G 的物理内存,SWAP 设置为8G; 64-256G物理内存 part2 数据库安装 系统环境参数配置 1.安装依赖包 由于生产上很多时候服务器是连不了外网的,所以本文的yum源选择本地源 挂载光盘,制作本地yum源 [root@linux-oracle6 ~] Linux 共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。
Typecho博客系统显示服务器占用内存的插件,代码很简单,这插件作者是12年写的,我用了已经不能用,我通过自学的一丢丢的PHP基础,简单的整理了一下,又能用了,奇怪的知识又涨了 插件截图 调用代码
当要夸服务器访问数据库时,我们可以使用dblink建立连接服务器间的通道,本地创建了远程数据库的dblink后,访问远程服务器的库就像操作一个库一样了。 database link to 用户名 //给本机用户分配创建link权限 CREATE DATABASE LINK linkname CONNECT TO 远程服务器用户名 IDENTIFIED BY 远程服务器密码 USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 远程服务器
除已经连接用户外,无法再通过ssh、sqlplus连接服务器。 环境概述 数据库版本11.2.0.4,操作系统AIX 7.1 2. 初步分析,是Oracle还是OS出了问题? 以前没注意过AIX内存管理机制,所以未对相关重要指标进行监控以及管理,导致服务器内存其实早就已经开始在危险边缘试探而我们却并未在意,最终导致业务期间会话突增700连接压垮服务器,引发故障。 进一步分析,服务器内存早已岌岌可危 为什么说服务器内存早已岌岌可危,我们从下面两张图开始分析(第二张图为第一张图的数值): ? ? 看到这里,其实对AIX内存有所了解即可一眼判断,服务器内存是真的已经不足了这是因为: %comp计算内存在故障前已经达到95%以上,内存即将耗尽。 4. ; 配置Oracle可以锁定共享内存SGA钉在内存中 5.
cr block是在update之前,在内存中copy原来的xcur的block。我们看cr block的CR_SCN_BASE是update前一瞬间的SCN,即2687527。 另外我们注意到,oracle已经把第一次做update的时候,SCN 2687527的cr块刷出去了。 但进行第一次select的时候,被修改的xcur block,还是从db file加载到内存,且被记录成dirty的block。 另外,select出来的前镜像,也从undo加载到内存,形成第一个cr block。 到了这个,顺便问个问题,现在都流行database in memory,如果我的内存是256G的,能放得下256G的database吗?读了上面的问题,相信你已经有了初步的答案。
这几天自己线上的乞丐服务器遇到一个问题,io会瞬间飙升到很高很高,造成内存使用飙升。但是实际上并发量并不大(网络连接数)。知道是哪个进程造成的,但是确实排查代码中没有是么地方会有这么大的读写。 也不知道对方到底发的什么数据导致这么大的内存占用。 之前也处理过类似的问题。麻烦之处在于很好的定位问题,重现实际的操作。没办法,只能针对socket服务特定的端口进行抓包。 服务器问题,无非就是资源不合理的使用,造成服务器内存,cpu,io,流量等相关资源出现非常不正常的波动,资源使用率飙升。对于服务器性能问题的排查,没有其他比较好的办法,只能是通过重现复盘去改进。 特别是如果服务器上跑的东西比较多,一个个的排查相当痛苦。 出现问题,首先看日志。如果是线上的,先想办法恢复服务再排查。 看看登录日志,访问日志是否有异常,确定是否有人扫机器。
), 本篇转载了阿里云服务器启用虚拟内存-Ubuntu 阿里云服务器默认没有开启虚拟内存,经常遇到软件内存不足,运行崩溃的情况。 为了减少购买昂贵的内存资源,可以暂时使用虚拟内存代替(根据运行的程序需求,性能会降低一些)。 这个技术在云服务器上使用,可以省很多银子的哦!!! 阿里云服务器默认没有swap,需要自己mkdir /swap创建。 swapoff -v /swap/swapadd mv /swap/swapadd /mnt/swap swapon /swap/swapadd 嗯,这个技术在云服务器上使用,可以省很多银子的哦!!! 原文: 阿里云服务器启用虚拟内存-Ubuntu
腾讯云数据库 MariaDB让您轻松在云端部署、使用 MariaDB 数据库。 云数据库MariaDB提供备份回档、监控、快速扩容、数据传输等MySQL数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。
扫码关注腾讯云开发者
领取腾讯云代金券