问题描述
如何确定数据库的最佳SGA大小
例如,我们的一个数据库当前为625 GB (我根据dba_segments;中的选择和(字节) /1024/1024/1024确定)
我们有一个数据迁移应用程序,可以执行数十万个单行操作(是的,我知道一行一行,慢慢来)
它使用大约1500个并行会话,即。应用程序级别的并行性。
SGA被设置为700GB (是的700GB ),我认为这个数字对于工作负载来说是很高的,因为我在测试运行期间看到了很多缓冲区繁忙的等待,我还注意到1/3的表和索引在缓冲区缓存中具有接近100%的块。
谢谢
公元前
MT、MI
例如,我们的一个数据库当前为625 GB (我根据dba_segments;中的选择和(字节) /1024/1024/1024确定)
我们有一个数据迁移应用程序,可以执行数十万个单行操作(是的,我知道一行一行,慢慢来)
它使用大约1500个并行会话,即。应用程序级别的并行性。
SGA被设置为700GB (是的700GB ),我认为这个数字对于工作负载来说是很高的,因为我在测试运行期间看到了很多缓冲区繁忙的等待,我还注意到1/3的表和索引在缓冲区缓存中具有接近100%的块。
谢谢
公元前
MT、MI
专家解答
“太大”的定义不是由数据库定义的,而是由基础结构定义的。如果您的机器有512G内存, 700G内存就太大: -)或者如果机器有2TB内存, 700G内存就太大,但内存可以在其他地方更智能地使用。
顺便说一句,如果你不使用HugePages ,它可能会太大了...因为如果不使用, 1500个会话的页表条目本身就可能是疯狂的。尝试执行此操作:
grep PageTables /proc/meminfo
这只是用来管理“真实”内存的内存: -)
您没有指定它的缓冲缓存还是共享池,在这里占主导地位,所以我将假设前者。我将从V$DB_CCH_ADVICE开始,以估计在不改变有效性的情况下,缓冲区高速缓存可以减少多少(如果有) ,并从那里开始工作。
虽然在db和OS级别管理该数量的内存都有开销,但我谨此建议,在1500个会话执行逐行活动时,您将面临比缓冲高速缓存大小调整更大的挑战: -)
顺便说一句,如果你不使用HugePages ,它可能会太大了...因为如果不使用, 1500个会话的页表条目本身就可能是疯狂的。尝试执行此操作:
grep PageTables /proc/meminfo
这只是用来管理“真实”内存的内存: -)
您没有指定它的缓冲缓存还是共享池,在这里占主导地位,所以我将假设前者。我将从V$DB_CCH_ADVICE开始,以估计在不改变有效性的情况下,缓冲区高速缓存可以减少多少(如果有) ,并从那里开始工作。
虽然在db和OS级别管理该数量的内存都有开销,但我谨此建议,在1500个会话执行逐行活动时,您将面临比缓冲高速缓存大小调整更大的挑战: -)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




