如何提高内存使用效率

如何提高内存使用效率,第1张

优化内存的管理,提高内存的使用效率,尽可能地提高运行速度,是我们所关心的问题。下面介绍在Windows *** 作系统中,提高内存的使用效率和优化内存管理的几种方法。
方法一:调整高速缓存区域的大小
可以在“计算机的主要用途”选项卡中设置系统利用高速缓存的比例。如果系统的内存较多,可选择“网络服务器”,这样系统将用较多的内存作为高速缓存。在CD-ROM标签中,可以直接调节系统用多少内存作为CD-ROM光盘读写的高速缓存。
方法二:及时释放内存空间
如果你发现系统的内存不多了,就要注意释放内存。所谓释放内存,就是将驻留在内存中的数据从内存中释放出来。释放内存最简单有效的方法,就是重新启动计算机。另外,就是关闭暂时不用的程序。还有要注意剪贴板中如果存储了图像资料,是要占用大量内存空间的。这时只要剪贴几个字,就可以把内存中剪贴板上原有的冲掉,从而将它所占用的大量的内存释放出来。 
方法三:监视内存
系统的内存不管有多大,总是会用完的。虽然有虚拟内存,但由于硬盘的读写速度无法与内存的速度相比,所以在使用内存时,就要时刻监视内存的使用情况。Windows *** 作系统中提供了一个系统监视器,可以监视内存的使用情况。一般如果只有60%的内存资源可用,这时你就要注意调整内存了,不然就会严重影响电脑的运行速度和系统性能
方法四:提高系统其他部件的性能
计算机其他部件的性能对内存的使用也有较大的影响,如总线类型、CPU、硬盘和显存等。如果显存太小,而显示的数据量很大,再多的内存也是不可能提高其运行速度和系统效率的。如果硬盘的速度太慢,则会严重影响整个系统的工作。
方法五:优化内存中的数据
在Windows中,驻留内存中的数据越多,就越要占用内存资源。所以,桌面上和任务栏中的快捷图标不要设置得太多。如果内存资源较为紧张,可以考虑尽量少用各种后台驻留的程序。平时在 *** 作电脑时,不要打开太多的文件或窗口。长时间地使用计算机后,如果没有重新启动计算机,内存中的数据排列就有可能因为比较混乱,从而导致系统性能的下降。这时你就要考虑重新启动计算机。

作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但硬件问题、软件问题、网络环境等的复杂性和多变性,导致了对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题。 本文从系统入手,重点讲述由于系统软、硬件配置不当造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程。
一、 系统性能分析的目的
11 找到系统性能的瓶颈
系统的性能是指 *** 作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个Web服务,经常出现网页无法打开、打开速度慢等现象。遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。 *** 作系统完成一个任务是与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关的,任何一个环节出现问题,都会影响整个系统的性能。因此,当Linux应用出现问题时,应当从应用程序、 *** 作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在哪个部分,然后集中解决。
12 提供性能优化方案
查找系统性能瓶颈是个复杂而耗时的过程,需要在应用程序、 *** 作系统、服务器硬件、网络环境等方面进行查找和定位,影响性能最大的是应用程序和 *** 作系统两个方面,因为这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面出现的问题,一般都能马上定位。一旦找到了系统性能问题,解决起来就非常迅速和容易,例如发现系统硬件存在问题,如果是物理故障,那么更换硬件就可以了,如果是硬件性能不能满足需求,升级硬件就可以了;如果发现是网络问题,比如带宽不够、网络不稳定,只需优化和升级网络即可;如果发现是应用程序问题,修改或优化软件系统即可;而如果是 *** 作系统配置问题,修改系统参数、修改系统配置即可。
可见,只要找到了性能瓶颈,就可以提供性能优化方案,有标准、有目的地进行系统优化。
13 使系统硬件和软件资源的使用达到平衡
Linux *** 作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下由无数的开源软件支撑,常见的有Apache、Tomcat、MySQL、PHP等。开源软件的最大理念是自由、开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用性能的最优化。但是,系统的性能问题并非是孤立的,解决了一个性能瓶颈,可能会出现另一个性能瓶颈,所以说性能优化的最终目的是:在一定范围内使系统的各项资源使用趋于合理并保持一定的平衡,即系统运行良好的时候恰恰就是系统资源达到了一个平衡状态的时候。而在 *** 作系统中,任何一项资源的过度使用都会破坏这种平衡状态,从而导致系统响应缓慢或者负载过高。例如,CPU资源的过度使用会造成系统中出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加又会导致系统内存资源的增加,当物理内存耗尽时,系统就会使用虚拟内存,而虚拟内存的使用又会造成磁盘I/O的增加并加大CPU的开销。因此,系统性能的优化就是在硬件、 *** 作系统、应用软件之间找到一个平衡点。
二、 分析系统性能涉及的人员
21 Linux系统管理人员
在做性能优化过程中,系统管理人员承担着很重要的任务,首先,系统管理人员要了解和掌握 *** 作系统的当前运行状态,例如系统负载、内存状态、进程状态、CPU负荷等信息,这些信息是检测和判断系统性能的基础和依据;其次,系统管理人员还有掌握系统的硬件信息,例如磁盘I/O、CPU型号、内存大小、网卡带宽等参数信息,然后根据这些信息综合评估系统资源的使用情况;第三,作为一名系统管理人员,还要掌握应用程序对系统资源的使用情况,更深入的一点就是要了解应用程序的运行效率,例如是否有程序BUG、内存溢出等问题,通过对系统资源的监控,就能发现应用程序是否存在异常,如果确实是应用程序存在问题,需要把问题立刻反映给程序开发人员,进而改进或升级程序。
性能优化本身就是一个复杂和繁琐的过程,系统管理人员只有了解了系统硬件信息、网络信息、 *** 作系统配置信息和应用程序信息才能有针对性地的展开对服务器性能优化,这就要求系统管理员有充足的理论知识、丰富的实战经验以及缜密分析问题的头脑。
22 系统架构设计人员
系统性能优化涉及的第二类人员就是应用程序的架构设计人员。如果系统管理人员在经过综合判断后,发现影响性能的是应用程序的执行效率,那么程序架构设计人员就要及时介入,深入了解程序运行状态。首先,系统架构设计人员要跟踪了解程序的执行效率,如果执行效率存在问题,要找出哪里出现了问题;其次,如果真的是架构设计出现了问题,那么就要马上优化或改进系统架构,设计更好的应用系统架构。
23 软件开发人员
系统性能优化最后一个环节涉及的是程序开发人员,在系统管理员或架构设计人员找到程序或结构瓶颈后,程序开发人员要马上介入进行相应的程序修改。修改程序要以程序的执行效率为基准,改进程序的逻辑,有针对性地进行代码优化。例如,系统管理人员在系统中发现有条SQL语句耗费大量的系统资源,抓取这条执行的SQL语句,发现此SQL语句的执行效率太差,是开发人员编写的代码执行效率低造成的,这就需要把这个信息反馈给开发人员,开发人员在收到这个问题后,可以有针对性的进行SQL优化,进而实现程序代码的优化。
从上面这个过程可以看出,系统性能优化一般遵循的流程是:首先系统管理人员查看系统的整体状况,主要从系统硬件、网络设备、 *** 作系统配置、应用程序架构和程序代码五个方面进行综合判断,如果发现是系统硬件、网络设备或者 *** 作系统配置问题,系统管理员可以根据情况自主解决;如果发现是程序结构问题,就需要提交给程序架构设计人员;如果发现是程序代码执行问题,就交给开发人员进行代码优化。这样就完成了一个系统性能优化的过程。
三、影响Linux性能的各种因素
31 系统硬件资源
1.CPU
CPU是 *** 作系统稳定运行的根本,CPU的速度与性能在很大程度上决定了系统整体的性能,因此,CPU数量越多、主频越高,服务器性能也就相对越好。但事实并非完全如此。
目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因此,可以利用处理器的超线程特性提高系统性能。在Linux系统下,只有运行SMP内核才能支持超线程,但是,安装的CPU数量越多,从超线程获得的性能方面的提高就越少。另外,Linux内核会把多核的处理器当作多个单独的CPU来识别,例如两个4核的CPU,在Lnux系统下会被当作8个单核CPU。但是从性能角度来讲,两个4核的CPU和8个单核的CPU并不完全等价,根据权威部门得出的测试结论,前者的整体性能要比后者低25%~30%。
可能出现CPU瓶颈的应用有邮件服务器、动态Web服务器等,对于这类应用,要把CPU的配置和性能放在主要位置。
2.内存
内存的大小也是影响Linux性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,导致资源浪费。Linux系统采用了物理内存和虚拟内存两种方式,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降,要保证应用程序的高性能运行,物理内存一定要足够大;但是过大的物理内存,会造成内存资源浪费,例如,在一个32位处理器的Linux *** 作系统上,超过8GB的物理内存都将被浪费。因此,要使用更大的内存,建议安装64位的 *** 作系统,同时开启Linux的大内存内核支持。
由于处理器寻址范围的限制,在32位Linux *** 作系统上,应用程序单个进程最大只能使用2GB的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用64位处理器,安装64位 *** 作系统。在64位 *** 作系统下,可以满足所有应用程序对内存的使用需求 ,几乎没有限制。
可能出现内存性能瓶颈的应用有打印服务器、数据库服务器、静态Web服务器等,对于这类应用要把内存大小放在主要位置。
3.磁盘I/O性能
磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。
RAID的英文全称为:Redundant Array of Independent Disk,即独立磁盘冗余阵列,简称磁盘阵列。RAID通过将多块独立的磁盘(物理硬盘)按不同方式组合起来形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的I/O性能和数据冗余。
通过RAID技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等 *** 作,跟单个物理硬盘一模一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘要高很多,同时在数据的安全性也有很大提升。
根据磁盘组合方式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这里进行简单介绍。
RAID 0:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。
RAID 1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合。

农业银行总行 年以来正式推广了新版网络版综合业务统计信息系统 该系统是基于WindowsNT 平台 采用客户/服务器模式 以Microsoft SQL Server为基础建立起来的大型数据库应用程序 系统界面友好 *** 作简便 计算 分析 检索功能非常强大 为保证农业银行系统及时进行纵向和横向业务数据采集 按照不同要求生成统计报表 进行全面业务活动分析提供了强有力的保障 但在这套程序的推广 维护中笔者发现系统有时运行速度较慢 特别是在Win 客户端 *** 作时尤为严重 经过排除网线连接等硬件可能带来的影响后上述问题仍然存在 笔者经过仔细摸索 发现系统对硬 软件的要求较高 为充分发挥设计效能 达到最佳运作效果 需要对计算机硬 软件系统进行较为完备的性能测试与最佳配置 特别是内存配置的好坏对系统的运行速度具有决定性的作用 下面 笔者就如何优化SQLServer数据库服务器的内存配置提出一些认识和看法 一 有关内存的基本概念 物理内存与虚拟内存WindowsNT使用两类内存 物理内存与虚拟内存 物理内存 作为RAM芯片安装在计算机内部的存储器 虚拟内存 用于模拟RAM芯片功能的磁盘(硬盘)空间 其实质是通过将内存中当前没有使用的部分内容临时存储到磁盘上 使系统可以使用到比机器物理内存更多的内存 分页和分页文件WindowsNT系统通过使用磁盘空间使得对内存的需求得到部分缓解 从而使用到比物理内存更多内存的技术就称为 交换 或分页 也就是通常所说的虚拟内存技术 通常Windows NT 系统安装时将在引导驱动器上设置一个大小为 MB的交换(分页)文件(pagefile sys) 二 优化Windows NT 系统内存配置在大多数情况下 为了充分发挥Windows NT 系统效能 内存的作用比起处理器的处理能力更具有影响力 特别是在客户/服务器模式环境下更是如此 因为通常在这种环境下并不十分强调处理器的能力 相反却十分注重是否采用足够的内存来满足各个客户的应用需要 此外 为了获得容错功能和保护应用程序 保证应用程序高速运行 充分发挥设计功能都需要有足够多的内存 特别是工业绘图设计和各种工程应用程序更需要占用大量的内存来进行复杂的计算 物理内存(RAM)方便快速的优点显而易见 但由于其价格昂贵 也就不可能做到多多益善了 因此通过合理优化内存配置 扩充虚拟内存提高计算机运算速度也就成了一项很重要的应用技术手段 保证Windows NT系统基本内存需求Windows NT 系统至小应配置 MB内存 MB内存基本够用 正常情况下保证NT系统有 MB内存就可以了 因为并不是所有的 MB基本内存在任何时候都被同时使用 如果添加一些服务和应用程序 则对内存的需求就会急剧增大 如 ( )添加网络服务需要 MB内存空间 ( )容错功能和系统保护功能需要 MB内存(如磁盘镜像和分条功能) ( )进行图形图象处理需要增加 MB内存空间 ( )安装VC VB开发系统需要增加 MB内存空间 另外 如在Windows NT上构建大型数据库如SYBASE Microsoft SQL Server等 对内存的需求就更多了 优化内存性能为了使WindowsNT不至于过分占用较多的内存或者浪费处理器的时间用于换页 可以采用以下方法优化内存性能 ( )减少显示颜色的数量 ( )降低显示分辨率 ( )尽可能不使用或使用位宽度较小的墙纸 ( )关闭不需要的服务程序或驱动程序 尽量不要在服务器上使用其它应用程序 停用服务或驱动程序的 *** 作步骤如下 ①确定需要停用的服务或驱动程序的名称 ②从 控制面板 中双击 服务 或 设备 图标 ③在列表中选择想要停用的服务或设备驱动程序的名称 单击 停止 按钮 这时出现确认 *** 作对话框 ④选择 是 确认 *** 作 然后关闭对话框完成设置 优化虚拟内存在对Windows NT虚拟内存进行设置时需要合理确定各个驱动器分页文件的 起始大小 和 最大值 两个参数 它们用于指定分页文件的起始空间和最大空间 下面对这两个参数作一些解释 起始大小 指初始创建该分页文件时的文件大小 单位为MB 根据缺省设置 这个值被设置为系统中的物理内存的大小 最大值 指出该分页文件的最大尺寸 单位为MB ( )分页文件的设置原则 ①分页文件起始大小应保留缺省设置 一般情况下请不要改动 ②分页文件理想的最大尺寸为系统物理内存尺寸的 倍至 倍 需要说明的是 如果系统工作时不需要大量内存 请选择靠近下限的值 即用系统物理内存的 倍作为这个尺寸的起始值 如果系统工作时需要大量内存 请选择靠近上限的值 ( )Windows NT虚拟内存设置步骤 ①从 控制面板 中双击 系统 图标 ②在 系统特性 对话框中单击 性能 标签 ③在虚拟内存对话框中单击 更改 按钮 这时出现 虚拟内存 对话框 上端的驱动器框逐一列出了 Windows NT所有页面文件的大小 ④在驱动器列表中 选择需要设置分页文件的驱动器盘符 在 驱动器页面文件大小 对话框中列出了 起始大小 和 最大值 两个参数栏 填入按照上面的原则确定的数值 ⑤单击 设置 确认以上 *** 作 然后依次单击 确定 按钮退出各个对话框 完成设置 ( )Win / 虚拟内存设置 Win / 虚拟内存设置方法 步骤和原则与Windows NT 的设置大致相同 请参照上面Windows NT的设置 注意事项( )合理确定分页文件的最大值 根据系统需求随时进行调整 使用过多虚拟内存将导致整个系统处理性能的下降 设置虚拟内存最大值的目的是使用户不必在WindowsNT的交换文件上消耗过多的磁盘空间 通常情况下如果超过了系统需要的最佳值后 生成交换文件的磁盘空间就被浪费了 ( )尽可能设立专用硬盘配置内存交换区 或将交换空间放到主硬盘的另一个分区 同时应将主硬盘的交换文件大小降至 MB 这样主硬盘(分区)仅用来放置 *** 作系统和应用程序 就可以减少交换次数 防止频繁交换耗费大量 CPU时间 ( )虚拟内存技术的确改善了Windows NT系统的性能 但也受到机器硬盘空间大小 硬盘速度 处理器 (CPU)速度的影响 从理想角度出发 要提高计算机的性能就必须减少交换 *** 作的次数 但是没有一个WindowsNT计算机不发生交换 这就要求计算机要有足够的物理内存 以保持最少的交换 *** 作 三 优化Microsoft SQL Server数据库内存配置内存是影响Microsoft SQL Server系统性能的一个重要因素 SQL Server数据库安装时将为具有 MB物理内存的机器缺省配置 MB可用内存 MB物理内存的机器缺省配置 MB可用内存 应在Microsoft SQL Server数据库安装后进行内存选项(Memory)设置 最大配置值为 GB 为了确定SQL Server系统最适宜的内存需求 可以从总的物理内存中减去Windows NT 需要的内存以及其它一些内存需求后综合确定 理想的情况是给SQL Server分配尽可能多的内存 而不产生页面调度 根据物理内存合理规划SQL Server可用内存在大多数的生产环境中 服务器配备的物理内存是 MB~ MB 偶尔也有 MB的 只要配置恰当是完全可以满足SQL Server的内存需求的 下表是笔者关于SQL Server内存分配的建议规划 供参考 物理内存 分配给SQL Server 设置值(单位 KB) MB MB MB MB MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ MB ~ 以下是SQL Server内存选项(Memory)设置方法( )从Microsoft SQL Server程序集中启动SQL Enterprise Manager ( )从Server Manager窗口中选择 Server 菜单选项 ( )在 Server 菜单中选择 Configurations 选项 ( )在 Server Configuration 对话框中选择 Configuration 标签 Configuration窗口显示配置选项列表 ( )选中 Memory 项目 在 Current 栏填入新值 ( )停止并重新启动SQLServer服务 使设置生效 合理扩充虚拟内存 增大SQL Server可用内存当SQL Server系统确实需要扩大可用内存时 应在磁盘空间充足的情况下扩充供虚拟内存 并相应增大 SQL Server可用内存 具体做法是 系统管理员首先扩充服务器的虚拟内存 然后再参考上表增大SQL Server可用内存 关键是要根据系统的负载情况综合决定是否扩充内存 优化配置 使用tempinRAMSQL Server使用tempdb临时数据库作为一些查询连接 *** 作时排序或创建临时表的工作空间 将tempdb创建在RAM中可以使系统 *** 作性能有较大提高 而且因为tempdb在每次重启动服务器时都重建 这样即使有非正常的关闭也是较为安全的 例如停电故障 要将tempdb创建在RAM中 可以使用sp_configure进行设置 具体用法请参阅有关资料 由于tempdbinRAM使用的内存是由系统从内存体单独分配的 与SQL Server的内存选项设置的可用内存池是分开的 使用tempdbin RAM将减少整个系统的可用内存 应根据SQL Server和服务器运行情况进行配置 否则就可能适得其反 影响系统性能 另外 适当增加tempdb数据库空间 即使不使用temp lishixinzhi/Article/program/SQLServer/201311/22052

1、调整数据结构的设计

这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、调整应用程序结构设计

这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、调整数据库SQL语句

应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(OracleOptimizer)和行锁管理器(row-levelmanager)来调整优化SQL语句。

4、调整服务器内存分配

内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用 *** 作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、调整硬盘I/O

这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、调整 *** 作系统参数

例如:运行在UNIX *** 作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。

一、ORACLE数据库性能优化工具

常用的数据库性能优化工具有:

ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。

*** 作系统工具,例如UNIX *** 作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。

SQL语言跟踪工具(SQLTRACEFACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个 *** 作系统的文件,管理员可以使用TKPROF工具查看这些文件。

ORACLEEnterpriseManager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。

EXPLAINPLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。

二、ORACLE数据库的系统性能评估

信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数。

1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update *** 作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:

数据库回滚段是否足够

是否需要建立ORACLE数据库索引、聚集、散列

系统全局区(SGA)大小是否足够

SQL语句是否高效

2、数据仓库系统(DataWarehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数:

是否采用B-索引或者bitmap索引

是否采用并行SQL查询以提高查询效率

是否采用PL/SQL函数编写存储过程

有必要的话,需要建立并行数据库提高数据库的查询效率

三、SQL语句的调整原则

SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAINPLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:

1、尽量使用索引。试比较下面两条SQL语句:

语句A:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN

(SELECTdeptnoFROMemp);

语句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS

(SELECTdeptnoFROMempWHEREdeptdeptno=empdeptno);

这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。

2、选择联合查询的联合次序。考虑下面的例子:

SELECTstuffFROMtabaa,tabbb,tabcc

WHEREaacolbetween:alowand:ahigh

ANDbbcolbetween:blowand:bhigh

ANDcccolbetween:clowand:chigh

ANDakey1=bkey1

AMDakey2=ckey2;

这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。

3、在子查询中慎重使用IN或者NOTIN语句,使用where(NOT)exists的效果要好的多。

4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。

5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。

6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。

四、CPU参数的调整

CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余。

使用 *** 作相同命令可以看到CPU的使用情况,一般UNIX *** 作系统的服务器,可以使用sar_u命令查看CPU的使用率,NT *** 作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。

数据库管理员可以通过查看v$sysstat数据字典中“CPUusedbythissession”统计项得知ORACLE数据库使用的CPU时间,查看“OSUserlevelCPUtime”统计项得知 *** 作系统用户态下的CPU时间,查看“OSSystemcallCPUtime”统计项得知 *** 作系统系统态下的CPU时间, *** 作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占 *** 作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。

数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。

出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。

1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:

SELECTFROMV$SYSSTATWHERENAMEIN

('parsetimecpu','parsetimeelapsed','parsecount(hard)');

这里parsetimecpu是系统服务时间,parsetimeelapsed是响应时间,用户等待时间,waitetime=parsetimeelapsed_parsetimecpu

由此可以得到用户SQL语句平均解析等待时间=waitetime/parsecount。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句

SELECTSQL_TEXT,PARSE_CALLS,EXECUTIONSFROMV$SQLAREA

ORDERBYPARSE_CALLS;

来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。

2、数据库管理员还可以通过下述语句:

SELECTBUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;

查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。

3、数据库管理员可以通过v$system_event数据字典中的“latchfree”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latchfree查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。

五、内存参数的调整

内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

1、共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:

select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;

来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句:

select(sum(gets-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;

查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。

2、数据缓冲区。数据库管理员可以通过下述语句:

SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');

来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1-(physicalreads/(dbblockgets+consistentgets))。

这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。

3、日志缓冲区。数据库管理员可以通过执行下述语句:

selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');

查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:

申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。

昌平北大青鸟java培训班转载自网络如有侵权请联系我们感谢您的关注谢谢支持

Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。

内存分配器采用的是内存池的管理方式,处在用户程序层和内核层之间,它响应用户的分配请求,向 *** 作系统申请内存,然后将其返回给用户程序。

为了保持高效的分配,分配器通常会预先向 *** 作系统申请一块内存,当用户程序申请和释放内存的时候,分配器会将这些内存管理起来,并通过一些算法策略来判断是否将其返回给 *** 作系统。这样做的最大好处就是可以避免用户程序频繁的调用系统来进行内存分配,使用户程序在内存使用上更加高效快捷。

关于 ptmalloc 的内存分配原理,个人也不是非常了解,这里就不班门弄斧了,有兴趣的同学可以去看下华庭的《glibc 内存管理 ptmalloc 源代码分析》文末链接。

关于如何选择这三种内存分配器,网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。因为 ptmalloc 的主要问题其实是内存浪费、内存碎片、以及加锁导致的性能问题,而 jemalloc 与 tcmalloc 对于内存碎片、多线程处理优化的更好。

目前 jemalloc 应用于 Firefox、FaceBook 等,并且是 MariaDB、Redis、Tengine 默认推荐的内存分配器,而 tcmalloc 则应用于 WebKit、Chrome 等。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13143170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-11
下一篇 2023-06-11

发表评论

登录后才能评论

评论列表(0条)

保存