내 응용 프로그램은 PostgreSQL에서 임시 테이블을 사용합니다. 새로운 8.4 릴리스에서 성능을 테스트 한 결과 을 이전 8.2 릴리스와 비교했을 때 임시 테이블 은 열 번째가 번 느립니다.8.3 이후 PostgreSQL TEMP TABLE 성능 저하가 발생 했습니까?
8.3 릴리스의 테스트는 8.3에서도 느린 것으로 나타났습니다. 모든 기지의 구성을 비교해 보면 비슷합니다. 모든 기지는 동일한 서버에서 작동합니다. 내 응용 프로그램은 JDBC 드라이버를 사용하는 동안 나는 그것을 테스트하기 위해 자이 썬 을 사용 :
import time
import traceback
import sys
from java.sql import DriverManager
from java.lang import Class
Class.forName("org.postgresql.Driver")
def test_bench(db, temp):
if temp:
temp_str = ' TEMP '
temp_desc = 'temp '
else:
temp_str = ' '
temp_desc = 'regular'
try:
c = db.createStatement()
c.execute("CREATE %s TABLE test_table_md_speed(id serial primary key, txt varchar(100))" % temp_str)
cnt = '?'
try:
t0 = time.time()
for i in range(1000):
c.execute("INSERT INTO test_table_md_speed(txt) VALUES ('ala ma %d kota')" % i)
t2 = time.time()
rs = c.executeQuery("SELECT COUNT(*) AS ile FROM test_table_md_speed")
while (rs.next()):
cnt = rs.getString(1)
print("%s\ttime: %7.3f [s]\tcnt: %s" % (temp_desc, (t2-t0), cnt))
finally:
c.execute("DROP TABLE test_table_md_speed")
c.close()
except:
print("\nthere were errors!")
s = traceback.format_exc()
sys.stderr.write("%s\n" % (s))
def test_db(db_url, usr, passwd):
print("\n\n--------------")
db = DriverManager.getConnection(db_url, usr, passwd)
try:
c = db.createStatement()
rs = c.executeQuery("SELECT version()")
while (rs.next()):
print('ver: %s' % (rs.getString(1)))
test_bench(db, 0)
test_bench(db, 1)
finally:
db.close()
test_db('jdbc:postgresql://db-test64:5432/db_stable?stringtype=unspecified', 'postgres', 'postgres')
test_db('jdbc:postgresql://db-test64:5434/db_stable?stringtype=unspecified', 'postgres', 'postgres')
test_db('jdbc:postgresql://db-test64:5435/db_stable?stringtype=unspecified', 'postgres', 'postgres')
내가도는 Win32에서 유사한의 ActivePython를 사용하여 테스트 및 ODBC를 작성하고이 프로그램이 동일한 결과를 보여줍니다. 내 결과 :
C:\tools\pyscripts\>jython jdbc_pg_bench.py
--------------
ver: PostgreSQL 8.2.12 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
regular time: 12.016 [s] cnt: 1000
temp time: 1.187 [s] cnt: 1000
--------------
ver: PostgreSQL 8.3.6 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
regular time: 11.922 [s] cnt: 1000
temp time: 10.516 [s] cnt: 1000
--------------
ver: PostgreSQL 8.4.0 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21), 64-bit
regular time: 13.375 [s] cnt: 1000
temp time: 13.609 [s] cnt: 1000
당신은 8.3 및 8.4 릴리스에서 임시 테이블의 속도 같은 저하를 관찰 하는가? TEMP 테이블 동작의 변경 사항에 대한 정보가 있습니까?
편집
내가, 내 Windows 시스템에서 PostgreSQL의 8.2 및 8.4을 설치 10 000 인서트를 테스트하고 8.2은 임시 테이블로 훨씬 빠른 것을 보인다
ver: PostgreSQL 8.2.11 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)
regular time: 40.672 [s] cnt: 10000
temp time: 14.859 [s] cnt: 10000
ver: PostgreSQL 8.4.0, compiled by Visual C++ build 1400, 32-bit
regular time: 56.860 [s] cnt: 10000
temp time: 49.110 [s] cnt: 10000
테스트 해 주셔서 감사합니다. 다른 기계에서 시험을 반복하겠습니다. –
새로 설치 한 Windows 컴퓨터에서 테스트했는데 쿼리에 추가 한대로 8.4의 일반 테이블과 임시 테이블은 거의 차이가없는 반면 8.2 임시 테이블은 훨씬 빠릅니다. –