1、 表空间分离 建议首先表和索引的表空间分离,某些不常用的日志表与业务表的表空间相分离 建表指定表空间示例: Create table .. ( Cs number(6), … ) Tablespace …; 建索引指定表空间示例: Create index .. on tab1(col,..) Tablespace ..; 2、 建表和索引时指定起始数据段存储 为了在一定程度上减少数据库为对象分配存储空间的工作,可为某些大存储对象,某些表和索引指定初始存储段大小,预先将空间分配给对象。这主要在实际发布部署中进行,前期需要监控对象增长状况时请不要使用,如开发环境。预先分配存储段大小的示例如下: Create table .. ( Xh number(2), … ) Storage (initial 5m); --初始化段设为5m 3、 定期收集对象状态信息 Oracle决定访问路径基于对象的状态信息,随着时间的积累,有可能由于对象状态不及时造成访问路径的选择问题。 收集状态需要定期执行,如每月,可使用oracle的定时任务方式,收集状态语句示例: exec dbms_stats.gather_schema_stats(schema_name,dbms_stats.auto_sample_size); dbms_stats.auto_sample_size可用100代替,表示数据的采样集为全部。 4、 数据库参数调整 Db_cache_size:数据缓冲区,调大(尽可能大些,防止物理读) Shared_pool_size:共享池,调大(sql解析、数据字典等)需要跟踪是否够用[SELECT * FROM V$SGASTAT WHERE NAME = 'free memory' AND POOL = 'shared pool';检查共享池是否尚有空闲空间 ] Pga_aggregate_target:全局排序区,调小,原值400多兆。 5、 归档模式测试 目前的测试环境未打开数据库的归档模式,由于实际环境中可能用户有基于安全的要求需要打开归档模式,而该模式会对数据库性能有一定影响。建议有条件进行相关测试。 6、 数据库对象大小监控 数据库对象存储通过段分配实现,可通过如下语句检查: Select segment_name,segment_type,sum(bytes)/1024/1024 “size-m” from Dba_segments where owner = ? Group by segment_name,segment_type; 注意,这是数据库对象已得到的存储段空间,但并不代表实际数据占用的空间,尤其是对指定了初始段大小的数据库对象。但仍可用于大对象的检测 7、 其他 表缓存,可将常用的表(如代码表、参数表cache在缓冲区中)。Alter table … cache; 对象缓存,常用的procedure、function、trigger、sequence可考虑固定到共享池中,dbms_shared_pool.keep; 使用sequence可适当调大cache值,但如果数据库关闭或异常,cache中值将被跳过; Sql脚本有条件、循环或复用的可考虑使用绑定变量,而不要每次直接将变量固定写入sql脚本,这样可减少数据库对类似脚本的分析时间; 定期重建索引,由于数据的更改删除,一段时间后索引可能碎片增多,效率下降,可考虑定期重建索引,alter index … rebuild; 8、 数据库监控 Oracle提供了statspack这个工具对自身进行监控,该工具使用参见spdoc.txt。 可结合测试工具使用,在测试开始前截取系统快照,运行测试,测试结束后再截取系统快照,以两个快照为基准生成报告文档,重点关注报告中的topsql。 (0) 创建用户:@%ORACLE_HOME%\rdbms\admin\spcreate; (1) 连接perfstat用户 (2) 执行快照:exec statspack..snap (3) 执行应用 (4) 执行快照:exec statspack..snap (5) 生成报告:@%ORACLE_HOME%\rdbms\admin\spreport;文件在@%ORACLE_HOME%\bin目录下 注:用sql plus执行; 当创建用户时设置密码为数字时用””引住; 9、 Lob存储放在单独的表空间; 10. 数据库性能调优 数据库往往可能是应用性能的主要瓶颈,因此应确保数据库在最佳的性能下 运行。在J2EE中,JDBC程序的性能主要由两个因素决定,一是数据服务器本身 的性能,如数据库管理系统、数据库结构设计,以及所编写的SQL语句,都很大 程序上影响JDBC程序的性能;另一方面,与数据库服务器相对独立的JDBC API 的使用也很大程度上影响着JDBC的性能。关于数据库服务器配置、数据库管理 系统管理、数据库结构设计或者SQL的性能超出这里的讨论范围,这里只做简单 论述,提供一些参考。 以下是一些提高数据库性能通用的建议以及Oracle参 数调整的一个实例: 良好的数据库设计 — 跨磁盘的负载平衡;通过数据的规范化达到快速 检索数据的目标;索引会提高查询的性能,但会降低DML 操作的性能, 因为DML 操作必须维护索引,因此设计人员需要和 DBA 以及用户一 起来平衡快速地查询数据和快速地改变数据的得失。 优化磁盘I/O: /O 瓶颈是最容易识别的性能问题。跨所有可用的磁盘 均匀地平衡I/O,可以减少磁盘存取的时间。对于较小的数据库和不使 用并行查询选项的那些数据库,要确保不同的数据文件和表空间跨可用 的磁盘分布。可以调整DBWR(数据库写进程),增加写带宽;选择合适 的文件系统类型,Solaris 允许选择文件系统。文件系统有不同特性, 它们用于存取数据的技术对数据库性能有实质性的影响 控制Checkpointing 的频率 Channel SE WLS 应用性能考虑及调优v0.85 8 在测试调优时可利用数据库监控工具来收集数据库性能数据,包括缓存 命中率、磁盘操作特征(如排序速率、表扫描速率)、SQL 响应时间和数 据库表活动。例如,可以使用 Oracle 9i 性能管理器来监控这些数据。 Oracle 参数优化(Oracle 9.2.0.1.0 on a 4X 1.6 GHz Intel Pentium 4 Xeon) 下面是一个调整后的Oracle 参数值:(仅供参考) # tuning parameters db_name=specdb control_files = D:/oracle/oradata/specdb/cntrlspecdb compatible=9.2.0.0.0 cursor_space_for_time = TRUE db_block_buffers = 524288 db_file_multiblock_read_count = 128 db_files = 256 dml_locks = 2000 enqueue_resources = 2000 log_buffer = 16777216 log_checkpoint_interval = 2147483647 processes = 1000 open_cursors = 2000 shared_pool_size = 64000000 sessions 本文来源:https://www.wddqw.com/doc/582efbd5b9f3f90f76c61b2b.html