【问题标题】:alter system flush shared_pool oracle更改系统刷新 shared_pool oracle
【发布时间】:2016-06-23 19:28:45
【问题描述】:

我有两个问题 首先,在服务器和一个客户端中执行 ALTER SYSTEM FLUSH SHARED_POOL 命令有很大区别吗?在我的公司里,他们教我必须直接在服务器中执行该命令,但我认为这只是一个用于网络的命令,只是一条被刷新的消息,我认为这不应该有实质性的不同有大量数据,我说的是大约需要 5 分钟才能刷新的系统

第二个,如何从另一个实例中刷新一个实例?

【问题讨论】:

  • 您听起来好像运行该命令是您经常做的事情。但是您(或实际上是 DBA)真的应该只在非常极端的情况下运行该命令。我真的希望你不要在生产中这样做,因为它基本上是性能杀手。

标签: oracle system flush alter


【解决方案1】:

ALTER SYSTEM FLUSH SHARED_POOL; 可以从客户端或服务器运行,没关系。

许多 DBA 会从服务器运行命令,原因有二。首先,许多 DBA 从服务器运行 all 命令,通常是因为他们从未了解 IDE 的重要性。其次,ALTER SYSTEM FLUSH SHARED_POOL; 命令只影响集群数据库中的一个实例。直接连接到服务器通常是确保连接到集群的每个数据库实例的一种简单方法。

但是您可以使用以下代码轻松地从 所有 个实例中刷新共享池,而无需直接连接到每个实例。 (感谢berxblog 提出这个想法。)

--Assumes you have elevated privileges, like DBA role or ALTER SYSTEM privilege.
create or replace function flush_shared_pool return varchar2 authid current_user as
begin
    execute immediate 'alter system flush shared_pool';
    return 'Done';
end;
/

select *
from table(gv$(cursor(
    select instance_number, flush_shared_pool from v$instance
)));

INSTANCE_NUMBER   FLUSH_SHARED_POOL
---------------   -----------------
1                 Done
3                 Done
2                 Done

我部分不同意@sstan - 在生产 中刷新共享池应该很少见,但在开发 中可能相对常见。刷新共享池和缓冲区缓存有助于模拟“冷”运行的查询。

【讨论】:

  • Im a junior DBA, we do some tasks from the client, but that task in especific from the server, how can I test if they are really a significant difference, I mean do the flush take a time that I can notice, and the second cuestion I was especting an answer like that, but just in the same command something like ALTER KILL SESSION 130,620,@2`;
  • 测试起来会很棘手,因为第二次运行该命令可能会快得多。您可能需要每天运行一次,在客户端和服务器上交替运行,重复 X 次,然后平均运行时间。但我什至不会费心对其进行测试 - 我无法想象 why 该命令会花费更长的时间,具体取决于它的运行位置。我从未见过一个命令在客户端上运行得更慢,除非它正在传输数据,而且这个命令不会传输数据。
  • 我会寻找一种方法来更快、更均匀地加载共享缓冲区。看看它们是否是要更改的参数以使其更难刷新
猜你喜欢
  • 2017-08-19
  • 2017-04-29
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多