正如问题所问的那样,是否可以通过使用虚拟分区透明地对表进行垂直划分?我可以想象,如果可能的话,列只会存储在单独的表空间或其他类似的地方。
在我的特定环境中,我们有一个应用服务器,它每15分钟左右批量地写入大量数据。有比我们的报告应用程序需要的更多的数据。主事实表大约有50列。我们用了其中的10种。
是否有任何场景(即使不存在虚拟垂直分区),这样的方案可以提高性能?我可以想象,将数据分割到多个表空间(因此也可能是多个磁盘)将提高查找时间。
发布于 2012-04-04 08:58:15
我可以想象,将数据分割到多个表空间(因此也可能是多个磁盘)将提高查找时间。
这个问题背后的整个前提都是错误的。您不需要在表空间之间拆分数据以将i/o扩展到更多磁盘,您需要增加RAID10或(更好的) ASM数组中的磁盘数量。您将获得更少的性能增益,更低的空间效率和更多的维护尝试手动调优i/o,如您所建议的。
ASM优于RAID10,主要是因为它理解写入它的数据--例如,它可以在数据块和日志之间改变条带大小。
发布于 2012-04-04 07:38:49
您可以将表分成两列,将您报告的10列(以及主键)放在一个表(和一个单独的表空间)中&另一个表中的另40列。然后,您可以显示一个将这两个视图连接在一起作为主表的视图。但是,如果没有应用程序的更改,这可能是不可行的。若要插入,请在第一个表上使用INSERT ALL查询或INSTEAD OF触发器,在第二个表上使用INSERT。
虽然技术上是可行的,但我怀疑是否需要这样做。最好是对所有磁盘(ASM也这样做--如果可能的话使用它)进行大范围的条带,以增加可用的纺锤体数量& IOPS,而不是有效地使一些磁盘停止工作,因为它们包含不用于报告的数据。
发布于 2012-04-04 06:51:24
Afaik,您不可能将表的一部分拆分到另一个表空间,除非LOB存储,LOB数据可以存储在单独的表空间中。
至于性能-列的数量不影响select语句,只要这些列不出现在它们中。
另一方面,将表分割成分区和适当的索引会对性能产生重大影响,随着表大小的增加,这种影响变得更加明显。(您没有描述您的数据,因此没有人能够建议您应该如何对表进行准确的分区。)
虚拟分区意味着通过表达式进行分区,该表达式作为表元数据存储,不出现在表本身中。见文档。
https://dba.stackexchange.com/questions/16049
复制相似问题