热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一,监控缓冲区的命中率

一,监控缓冲区的命中率1.1oracle的内存结构内存结构(SGAsystemglobalarea)是oracle为一个实例分配的一组共享内存缓冲区,它包含该实例的数据和控制信

, 监控缓冲区的命中率


1.1 oracle的内存结构

内存结构(SGA system global area)oracle为一个实例分配的一组共享内存缓冲区, 它包含该实例的数据和控制信息. SGA在实例启动时被自动分配, 当实例关闭时被收回. 数据库的所有数据操作都通过SGA来进行.

SGA中内存根据存放信息的不同, 可以分为如下几个区域.

数据库缓冲区(Buffer Cache): 存放数据库中数据库块的copy. 它由一组缓冲块组成,这些缓冲块为所有与该实例相连的用户进程共享. 缓冲块的数目由初始化参数DB_Block_buffers确定, 缓冲块的大小由初始化参数DB_BLOCK_SIZE确定. 大的数据块可提高查询速度.

日志缓冲区(Redo Log Buffer): 存放数据操作的更改信息. 它们以日志项(redo entry)的形式存放在日志缓冲区中. 当需要进行数据库恢复时, 日志项用于重构或回滚对数据库所做的变更. 日志缓冲区的大小由初始化参数LOG_BUFFER确定. 大的日志缓冲区可减少日志文件IO的次数. 后台进程LGWR将日志缓冲区中的信息写入磁盘的日志文件中, 可启动ARCH后台进程进行日志信息归档.

共享池(shared pool): 包含用来处理的sql语句信息. 它包含共享sql区和数据字典存储区. 共享sql区包含执行特定的sql语句所用的信息. 数据字典区包含用于存放数据字典, 它为所有用户进程共享.

Cursors: 一些内存指针, 执行待处理的sql语句.

其他信息区: 除了上述几个信息区外, 还包括一些进程之间的通信信息(如封锁信息); 在多线程服务器配置下, 还有一些程序全局区的信息, 请求队列和响应队列等.


1.2 oracle数据库缓冲区的内部机制

Oracle用这一内存来防止不必要的数据块从磁盘重读. 理解oracle数据缓冲区如何操作, 是成功地运用它们调整数据库性能的关键.

oracle8i之前的版本中, 当数据块被从磁盘送进数据缓冲区的时候, 数据块被自动地放置到最近使用过的数据列表的前部. 但是, 这种行为从oracle8i开始就变了: 新数据缓冲区被放置在缓冲区链的中部. 在调节数据库的时候, 你的目标就是为数据缓冲区分配尽量多的内存, 而不会导致数据库服务器在内存里分页. 数据缓冲区每小时的命中率一旦低于90%, 你就应该为数据块缓冲区增加缓冲区.

1.2.1 数据块的存活时间

在调入数据块之后, oracle会不停地跟踪数据块的使用计数(touch count, 也就是说, 这个数据块被用户线程所访问的次数). 如果一个数据块被多次使用, 它就被移动到最近使用过的数据列表的最前面, 这样就确保它会在内存里保存一段较长的时间. 这种新的中点插入技术会确保最常使用的数据块被保留在最近使用过的数据列表的最前面, 因为新的数据块只有在它们被重复使用的时候才会被移动到缓冲区链的最前面.

总而言之, oracle8i通过将新的数据块插入缓冲区的中部, 并根据访问活动调整缓冲区链, 每个数据缓冲区就被分割成两个部分: 热区(hot section), 代表数据缓冲区的最近使用的一半; 冷区(cold section), 代表数据缓冲区的最早使用的一半. 只有那些被反复请求的数据块才会被移近每个缓冲区的热区, 这就让每个数据缓冲区在缓冲常用数据块的时候效率更高.

热区的大小要用下面的隐藏参数来配置:

_db_percent_hot_default

_db_percent_hot_keep

_db_percent_hot_recycle

只有懂得内部机制和希望调节其数据缓冲区行为的有经验人员才应该使用这些参数.

1.2.2 找到热数据块

Oracle8i保留了一个X$BH内部查看表, 用来显示数据缓冲池的相对性能. X$BH查看表有下列数据列:

Tim: 两次使用之间的时间差, _db_aging_touch_time参数相关;

Tch: 使用计数, 它和被使用过_db_aging_hot_criteria次之后从冷区移入热区直接相关.

由于tch数据列用来追踪特定数据块的使用次数, 所以我们就可以编写sql查询来显示缓冲区里的热数据块使用计数大于10的数据块.

SELECT obj object, dbarfil file#, dbablk block#, tch touches
 
FROM x$bh
 
WHERE tch > 10  ORDER BY tch desc;

这项高级查询技术在用于追踪DEFAULT缓冲池里的对象时尤其有用. 一旦定位了热数据块, 你就能够把它从default缓冲池移动到keep缓冲池.


1.3 数据库缓冲区命中率

select name,value
  
from v$sysstat
 
where name in ('physical reads', 'physical reads direct',
        
'physical reads direct (lob)', 'session logical reads');

 

select 1 - ((physical.value - direct.value - lobs.value) / logical.value) "Buffer Cache Hit Ratio"
 
from v$sysstat physical,
       v$sysstat direct,
       v$sysstat lobs,
       v$sysstat logical
 
where physical.name = 'physical reads'
  
and direct.name = 'physical reads direct'
  
and lobs.name = 'physical reads direct (lob)'
  
and logical.name = 'session logical reads';

This v$sysstat view lists system statistics. To find the name of the statistic associated with each statistic number (STATISTIC#), query the V$STATNAME view.


Column

Datatype

Description

STATISTIC#

NUMBER

Statistic number

Note: Statistics numbers are not guaranteed to remain constant from one release to another. Therefore, you should rely on the statistics name rather than its number in your applications.

NAME

VARCHAR2(64)

Statistic name

CLASS

NUMBER

A number representing one or more statistics class. The following class numbers are additive:

  • 1 - User
  • 2 - Redo
  • 4 - Enqueue
  • 8 - Cache
  • 16 - OS
  • 32 - Real Application Clusters
  • 64 - SQL
  • 128 - Debug

VALUE

NUMBER

Statistic value

 


1.4 改进数据库缓冲区的性能

1.4.1 修改data buffer cache的大小

调整database buffer cache的性能最简单的办法就是修改它的大小. SGA45%最合适.

1, DB_BLOCK_SIZE主数据库块大小默认是8K, 在建立完数据库之后就不能改变.

2, DB_CACHE_SIZE(默认缓冲区池)默认48M, 我们主要修改这个参数以提高性能.

Alter system set db_cache_advice = on; 

oracle推荐的统计顾问, 在正常操作半个小时之后可以执行如下查询得到推荐的大小.

select name,size_for_estimate,v$db_cache_advice.ESTD_PHYSICAL_READS from v$db_cache_advice  where block_size='8192' and advice_status='ON';

另外, 我们可以通过下述语句查询哪些对象正缓存在buffer cache, 正使用多少个buffer cache缓冲区.

select do.owner,do.object_name,do.object_type,count(distinct a.BLOCK#) "NUM of buffers"
from v$bh a, dba_objects do
where a.OBJD = do.object_id
 
and do.owner = 'CTL'
group by do.owner,do.object_name,do.object_type

3, 使用多个缓冲池

Alter system set db_cache_size = 300M;

Alter system set db_keep_cache_size = 150M;

Alter system set db_recycle_cache_size = 30M;

将表分配给保持区.

Alter table col_cust storage(buffer_pool keep);

使用下面语句可以查看分配情况.

select owner,segment_type,segment_name,buffer_pool
from dba_segments
where buffer_pool != 'DEFAULT';

使用下面语句可以查看每个buffer pool的大小以及buffer cache的命中率.

select name "Buffer Pool",
      
1 - (physical_reads / (db_block_gets + consistent_gets)) "Buffer Pool Hit Ratio"
 
from v$buffer_pool_statistics
 
order by name;

4, 在内存中缓存表

虽然表可以放在保持区, 但是由于keep pool也是由LRU控制的, 所以当FTS(full table scan), 该表还是被放在LRU的最近最少使用那端. 这样就有可能被移出. 所以我们可以将表变成一个高速缓存区表.

Alter table col_cust cache;

Select owner, table_name from dba_tables where ltrim(cache)=’Y’.


推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 数据仓库ETL开发过程中,如何有效进行测试是一个关键问题。由于数据仓库通常包含大量数据,并且出于安全考虑,开发库和测试库的数据与生产库不完全一致,这给测试带来了挑战。本文将探讨适用于ETL开发的测试方法,包括单元测试、集成测试以及具体测试技术。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
author-avatar
北路新华
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有