Oracle 客户端在跨架构运行查询时使用多少数据/网络使用量?



当我运行查询以从模式复制数据时,它是在服务器端执行所有 SQL,还是将数据复制到本地应用程序,然后将其推送回数据库?

这两个表位于同一个数据库中,但数据库是通过 VPN 访问的。如果跨数据库,它会改变吗?

例如(在蟾蜍数据点中运行(:

create table schema2.table
as  
select 
sum(row1)
,row2
from schema1 

我问这个问题的目的是因为我正在获取 Azure 云中虚拟机的报价,并希望确保我不会在数据成本上破产。

同一数据库上的 SQL 语句处理通常完全在服务器上进行,并且生成的网络流量很少。

在 Oracle 中,架构是一个逻辑对象。 它们之间没有物理障碍。 在使用两个表的 SQL 查询中,这些表是在同一架构中还是位于不同的架构中(权限问题除外(,则没有区别。

一些例外:

  1. 实际应用程序集群 (RAC( -RAC 可能会在节点之间共享大量数据。 例如,如果表缓存在一个节点上,而处理发生在另一个节点上,则可以通过网络发送所有表数据。 (不过,我不确定这在云上是如何工作的。 通常,节点间流量是通过单独的专用网络连接完成的。
  2. 数据库链接 -如果您的应用程序正在使用数据库链接,这应该很明显。
  3. Oracle Reports and Forms(?( -一些罕见的工具具有客户端 PL/SQL 处理功能。 这些程序可能会将数据发送到客户端进行处理。 但我仍然怀疑它会做一些疯狂的事情,比如将整个表发送到客户端进行排序,然后将结果返回给服务器。
  4. 备份/存档日志 -我假设所有数据都将备份。 我不确定如何计算,但这可能意味着所有写入的数据最终也将计为网络流量。

下面的查询是检查生成的网络流量的不同方法的示例。

--SQL*Net bytes sent for a session.
select *
from gv$sesstat
join v$statname
on gv$sesstat.statistic# = v$statname.statistic#
--You probably also want to filter for a specific INST_ID and SID here.
where lower(display_name) like '%sql*net%';
--SQL*Net bytes sent for the entire system.
select *
from gv$sysstat
where lower(name) like '%sql*net%'
order by value desc;

最新更新