过大的SGA会直接降低Oracle数据库的性能--这是神话还是事实?

ghhaqwfi  于 2023-01-20  发布在  Oracle
关注(0)|答案(1)|浏览(217)

是否有人有过在Oracle数据库中创建良好SGA-保留/库存的实际经验(或读过或听说过任何实际经验)?(例如,50%的SGA当前从未使用,而只是作为将来的保留内存添加!)
它(本身!所以,* 直接 *!)会不会对数据库性能造成某种影响?(所以,完全不考虑T. Kyte的观点"一个巨大的SGA掩盖了一个潜在的问题",也不考虑HugePages与其他示例的冲突和其他间接问题)
谢谢你。

myzjeezk

myzjeezk1#

SGA比你所需要的大的唯一真实的的代价是分配更多的内存。如果你有足够的内存并且不需要它用于PGA或OS进程,那么在合理的范围内,过度分配SGA不是一件坏事。
话虽如此,还是有一些注意事项:
1.在旧的操作系统中,共享内存段的最大大小可能小于您的sga_max_size,在这种情况下,Oracle将创建多个共享内存段来满足您的请求。这在历史上被视为会对性能产生一些影响,但我无法量化影响的大小。您可以通过调整指定最大共享内存段大小的内核参数来轻松解决此问题。
1.如果允许共享池变得非常大,例如,可能扫描v$sql的监视工具可能会使用更多的CPU并花费更多的时间。
1.如果你的缓冲区缓存过大,你就有陷入bug领域的风险。我曾经遇到过大于1 TB的SGA的零星问题。记住,任何不常见的东西都没有经过很好的测试,因此更有可能隐藏bug。对于超大的SGA,还有一些推荐的参数调整。
1.如果您使用熟文件系统进行存储,并且filesystemio_options设置为ASYNC或NONE,则您的单块I/O可能由操作系统进行双缓冲,操作系统具有自己的块高速缓存。如果此高速缓存明显大于Oracle自己的缓冲区高速缓存,您将受益于一种更大的有效缓存机制-Oracle缓存中没有的内容可能在操作系统的缓存中,而且仍然可以避免物理I/O到存储。如果过度扩大SGA,则会减少OS可用于其自身块高速缓存的内存量。然后,总体有效高速缓存(两者中较大的一个)会减少,这将增加存储的I/O,并对性能产生负面影响。这种情况会一直持续到Oracle缓冲区高速缓存与以前的OS缓冲区高速缓存一样大或更大为止。事实上,Oracle建议使用直接路径I/O来绕过操作系统缓冲区缓存,但这仅在Oracle中的缓冲区缓存占用主机上的大量可用内存时才有帮助(对于单块I/O),否则可能会造成损害。
使用常识。粗略估计一下你需要多少缓存+你需要多少共享池+其他池,然后给予自己一个缓冲区。50%的增加并不是不合理的。只要保持理智--不要因为分配比你需要的多10倍的内存而浪费内存,但是如果你试图太吝啬,你会后悔的。

相关问题