2011-12-09 7 views
0

다음 코드를 끊고 있지만, 오라클 인스턴트 클라이언트 11g를 사용하는 경우 끊고, pool.release (코네티컷 주)에cx_Oracle과 + 오라클 인스턴스 클라이언트 11g 인스턴트 클라이언트 10g와 올바른 작동


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과 소스 코드에 보면, 그것은 라인

status = OCISessionRelease(connection->handle, 
      connection->environment->errorHandle, NULL, 0, mode);

모든 아이디어를 어떻게 해결하는 방법에 seesionpool.c에 손을입니까?

PPS : OS Windows XP 및 2008R2

답변

1

어제 같은 증상이 나타났습니다. 세션 풀이있는 멀티 스레드 응용 프로그램에서 세션을 릴리스 할 때 최대 2 분 동안 중단되는 경우가 있습니다.

당신은 아마 다음과 같은 오라클의 버그 중 하나 타격

:

버그 10,157,313 - 과도한 CPU 사용 및 풀링 OCI 세션을 사용하여 OCISessionRelease의 성능 저하 (문서의 ID 10157313.8)

버그 10157313 : OCI 세션 풀링 사용시 CPU 사용량이 늘어나고 사용 시간이 오래갑니다. 11.2

자세한 내용은 Oracle Metalink를 참조하십시오.

Oracle 클라이언트 소프트웨어를 11.2.0.3 이상으로 업데이트하면 (예 : InstantClient 11.2.0.3) 도움이 될 것 같습니다.