DBA必学:Oracle库缓存
2008-01-16 12:41:06 来源:WEB开发网库缓存锁(library cache lock)
一旦数据库对象加载到了库缓存,库缓存锁就会控制不同客户端之间对共享对象的并发访问。数据库对象必须要有这个锁才能实现串行访问,并准许单个应用程序使用对象。锁持续的事件取决于持有锁的应用程序或用户正在做什么。此外,获得此类锁还可以很容易地在库缓存中定位某个对象。
库缓存pin (livrary cache pin)
库缓存pin负责管理库缓存内的并发访问。要加载一个对象堆到内存里需要获得一个库缓存pin。此外,如果想要修改或检查某个对象,也需要库缓存pin。
Oracle为了将对象载入库缓存中,使用了锁和pin来访问或载入对象句柄和堆。锁是用来管理不同用户或应用程序进程之间的串行或并发访问。也就是说,如果有需要,一个进程可以锁定并防止其他进程访问某个对象。要在库缓存中定位一个对象也需要有锁。如果需要修改或检查某对象,则必须在将其句柄锁住后获取一个pin。如果对象不在内存里,那pin该对象就会使对象堆载入到内存中。如果代码的编译和解析一直都在进行,为了确保对象定义不在它们被使用的时候发生改变,必须要动用锁和pin的锁住机制。也就是说,对于任何要载入到库缓存的代码,首先要获取对该对象句柄的库缓存锁,如果获取失败,则发生库缓存锁等待;直到成功获取该锁,再继续获取库缓存pin,以便将对象堆pin入到库缓存。
为了确保对象和SQL代码正常有效地执行,并可供接下来其他的应用程序执行,对Oracle数据库库缓存的检测至关重要。如果总是发生一些等待事件,从而限制了对代码的并发访问,就会给库缓存带来压力,使其性能下降。在出现问题之前,运行上面提到的SQL查询语句,获取有关库缓存整体性能状况的相关信息。发生在库缓存中的大多数问题都是由应用程序或用户引起的,在接下来的篇幅里我们会讨论并解决这些问题:看看问题会出现在哪里,如何让其现身,以及解决这些问题办法。
更多精彩
赞助商链接