Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 多表空间上的Oracle数据库_Database_Oracle_Oracle11g_Tablespace - Fatal编程技术网

Database 多表空间上的Oracle数据库

Database 多表空间上的Oracle数据库,database,oracle,oracle11g,tablespace,Database,Oracle,Oracle11g,Tablespace,我们的Oracle数据库供应商建议在不同的磁盘驱动器上创建多个表空间(例如:TS1、TS2…等),以提高读/写性能。然而,我刚刚发现一个表空间充满了数据,而其他表空间几乎为空,供应商是否错过了任何额外的配置?如果供应商的观点是适用的,那么这是否意味着Oracle将管理在表空间上自动分发数据,并且数据将是相同的还是随机的?嗯,您的数据库已经使用了不同的表空间(请参见下面的示例,从dba\u表空间中列出)。我想你是想创造一个明确使用的 最明显的性能优势是分离数据和索引表空间,并将它们放在单独的磁盘上

我们的Oracle数据库供应商建议在不同的磁盘驱动器上创建多个表空间(例如:TS1、TS2…等),以提高读/写性能。然而,我刚刚发现一个表空间充满了数据,而其他表空间几乎为空,供应商是否错过了任何额外的配置?如果供应商的观点是适用的,那么这是否意味着Oracle将管理在表空间上自动分发数据,并且数据将是相同的还是随机的?

嗯,您的数据库已经使用了不同的表空间(请参见下面的示例,从
dba\u表空间中列出)。我想你是想创造一个明确使用的

最明显的性能优势是分离数据和索引表空间,并将它们放在单独的磁盘上。索引通常消耗大量空间,与数据一样多(甚至更多)。如果选择这样做,请不要忘记指定在存储数据或索引时要使用哪个表空间。例如,在我的11gXE中:

SQL> show user
USER is "SYS"
SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL> connect scott/tiger
Connected.
SQL> create table testt (id number) tablespace users;

Table created.

SQL> create index i1t on testt (id) tablespace system;

Index created.

SQL>

(最后一个没有多大意义;不要自己在
系统
表空间中创建任何东西,但我不想创建新的表空间)。

@user2155873

“如果供应商的观点适用,那么这是否意味着Oracle 将管理在表空间上自动分发数据,并且 它将是平等的还是随机的?”


Oracle不会为您这样做。表(或表分区)或索引(或索引分区)只能占用一个表空间。您必须告诉Oracle要在哪个表空间中存储对象。如果不在表空间和/或索引之间移动表和/或索引,简单地创建更多的表空间是没有任何作用的。

在早期,当一个表空间通常由一个物理磁盘托管时,更重要的是进行适当的表空间设计,例如,将数据存储在不同的表空间而不是索引中,以获得一定的速度。如今,对于SAN和/或虚拟基础架构,这已不再那么重要。不要指望这会提高性能。所以,关于为性能分离表和索引的陈词滥调仍然有追随者吗?这不是真的,也从来不是真的。通过索引访问表是一个串行操作-必须先完成索引“读取”,然后才能知道引用数据的去向。他们之间根本不可能有任何冲突或争论。即使所有数据都在一个物理磁盘上;谢谢你,@EdStevens。我不是DBA,所以我当然不会争辩,我没有必要的知识。我明白你的意思。如果是我从表中读取一些数据,这是有意义的——好的,首先读取索引,然后读取数据。但是,如果有500个用户(或多或少同时)在同一磁盘上读写数据呢?在不同的磁盘上分离表空间/数据文件会有帮助吗,哪怕是一点点?500个并发用户?那又怎么样?想想这个假定的性能增益是基于什么:单个主轴上读写磁头的争用。这就需要一次序列化为一个读或写请求。无论单个用户是否需要索引或表本身,争用都将发生在并发用户之间。现在考虑一下,在现代存储系统中,一个“磁盘”很可能是多个主轴的抽象,抛出磁盘缓冲。(待续)并且操作系统级别的多个“磁盘”实际上可能映射回同一组物理磁盘。。。现在,有一个论据支持将索引和表放在单独的表空间中。但这有利于易于管理,而不是性能。我明白了。再次感谢你,@EdStevens。因此,我的“答案”不太有用,所以我会删除它,但是-你的评论很有价值,所以我会留下它(除非你发布你自己的答案;让我知道,我会删除我写的内容)。遗憾的是,OP的数据库供应商似乎也错了。