暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 多租户数据库与有限的磁盘读取吞吐量

askTom 2017-02-27
297

问题描述

嗨,AskTom团队,

我有相对较小的SaaS应用程序与 “穷人” 多租户数据库体系结构,在每个表中有一个tenantId字段和应用程序服务器正确生成SQL查询与tenantId在where子句

有成千上万的租户,最大的表有数百万行。

数据库运行在IaaS云平台上,磁盘读取吞吐量有限 ~ 30 MBps。

现在,我遇到了 (我认为) 计划优化问题。对于一些租户 (大约上万行)ALL_ROWS based optimizer选择完整的扫描计划,这可能是有意义的,因为基于tenantId索引的计划有更多的成本。但是全扫描会导致much more disk reads而且许多这些并发运行的SQL查询通常会将读取吞吐量提高到平台限制。

我尝试使用基于规则的优化器,它工作得更好,但也不是最佳的,它增加了CPU使用率,在许多其他情况下,该计划也不好。

在这种情况下,你有什么建议?

非常感谢。

马丁

专家解答

需要考虑的一些选项

a) 如果只是一些计划不佳的SQL,请使用sql计划管理或配置文件将其锁定。

b) 您是否能够使用分区来获得租户之间的物理分隔

c) 如果不是 (a),则将视图划分为可能只是将最大的租户划分为自己的细分市场。

d) 切换到first_rows_n,以更强烈地倾向于索引扫描

e) 操纵系统统计信息 (dbms_stats.set_system_stats) 以更强烈地倾向于索引扫描


对我来说,(a) 似乎是一个相对较低的风险停止间隙解决方案,(b) 似乎是一个潜在的更长的行动方案,考虑到你目前的设置,但这有许可的影响。所有选项都需要仔细进行基准测试/测试,以确保避免回归

其他人欢迎补充他们的观点。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论