从程序员的角度来关注librarycache的使用
1.使用绑定变量的方式减少硬解析:
select employee_id from emplyees where department_id = 10;
select employee_id from emplyees where department_id = 20;
select employee_id from emplyees where department_id = :dept_id;
2.减少动态生成的SQL语句,必要的时候再用
3.编写SQL语句是按照统一的命名规范,变量的名字要统一,空格缩进要统一
4.遇到事务尽可能的使用procedure,而不是一堆单独的SQL语句。procedure编译后直接调用就可以,不再需要解析,因此执行效率高。而且在不同的用户连接到数据库时,调用存储过程会减少data dictionary cache。
5.v$sql_shared_cursor视图可以查看为什么已经解析过的SQL没有被重复利用
6.在高并发的系统上,使用统一的用户名访问数据比通过同义词访问数据好一些,可以节约data dictionary cache
select employee_id from hr.employees where department_id = :dept_id;
7.最好在应用层来区分连接数据库的用户,数据库层尽量使用少量的用户来连接,减少data dictionary cache
8.业务高峰期避免DDL操作,比如修改表的结果。修改后该表的parse全部失效。
常用的诊断工具如下:
v$sgastat、v$libraraycache、v$sql、v$sqlarea、v$sqltext、v$db_object_cache
SQL> select * from v$sgastat where name='free memory';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool free memory 24325200
large pool free memory 7503872
java pool free memory 4194304
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29047826/viewspace-1335784/
,如需转载,请注明出处,否则将追究法律责任。