tuning 02 Diagnostic and Tuning Tools
statspack 是一个很重要的工具, 这是我们重点要知道的在这章
每天一上班就要看一下 alert log 文件, 可以通过/ORA找, 这是vi的知识,所有的ORACLE错误都是以ORA开头的
日志文件有的时候需要将里边内容拷贝走,清空。 cat /dev/null > alert_pitts.log (直接删除也可以, 删除后oracle会自动产生)
每天确认 Alert log file 是很重要的. 确认的内容:
1. 带 ORA 开头的错误的内容
2. 那些可以影响到 database structure and parameters and statements的操作, 例如 create database, startup, shutdown, archivelog and recover 等
3. instance start 时那些不是默认的参数是否正确
4. alertlog file 位置在 parameter BACKGROUND_DUMP_DEST
在alertlog file 中重点要看的以下几方面信息:
检查点如果想在alert log 里体现, LOG_CHECKPOINTS_TO_ALERT 这个参数设置 true.
alertlog file 是和数据库相关的
trace file : 是和进程相关的.
background process trace file 一般是提交给ORACLE support的部门,一般人员包括DBA看不懂
这些 file 里包含了 background process 的一些问题体现, 另外这些file里并没有包含调优的信息.
These files are created by the background processes.
这个文件比较重要, 可以是 session 级别, 也可以是 instance 级别.
v$session 这个视图可以看到多少个用户连接上来.
user trace 的文件名格式为 sid_ora_pid.trc
这个文件包含了 SQL statements 的一些统计信息.
EXECUTE dbms_system.set_sql_trace_in_session(参数) 设置某个session是否需要产生trace file
show parameter sql_trace 这是控制全局的,所有的session会产生sql trace, 一般避免这么做,这样文件太大
Instance 级别: 设置参数 SQL_TRACE , 默认是 false, 可以看出, 对所有 session 的确认 trace file.
session 级别: 对特殊的 session 来进行 trace file 确认.
execute dbms_system.set_sql_trace_in_session(8, 12, true);
where 8 and 12 are the system identifier and serial numbers of the connected user. 这两个数, 可以通过v$session 这个视图中看到.
The following statement enables the writing to a trace file for the session of the connected user:
ALTER SESSION SET sql_trace=TRUE; -- 这个也是只针对当前 session.
statspack 非常重要(utlbstat.sql , utlestat.sql 已经被 statspack 取代了)
Dictionary and Dynamic Views
Oracle server displays all system statistics in the V$SYSSTAT view, and use many other views for performance and troubleshooting information.
The UTLBSTAT and UTLESTAT Utilities
STATSPACK 也能实现 UTLBSTAT 与 TULESTAT 的功能.
packs 包,在官方文档里详细列出了很多包
statspack 很重要
Oracle Wait Events
oracle 等待请求资源的情况, 可以从一些数据字典中获得.
起始快照, 终止快照 的对比会产生一个报告, 报告快照之间的数据库运行情况.
statspack 必看文档 rdbms/admin/spdoc.txt
statspack 是个用户, snapshop存储在表里, 因为statspack在执行快照时保存的数据大,所以
最好要创建表空间为statspack, 然后将statspack里的所有的表都放在这个表空间里
实际上是创建了一个用户, 这个用户下边有很多表.
安装与使用 statspack:
1. 首先为 statspack 创建一个表空间:
create tablespace perfstat datafile '/u01/oradata/pitts/perfstat_01.dbf' size 512m;
2. 运行安装脚本:
@?/rdbms/admin/spcreate.sql -- 执行命令后, 会提示你输入口令, 因为自动创建了一个用户叫perfstat, 口令比如也输入 perfstat, 然后又会提示你使用哪个表空间, 就输入刚刚我们为这个用户创建的表空间 PERFSTAT, 这时候又提示你需要指定临时表空间, 可以选择目前系统默认的表空间, 比如TEMP, 然后就开始创建, 创建以后, 你可以检查当前目录下的 spcpkg.lis 这个日志文件查看创建的过程有没有问题. 一般是不会有错误的.
3. 使用 statspack:
execute statspack.snap; -- 这样就做了一个快照, 手动执行(也有自动采集, 比如Linux提供的间隔工作, 或者 oracle 提供的)
execute statspack.snap; -- 这样就做了一个快照, 手动执行, 又执行了一次快照
时间间隔取决于你的需求, 一般大概15分钟左右, 尤其是这期间不能有数据库关闭的情况.
产生报告: @?/rdbms/admin/spreport, 这时列出了很多snap快照, 你可以选择begin的一个比如1, end的一个比如3, 然后输入汇报的名字, 也可以使用默认的, 这个报告在当前目录下会产生.
statspack 专题讲座
statspack 的报告非常复杂.
可以看出 statspack 给出了很全的信息
分析 statspack 是比较犯难的问题. 下面的书是来看分析statspack.
推荐
上面数据字典的内容是静态的, 只有你运行 dbms_stats 这个包以后, 这些静态的数据字典才会更新.
等待资源是 wait events
Example:
select username, name, value
from v$statname n, v$session s, v$sesstat t
where s.sid = t.sid
and n.statistic #= t.statistic#
and s.type = ‘USER’
and s.username is not null
and n.name = ‘session pga memory’
and t.value > 30000;
下面要开发自己的脚本.
statistics_level : all, typical basic. 搜集信息的总开关. 默认是 typical. all 就是会搜集很多很多的指标, basic 就搜集很少很少, 所以通常 typical 就够了.
timed_statistics: 搜集指标和时间相关, 很多情况我们需要将这个参数设置为 true.
timed_os_statistics: 搜集的单位是秒, 要搜集操作系统的指标
DB_CACHE_ADVICE: 和 cache 大小相关, off, ready, on 这三个值.
以上参数可以读联机文档.