`
itspace
  • 浏览: 980919 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

记一次内存换取I/O的优化方法

 
阅读更多
某客户数据库从P595物理迁移至P780新服务器并更换存储之后,发现应用性能反而下降。P780配置了32颗4核CPU(主频为3920 MHz),710G内存。如下所示:
System Model: IBM,9179-MHC
Machine Serial Number: 06DA0CR
Processor Type: PowerPC_POWER7
Processor Implementation Mode: POWER 7
Processor Version: PV_7_Compat
Number Of Processors: 32
Processor Clock Speed: 3920 MHz
CPU Type: 64-bit
Kernel Type: 64-bit
LPAR Info: 1 SN06DA0CR
Memory Size: 727040 MB
Good Memory Size: 727040 MB
Platform Firmware level: AM740_088
Firmware Version: IBM,AM740_088
Console Login: enable
Auto Restart: true
Full Core: false
P595配置了32颗双线程CPU(主频为2302 MHz),186G内存。如下所示:
System Model: IBM,9119-595
Machine Serial Number: 83E37E3
Processor Type: PowerPC_POWER5
Processor Implementation Mode: POWER 5
Processor Version: PV_5_3
Number Of Processors: 32
Processor Clock Speed: 2302 MHz
CPU Type: 64-bit
Kernel Type: 64-bit
LPAR Info: 1 83-E37E3
Memory Size: 190976 MB
Good Memory Size: 190976 MB
Platform Firmware level: SF240_358
Firmware Version: IBM,SF240_358
Console Login: enable
Auto Restart: true
Full Core: false
可以看到服务器在硬件配置层面提高了很多,在排除了执行计划变坏的可能性之后,数据库性能下降是极不正常的。
在排除了服务器配置因素之后,进一步检查存储的I/O性能。通过查看AWR报告发现数据库性能下降期间,存储I/O的响应时间下降厉害,单块顺序读(db file sequential read)需要24ms,多块离散读(db file scattered read)需要33ms,日志文件同步(log file sync)竟然高达68ms,如下所示:

几乎可以确认,存储I/O下降是引起数据库性能下降的主要原因。经过和客户沟通之后,由于种种原因,该库和另外一套数据库需要共用一套存储,而且短期内还不能更改这种架构模式。
前面提到p780服务器的内存为710G,比原来的p595服务器足足多出524G内存。在目前的硬件条件下,要快速提高数据库性能,只能采取内存换I/O的优化手段。数据库SGA参数修改之前,BUFFER CACHE为40G,SHARED POOL为14G,如下所示:

经过和客户商量,决定扩大数据库的BUFFER CACHE至256G,并设置db_keep_cache_size至200G,并将最“热”的表和索引KEEP进KEEP POOL中,KEEP语法如下所示:
alter table xxx storage(buffer_pool keep);
alter index xxx storage(buffer_pool keep);
可以通过DBA_SEGMENTS.BUFFER_POOL字段查看对象是否已经KEEP进KEEP池中。如下所示:
SQL> select distinct BUFFER_POOL from dba_segments;

BUFFER_
-------
DEFAULT
KEEP
修改之后的BUFFER CACHE和KEEP POOL大小如下所示:



设置相关参数并重启数据库,过一段时间,数据库性能得到了极大的提升。尽管单块读的时间依然很高(响应时间为19ms),如下所示:

但是,查看AWR报告发现数据库每秒的物理读次数下降明显,每秒读数据块个数为1,925个,如下所示:

而修改参数之前,每秒的物理读高达6624个,如下所示:

可见,增大数据库的BUFFER CACHE效果还是很明显的,增大BUFFER CACHE使得更多的数据块可以被缓冲到内存中,从而有效地减少了物理读。但需要注意的是,增大BUFFER CACHE会在一定程度上增加CPU的使用率,所幸的是,增大BUFFER CACHE之后CPU空闲率维持在80%左右,系统内存使用率在78%左右,如下所示:



总结:
在CPU资源充足的前提下,适当增加BUFFER CACHE内存可以缓减存储I/O资源紧张。
分享到:
评论

相关推荐

    50种方法巧妙优化你的SQL Server数据库

    以上知识点涵盖了SQL Server数据库优化的主要方面,包括I/O优化、内存管理、CPU优化、查询优化、数据库架构设计、索引管理、事务管理、查询技巧、性能监控以及系统配置等。通过实施这些优化措施,可以显著提升SQL ...

    完成端口IOCP Socket通讯服务器设计(3个例子源代码).zip

    在Windows系统中,IOCP(I/O完成端口)是一种高级I/O机制,它允许应用程序在一个单独的线程池中处理多个并发的I/O操作,从而极大地提高了服务器的并发处理能力。 IOCP(I/O完成端口)的核心思想是通过将I/O操作的...

    内存数据库介绍资料.ppt

    内存数据库是一种特殊的数据库管理系统,它的主要特点是将所有数据存储在内存中,而非传统的磁盘上。这使得内存数据库能够提供极高的数据处理速度和近乎实时的响应能力,尤其适合那些需要快速读写和低延迟的应用场景...

    计算机等考三级数据库基础:不更改代码的情况下如何优化数据库系统.docx

    在不更改代码的情况下优化数据库系统是一项挑战性的工作,但并非不可能。以下是一些DBA可以采取的方法来提升数据库性能: 1. **针对特定SQL优化**: 当遇到性能问题时,首先应该分析那些运行缓慢的SQL语句。通过...

    mysql性能优化.pptx

    - **内存**:增加内存可以缓存更多数据,减少磁盘I/O,提高性能。 - **存储**:高速SSD硬盘对于提升SQL执行速度和索引访问至关重要。 优化数据库性能是一项持续的任务,需要结合监控、分析、测试和调整,以实现...

    批处理在内存数据处理系统中的应用.pdf

    在这一领域,批处理技术因其能够通过牺牲响应时间以换取更高的吞吐率而备受青睐,并将在内存计算中扮演重要角色。 批处理技术的概念在于处理大量数据时,将数据的处理分成多个批次进行,一次处理一批数据,而不是...

    mysql数据库插入速度和读取速度的调整

    通过使用高性能的存储设备(如SSD)或者优化操作系统级别的I/O调度策略,可以显著减少I/O延迟,进一步提高数据库的性能。 ### 实际案例分析 根据给定的部分内容,在实际应用中,可以通过调整`innodb_autoextend_...

    mysqlreport报告分析记录

    这种设置牺牲了数据安全性以换取更高的性能,因为减少了磁盘 I/O 操作。在百万级数据量的场景下,如果可以接受一定量的数据丢失风险,这可能是提高 I/O 吞吐量的一个选择。 然而,需要注意的是,`innodb_flush_log_...

    ch5存储器与IO接口原理PPT课件.pptx

    总的来说,理解存储器和I/O接口的工作原理对设计和优化嵌入式系统至关重要,因为它们直接决定了系统的响应速度和数据处理能力。无论是选择合适的存储类型,还是有效地利用存储层次结构,都直接影响到系统的性能和...

    操作系统期末试题 (2).docx

    缓冲技术是一种以空间换取时间的技术,通过预读和滞后写入来减少I/O操作的次数。请求分页存储管理中,页面尺寸的变化可能影响缺页中断次数,具体取决于程序的访问模式。设备管理包括了硬件设备的启动、中断处理和I/O...

    Linux系统实时性能增强方法的研究.pdf

    3. **I/O操作**:标准Linux使用FIFO(先进先出)的I/O模型,对于实时性要求高的应用可能不够高效。 4. **系统开销**:内核中的锁和同步机制、内存管理等也会消耗一定时间,影响实时性能。 为了增强Linux的实时性能...

    MySQL优化方案参考

    此外,调整内核参数如vm.swappiness、vm.dirty_background_ratio和vm.dirty_ratio可以避免不必要的swap使用,保持内存和I/O的稳定性。 在MySQL层,版本选择是一个重要决策。ORACLE MySQL是最常见的选择,但Percona ...

    计算机操作系统习题.docx

    2. 虚拟存储技术:虚拟存储技术是一种以空间换取时间的技术,它使得程序可以在比实际物理内存更大的地址空间中运行,通过在主存和辅存之间动态交换数据来实现。 3. 请求和保持条件:预防死锁的一种策略是摒弃请求和...

    嵌入式性能详解

    3. **内存交换与回收**:在嵌入式系统中,内存交换和回收策略的优化,可以有效避免频繁的磁盘I/O操作,减少功耗,提高响应速度。 4. **/proc/sys/vm/优化**:通过调整内核参数,如vm.swappiness,可以优化内存管理...

    提高mysql插入数据的速度归类.pdf

    12. **大文件分割**:大型 SQL 文件可以分割成多个小文件,逐个导入,减轻一次性导入的压力。 13. **性能调整**: - 监控 CPU 使用率:如果低于 70%,可能是因为磁盘 I/O 成为瓶颈,考虑增加缓冲池大小。 - 限制...

    unlocked-io.rar_If...

    在"unlocked-io.c"这个文件中,开发者可能实现了一个示例或库,展示了如何在适当的情况下使用这些非线程安全的stdio函数,以优化I/O性能。使用这类函数时,开发者需要确保自己管理好线程同步,以防止数据竞争和其他...

    linux webserver(GCC 源代码)

    - **缓存策略**:有效利用内存缓存,减少磁盘I/O。 - **负载均衡**:通过反向代理或负载均衡器分散请求压力。 - **日志分析**:通过日志找出瓶颈,针对性优化。 了解GCC的工作原理和优化手段,结合Web服务器的...

    操作系统03任务-0002.doc

    13. 通道(Channel)是一种I/O专用处理器,能够独立于CPU执行I/O操作。 14. 虚拟设备(Virtual device)技术通过硬件和软件的扩展,使得多个用户可以共享原本独占的设备。 15. 设备管理不包括中断处理,中断处理是...

Global site tag (gtag.js) - Google Analytics