`
hanjian861202
  • 浏览: 165106 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

alter system flush shared_pool究竟做了些什么事情

阅读更多

我们的数据库的sga比较小,存储过程又多又长,老是出现oracle不能分配多少字节的内存这个错。有人告诉我可以用这个语句来优化shared pool.我查了一下sql reference,说是可以把sga里边所有的shared pool里边的东西都删除。但是那些仍旧在执行的sql语句不会被清除。这样会不会把那些pin在sga里边的包,function也一起删除?
如何知道那些包已经被pin了?

==========================================================================================

 

alter system flush shared_pool的作用


The FLUSH SHARED POOL clause lets you clear all data from the shared pool in the system global area (SGA). The shared pool stores Cached data dictionary information and Shared SQL and PL/SQL areas for SQL statements, stored procedures, function, packages, and triggers.
This statement does not clear shared SQL and PL/SQL areas for items that are currently being executed. You can use this clause regardless of whether your instance has the database dismounted or mounted, open or closed.

实验步骤如下:
----------------------------------------------------------------------------------------
1.查看shared_pool中碎片
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
     7260
2.使用一个以前未曾使用过的查询,来让share pool分配内存,增加share pool中的chunk碎片
SQL> select count(*) from user_tables;
COUNT(*)
----------
      667
3.再次查询shared_pool中的碎片
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
     7515
每个buckets的碎片数量>2000就认为是不太好的一个情况,可能会引起share pool latch争用!
4.使用alter system flush shared_pool命令,并再次查询shared_pool中的碎片
SQL> alter system flush shared_pool;
系统已更改。
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
     7194
-----------------------------------------------------------------------------------------------------------------------
总结:执行这个语句的结果是将缓存在library cache和data dictionary cache 中的sql,pl/sql和数据字典定义都从共享池中清除了
在负载很重的生产库里执行flush shared_pool无异于自杀...慎用!

类似的还有aleter system flush buffer_cache;

分享到:
评论

相关推荐

    相克军 ORACLE 讲座 shared pool 笔记

    解决此类问题的一个临时措施是通过`ALTER SYSTEM FLUSH SHARED_POOL`命令清空Shared Pool,但这只会暂时解决问题,因为随后的SQL执行会触发大量新的硬解析。为了长期优化,应关注系统的解析统计,例如通过查询`v$...

    如何解决Oracle数据库中的04031错误

    - **碎片管理**:定期执行`DBMS_SHARED_POOL.CLEANUP`或`ALTER SYSTEM FLUSH SHARED_POOL`来清理碎片。 - **考虑自动内存管理**:在Oracle 10g及以上版本,启用SGA自动管理(SGA_TARGET>0)可以帮助平衡各内存区域...

    使用SQL PROFILE固定SHARED POOL中的执行计划

    - `ALTER SYSTEM FLUSH SHARED_POOL;` 清空SHARED POOL,测试SQL Profile是否有效。 需要注意的是,虽然SQL Profile能显著提升某些SQL语句的性能,但过度使用或错误配置可能会导致资源浪费或性能下降。因此,定期...

    oracle常用命令

    - `ALTER SYSTEM FLUSH SHARED_POOL` 清空共享池以释放内存资源: ```sql ALTER SYSTEM FLUSH SHARED_POOL; ``` - `ALTER SYSTEM CHECKPOINT` 强制完成所有当前事务并写入数据文件: ```sql ALTER SYSTEM ...

    Oracle_数据库的绑定变量特性及应用终稿.pdf

    alter system flush shared_pool; declare type rc is ref cursor; l_rc rc; l_dummy all_objects.object_name%type; l_start number default dbms_utility.get_time; begin for i in 1 .. 1000 loop open l_...

    程序效能常规处理方法1

    - 当执行速度异常时,可能需要清除ORACLE缓存,如`ALTER SYSTEM FLUSH SHARED_POOL`、`ALTER SYSTEM FLUSH BUFFER_CACHE`和`ALTER SYSTEM FLUSH GLOBAL_CONTEXT`。 6. **使用效能工具进行作业分析**: - 对于T100...

    更改Oracle数据库用户名.pdf

    5. 最后,使用ALTER SYSTEM语句刷新共享池:`ALTER SYSTEM FLUSH SHARED_POOL;` 测试连接 使用新的用户名连接数据库,例如:`CONN TT/TT;` 然后,使用SELECT语句查询表信息,例如:`SELECT * FROM TAB;` 修改...

    数据库优化

    此时,通过`alter system flush shared_pool;`命令可以清理共享池中的无效对象,释放资源。此外,创建用户并授予适当的权限,如`create user u1 identified by u1;`和`grant connect, resource to u1, u2;`,有助于...

    oracle drop table purge无备份bbed恢复.docx

    alter system flush shared_pool; alter system flush buffer_cache; ``` 5. **验证数据**:检查表中的数据量是否符合预期。 ```sql select count(1) from hsql.drop_1; ``` 6. **删除表并Purge**:模拟误...

    Oracle巡检命令

    - `ALTER SYSTEM FLUSH SHARED_POOL;`: 刷新共享池,清除不必要信息。 5. **备份与恢复检查**: - `RMAN> BACKUP DATABASE PLUS ARCHIVELOG;`: 执行全库备份,同时备份归档日志。 - `RMAN> REPORT NEED BACKUP ...

    unix下oracle命令.zip

    `,然后`alter system flush shared_pool;`收集AWR报告。 9. **进程与锁管理**: - 查看进程:`SELECT * FROM v$session;` - 解锁表:`ALTER TABLE table_name NOLOCK;` 10. **日志管理**: - 查看redo日志:`...

    分享ORACLE SEQUENCE跳号总结

    ALTER SYSTEM FLUSH SHARED_POOL; SELECT test.my_sequence.NEXTVAL FROM DUAL; ``` 4. **数据库实例异常关闭**: 如果数据库实例异常关闭,如使用`SHUTDOWN ABORT`命令,序列缓存在共享池中的值可能丢失。当实例...

    ORACLE11G新特性

    - `alter system flush shared_pool;` — 清空共享池 - `alter system flush buffer_cache;` — 清空缓冲区缓存 - `exec dbms_result_cache.flush;` — 清空结果缓存 - `set timing on;` — 开启执行时间记录 - `set...

    Oracle硬解析和软解析的区别分析

    同时,定期清理无效的解析对象(通过`ALTER SYSTEM FLUSH SHARED_POOL`或`DBMS_SHARED_POOL.PURGE`过程)也有助于优化资源利用。 总之,理解Oracle数据库的硬解析和软解析机制,能够帮助我们更好地管理和优化SQL...

    教您如何修改oracle用户名

    9. **刷新共享池**:使用`SQL> ALTER SYSTEM FLUSH SHARED_POOL;`命令刷新共享池,使更改立即生效。 10. **再次设置新密码**:再次尝试`SQL> ALTER USER 新用户名 IDENTIFIED BY 新密码;`,这次应该成功。 11. **...

    彻底搞清楚library cache lock的成因和解决方法

    可以通过执行 `ALTER SYSTEM FLUSH SHARED_POOL;` 来实现。 #### 五、总结 “Library cache lock” 是 Oracle 数据库中常见的等待事件之一,尤其在多用户环境中更加突出。通过理解其产生的原因,并采取适当的预防...

    Oracle数据库常见问题诊断-常见错误篇

    - 使用 `ALTER SYSTEM FLUSH SHARED_POOL` 命令来刷新共享池,释放不再使用的内存空间。 #### 7. ORA-04091 错误 - 数据块已被修改 **问题描述:** - **ORA-04091:** 当数据块在读取过程中被其他会话修改时,会...

    Oracle 数据库常见问题诊断方法

    - 如果是内存碎片问题,可以执行 `ALTER SYSTEM FLUSH SHARED_POOL` 命令来清理共享池。 ##### 1.7 ORA-04091 - **特征**: - 触发器工作异常。 - **原因**: - 当触发器试图读取或修改正在被修改或插入的数据时...

    oracle SQL命令大全

    要清空当前会话的序列缓存,可以使用`ALTER SYSTEM FLUSH SHARED_POOL`,而删除序列则是`DROP SEQUENCE 序列名`。 此外,Oracle SQL还支持创建视图(View),即`CREATE VIEW`,可以用来构建虚拟表,方便数据查询和...

Global site tag (gtag.js) - Google Analytics