就像问题问的那样;是否可以通过使用虚拟分区对表进行垂直透明分区?我想如果可能的话,这些列将只存储在单独的表空间或类似的表空间中。
在我的特定环境中,我们有一个应用服务器,每 15 分钟左右批量写入大量数据。数据比我们的报告应用程序需要的多得多。主要事实表大约有 50 列。我们使用了大约 10 个。
是否有任何场景(即使虚拟垂直分区不存在),这种方案可以提高性能?我想将您的数据拆分到多个表空间(因此可能是多个磁盘)会缩短查找时间。
就像问题问的那样;是否可以通过使用虚拟分区对表进行垂直透明分区?我想如果可能的话,这些列将只存储在单独的表空间或类似的表空间中。
在我的特定环境中,我们有一个应用服务器,每 15 分钟左右批量写入大量数据。数据比我们的报告应用程序需要的多得多。主要事实表大约有 50 列。我们使用了大约 10 个。
是否有任何场景(即使虚拟垂直分区不存在),这种方案可以提高性能?我想将您的数据拆分到多个表空间(因此可能是多个磁盘)会缩短查找时间。
问题背后的整个前提都是错误的。您不需要在表空间之间拆分数据以将 i/o 分布到更多磁盘,您需要增加 RAID10 或(更好的)ASM 阵列中的磁盘数量。尝试像您建议的那样手动调整 i/o 时,您将获得更少的性能增益、更低的空间效率和更多的维护。
ASM 击败 RAID10 主要是因为它了解写入其中的数据 - 例如,它可以改变数据块和日志之间的条带大小。
您可以通过将表分成两部分来做到这一点,将您报告的 10 列(连同主键)放在一个表(和一个单独的表空间)中,将其他 40 列放在另一个表中。然后,您可以呈现一个将两者连接在一起作为主表的视图。如果不更改应用程序,这可能无法实现。要插入,请在第一个表上使用
INSERT ALL
查询或INSTEAD OF
触发器,然后INSER
在第二个表上使用 T。虽然技术上可行,但我怀疑是否需要这样做。你最好在所有磁盘上进行宽条带化(ASM 做同样的事情 - 如果可能的话使用它)以增加可用的轴数和 IOPS,而不是有效地使一些磁盘停止运行,因为它们保存的数据不是用于报告。
Afaik,除了 LOB 存储之外,您无法将表的一部分列拆分到另一个表空间中,其中 LOB 数据可以存储在单独的表空间中。
至于性能 - 只要这些列不出现在其中,列数就不会影响 select 语句。
另一方面,将表拆分为分区和适当的索引对性能有显着影响,随着表的大小增加,这一点变得更加明显。(你没有描述你的数据,所以没有人可以建议你应该如何对表进行分区。)
虚拟分区是指通过表达式进行分区,该表达式存储为表元数据并且不会出现在表本身中。请参阅文档。
创建一个包含 10 列的实体化视图,然后索引该视图