我运行完全相同的Python函数,一个用作PostgreSQL PL / Python,另一个在PostgreSQL之外用作常用的Python脚本。
令人惊讶的是,当我使用select * from pymax7(20000);
调用PostgreSQL PL / Python时,它平均需要65秒,而当我调用通常的Python脚本python myscript.py 20000
时,它平均需要48秒。计算运行查询和脚本10次的平均值。
预计会有这样的差异吗? PostgreSQL RDBMS(PL / Python)中的Python如何在性能方面与Python之外的Python进行比较?
我在Ubuntu 12.04 64位上运行PostgreSQL 9.1和Python 2.7。
PostgreSQL PL / Python:
CREATE FUNCTION pymax7 (b integer)
RETURNS float
AS $$
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987)
return a
$$ LANGUAGE plpythonu;
的Python:
import time
import sys
def pymax7 (b):
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987) # keeping Python busy
return a
def main():
numIterations = int(sys.argv[1])
start = time.time()
print pymax7(numIterations)
end = time.time()
print "Time elapsed in Python:"
print str((end - start)*1000) + ' ms'
if __name__ == "__main__":
main()
答案 0 :(得分:4)
应该没有任何区别。两个测试用例对我来说都有大约相同的运行时间,53秒加减1。
我确实调整了PL / Python测试用例,使用与普通Python测试用例相同的测量技术:
CREATE FUNCTION pymax7a (b integer)
RETURNS float
AS $$
import time
start = time.time()
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987)
end = time.time()
plpy.info("Time elapsed in Python: " + str((end - start)*1000) + ' ms')
return a
$$ LANGUAGE plpythonu;
这将告诉您是否涉及任何非Python开销。 FWIW,对我来说,这个打印和客户端打印的psql与总时间之间的差异始终小于1毫秒。