首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cx_Oracle + oracle实例客户端11g挂起

cx_Oracle + oracle实例客户端11g挂起
EN

Stack Overflow用户
提问于 2011-12-09 16:48:34
回答 2查看 1.6K关注 0票数 0

下一步代码在instant client 10g上工作正常,但在使用oracle instant client 11g时挂起,挂起在pool.release(conN)上,

代码语言:javascript
复制
import time
print '---------------------------------'
import cx_Oracle
print cx_Oracle.clientversion()
time.sleep(1)
pool = cx_Oracle.SessionPool('login', 'pass', "dbserver:1521/db", 1, 6, 2)
pool.timeout = 60
con11 = pool.acquire()
con12 = pool.acquire()
con13 = pool.acquire()
con14 = pool.acquire()
con15 = pool.acquire()
pool.release(con11)
pool.release(con12)
pool.release(con13)
pool.release(con14)
pool.release(con15)
for i in xrange(100000):
    print '-=-' + str(i) + '-=-'
    print str(pool.opened) + " " + str(pool.busy)
    con1 = pool.acquire()
    cursor = con1.cursor()
    cursor.execute("SELECT * FROM DUAL")
    count = cursor.fetchall()[0][0]
    cursor.close()
    print str(pool.opened) + " " + str(pool.busy)
    con2 = pool.acquire()
    cursor = con2.cursor()
    cursor.execute("SELECT * FROM DUAL")
    count = cursor.fetchall()[0][0]
    cursor.close()
    print str(pool.opened) + " " + str(pool.busy)
    con3 = pool.acquire()
    cursor = con3.cursor()
    cursor.execute("SELECT * FROM DUAL")
    count = cursor.fetchall()[0][0]
    cursor.close()
    print str(pool.opened) + " " + str(pool.busy)
    t1 = time.time()
    pool.release(con3)
    t2 = time.time()
    print t2 - t1
    print str(pool.opened) + " " + str(pool.busy)
    t1 = time.time()
    pool.release(con2)
    t2 = time.time()
    print t2 - t1
    t1 = time.time()
    pool.release(con1)
    t2 = time.time()
    print t2 - t1
    print str(pool.opened) + " " + str(pool.busy)
print '---------------------------------'

PS:我看了一下cx_Oracle的源代码,它的手在sesionpool.c在线

代码语言:javascript
复制
    status = OCISessionRelease(connection->handle,
            connection->environment->errorHandle, NULL, 0, mode);

有没有办法解决这个问题?

PPS:操作系统Windows XP和2008R2

EN

回答 2

Stack Overflow用户

发布于 2012-11-13 09:13:58

http://cx-oracle.sourceforge.net/html/session_pool.html

注此对象是DB API的扩展,仅在Oracle 9i中可用。

票数 1
EN

Stack Overflow用户

发布于 2013-09-25 15:01:49

我昨天也有同样的症状:在一个带有会话池的多线程应用程序中,有时释放会话会挂起长达2分钟。

您可能遇到了以下Oracle错误之一:

错误10157313 -使用OCISessionRelease会话池时,CPU使用率过高且性能低下(文档ID 10157313.8)

错误10157313 :使用11.2时,OCI会话池会增加CPU使用率,并需要很长时间才能释放

有关详情,请参阅Oracle Metalink。

将Oracle客户端软件更新到11.2.0.3或更高版本(例如InstantClient 11.2.0.3)似乎会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8443065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档