Oracle数据库是否应该有多个表空间用于数据存储?

Kev*_*ock 15 oracle oracle10g tablespace

我的团队维护着一个约为的Oracle数据库.200GB大小.所有数据(表,索引等)都存在于单个"USERS"表空间中.这是一个坏主意吗?拥有多个表空间有什么好处,在什么情况下我想为我的数据库添加更多?

谢谢!

Jus*_*ave 23

我的偏见(这在很大程度上取决于个人偏好)是,如果创建额外的表空间没有令人信服的好处,那么使用单个表空间可以更轻松地生活.

  • 将对象放在不同的表空间中没有性能优势.有一个古老的神话,分离表和索引会有一些性能上的好处.在所有可用的主轴上传播I/O有一个潜在的好处,但最好是在单个表空间中使用多个数据文件,然后使用多个表空间,因为Oracle在不同的数据文件中进行循环分配,假设您的SAN不是我已经做了一些事情来平衡I/O.
  • 如果您有大型的静态查找/历史记录表,这样您只需带来较小的事务表空间就可以将数据库的新副本带到客户端站点,这就是考虑多个表空间的原因.但是很少有应用程序具有这种设置.如果您必须携带所有200 GB,那么您拥有多少个表空间并不重要.
  • 同样,如果您有大型只读对象,将它们放在只读表空间中可以大大减少备份所需的时间和空间.但是,在数据仓库之外的实践中,这并不常见.
  • 如果您的应用程序可以在没有某些对象子集的情况下运行,那么创建单独的表空间可能会带来好处,这样您就可以使一个表空间脱机并执行表空间级别的还原.但是,很少有应用程序可以在没有一组对象的情况下运行 - 例如,如果丢失了索引表空间,应用程序可能就像丢失所有内容一样死亡.
  • 如果您有大量空表或大多数空表以及许多非常大的表,则从空间利用率的角度来看,具有不同扩展区分配策略的单独表空间可能是首选的.这种情况偶尔发生在打包的应用程序中,其中任何给定的安装使用相对较小百分比的可用表,并且您不希望每个空表都分配有相对较大的范围.在本地管理的表空间中使用自动扩展区管理,这往往不是主要问题,如果您想使用统一扩展区,则可能会更加关注.
  • 如果不同的对象具有不同的磁盘性能优先级,并且您有不同类型的磁盘可用,则可以使用单独的表空间将不同的对象放在不同的磁盘集上.例如,在数据仓库中,您可能希望将较旧的数据放在速度较慢,价格较低的磁盘上,将较新的数据放在成本较高的磁盘上.OLTP应用程序不会发生这种情况.

除非您的应用程序属于这些特殊情况之一,否则拥有单独的表空间的唯一好处是吸引DBA的组织意识.就个人而言,我非常高兴能够避免每次创建对象时都指定一个表空间名称,或者当它们不可避免地在默认表空间中错误地创建时,花费周期从"错误"表空间移动对象.就个人而言,当使用具有自动范围管理的本地管理表空间而不是具有不同统一范围大小的手动优化表空间集时,我不会过分担心是否会浪费几十MB的空间.另一方面,优秀的DBA倾向于非常关注"正是这样"组织的事情,所以如果DBA想要拥有单独的索引和数据表空间,仅仅因为这会吸引某人的美感,我就不会反对.


S.L*_*ott 10

http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/tspaces.htm

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/physical.htm

您可以使用多个表空间来执行以下任务:

控制数据库数据的磁盘空间分配

为数据库用户分配特定的空间配额

通过在线或离线获取单个表空间来控制数据的可用性

执行部分数据库备份或恢复操作

跨设备分配数据存储以提高性能


Dav*_*dge 5

使用不同表空间的一个原因是希望使用表空间传输在数据库之间移动数据。如果您想要移动有限的数据集而不必导出和导入它,那么表空间传输是一个不错的选择,特别是如果出于测试原因,数据具有与源系统完全相同的物理结构(用于性能分析工作,例如)。


小智 5

我强烈反对 Justin Caves 的评估。生产 DBA 可能会有非常不同的意见。

可传输表空间功能用于在数据库之间移动数据的子集,而无需移动整个数据库。

只读表空间,因此您不会每周都备份整个数据库,这可能需要花费数小时,并且即使您限制了速率,您也无法忍受这段时间内的性能下降。

由于规模庞大,仅在固定日期备份某些表空间,尽管许多地方没有这么大的数据库。同上点的原因。

根据您的应用程序,假设存在可以在应用程序端彼此独立运行的模块。如果他们每个人都有自己的一组表空间,您可以将一个应用程序表空间脱机进行重组,而不会影响其他模块……它们可以正常运行。

至于数据和索引的分离:传统的原因是将两者放在不同的磁盘上,这样它们就不会在性能上相互竞争。对于当今的存储功能来说问题不大,例如 SAN,它们实际上都是相同的存储区域,但是有仍然存在考虑到如果您将所有对象都放在同一个表空间中,而您无法在本地将索引与表分开,那么即使使用本地管理的表空间,您也会在文件头级别发生争用!!即使您在一个表空间中创建了 20 个数据文件,您也无法决定表和索引的去向,然后有一天您会注意到文件头级别存在重大争用,因为针对索引所在表的大量活动碰巧在同一个数据文件中!事实上废弃那个。如果你只得到了一个TS,那么你毫无疑问会遇到文件头争。

进行这种逻辑分离有更多原因,不,这在很大程度上与性能无关,而与生产环境中的管理有关。