【问题标题】:Oracle10g database/table TuningOracle10g 数据库/表调优
【发布时间】:2009-09-08 07:53:54
【问题描述】:

我正在为我的 ASP.NET 网站使用 Oracle 数据库 10g 标准版。我有一张表,它将每天填充数据(每天大约 10000 行)。该表中数据的增长率为 100%,即每年的行数都会增加 10000 行。

这是图形和水晶等报告的主表。

我知道当数据增加时,选择查询性能会下降。 在这里,我希望您帮助调整我的 Oracle 数据库/表,以便选择查询的性能始终保持良好?

我不太擅长oracle。请帮帮我........

【问题讨论】:

    标签: asp.net oracle


    【解决方案1】:

    实际上,没有理由说明性能会随着表的增加而降低。如果您的查询使用索引来检索单个行或聚焦集(即 INDEX RANGE SCAN),那么随着表的增长,性能应该保持稳定。这部分取决于您的数据概况。具有低聚簇因子的索引将继续执行,但具有高聚簇因子的索引会降级。 Find out more.

    您几乎肯定会遇到问题的地方是运行不使用索引或使用 INDEX FAST FULL SCAN 的查询。随着表的增长,这样的查询显然会随着时间的推移而退化。为了处理这种情况,您可以构建预先聚合数据的物化视图。

    最好的一般建议是

    1. 阅读Oracle online documentation。很漂亮 全面。
    2. 开始对查询进行基准测试' 现在的性能(使用 Statspack)。 这样你就可以做到 趋势分析和发现时间 开始出错了。

    【讨论】:

    • 谢谢你,索引真的有这么大的区别,我真的不知道索引有多重要。
    • 通过 B 树的搜索时间为 O(log(n)),因此即使使用最佳索引,查询也会变慢。您的数据呈指数级增长,因此您的性能应该会线性下降,这意味着计算机的运行速度应该比性能下降的速度更快:-D
    【解决方案2】:

    真的很简单,确保您的索引与您的查询相匹配。检查您的解释计划,通常的 oracle 资料 - 阅读有关该主题的内容,您会发现很多信息!

    这取决于您的查询如何运行。如果您的查询只提取了一个月的数据,您可以通过按月进行分区而受益匪浅。然后,您将只能获得 1/12 的数据。但是,如果查询没有以这种方式受到限制,那么这可能无济于事。

    最后,请确保您没有阅读所有数据,只是为了在报告中进行总结。因此,如果您这样做,请考虑创建一个通宵作业来创建一个聚合表,然后进行查询。

    哦;此外,如果插入速度是一个问题,您可能希望减少索引数量 - 如果是这种情况,您可能需要为插入实时数据的那个单独的报告表,然后每晚同步数据或其他东西.

    【讨论】:

    • 感谢您的信息,请您解释一下有关按月分区表的信息。这怎么可能?我们应该改变什么?
    • 我自己不知道细节,因为我不是 DBA,但这是我作为报告架构师一直使用的一个功能 - 你必须四处搜索并阅读oracle 功能本身!
    • 分区是企业版许可证的额外收费。由于 Hemant 使用的是标准版,因此分区不是可用的解决方案。
    • 哦,那么有没有其他方法可以做到这一点。有什么指导方针吗?
    【解决方案3】:

    生成额外的测试数据并测试性能是否确实下降。也许你什么都不担心:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-16
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多