与性能相关的数据库知识
1、数据库快照
1)进入$ORACLE_HOME/rdbms/admin/目录
2)在sqlplus下执行:exec dbms_workload_repository.create_snapshot;(快照收集开始和结束点)
3)执行awrrpt,收集刚才两次执行的快照点(snapid)
2、数据库内存查看及修改方式(set linesize 180)
查看:show parameter memory
修改:alter system set sga_target=100M;
3、查看数据库链接数
查看数据库的最大链接数: show parameter process
查看每个用户占用的连接数: select count(*) count, osuser from v$session group by osuser;
修改数据库最大连接数: alter system set process = 300 scope=spfile; 重启数据库:startup force;
4、修改数据库密码
alter user sys identified by oracle;
5、查询较慢的数据库及其sql
select * from v$session_wait;
6、在Linux上查看执行计划,使用本地用户登陆
set autotrace on; (可以用sysdba用户在$ORACLE_HOME/sqlplus/admin下面grant plustrace to public副权限)
set linesize 180;
select * from table(dbms_xplan.display_cursor('09c22m2h0shcv', null, 'allstats last'));
7、追踪计划
1)观察oracle的cpu占用,使用命令top -d 1 -u oracle,进入后按F,然后选k以cpu使用率排序。
SELECT *
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = 23725); --能查出是哪个tomcat应用在使用数据库。
2)当CPU占用率很高的时候,需要查看那句SQL导致CPU占用高,可以使用下面语句:
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value,
0, prev_hash_value,
sql_hash_value
),
DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = 14126))
ORDER BY piece ASC;