Форум сайта python.su
Всем привет, пожалуйста, подскажите, с чем может быть связан столь долгий коннект к базе.
import psycopg2
import psycopg2.extras as DBExtra
import psycopg2.extensions
from time import time
cursor_factory = DBExtra.DictCursor
class TimeProfiler():
_started = []
labels = {}
def start(self, label):
self._started.append(label)
self.labels[label] = time()
def stop(self, label):
if self.labels.has_key(label):
if label in self._started: self._started.remove(label)
self.labels[label] = '%.4f' % (time() - self.labels[label])
else: self.labels[label] = 0
def get_list(self):
labels = {}
for key in self.labels.keys():
if key not in self._started: labels[key] = self.labels[key]
return labels
T = TimeProfiler()
T.start('connect')
c = psycopg2.connect('host=127.0.0.1 user=postgres dbname=shopmaker')
T.stop('connect')
print T.get_list()
python /home/alex/test.py
{'connect': '0.1348'}
Офлайн
ChuckС тем что это постгрес?
с чем может быть связан столь долгий коннект к базе.
Офлайн
pgbouncer поставь или смени хостера В)
Офлайн
slav0nicХостера? В смысле - это для веб-сайта?
pgbouncer поставь или смени хостера В)
Офлайн
Это для вебсайта.
Что вы имеете в виду? Для каждого нового пользователя я заново подключаюсь к базе. Не для каждого запроса в движке сайта, разумеется.
Офлайн
ChuckА другие приложения с того же компьютера (например, утилиты, идущие в комплекте с PostgreSQL) также долго это делают? Или это проблем только вашей программы?
Всем привет, пожалуйста, подскажите, с чем может быть связан столь долгий коннект к базе.Время выполненияimport psycopg2
import psycopg2.extras as DBExtra
import psycopg2.extensions
from time import time
cursor_factory = DBExtra.DictCursor
class TimeProfiler():
_started = []
labels = {}
def start(self, label):
self._started.append(label)
self.labels[label] = time()
def stop(self, label):
if self.labels.has_key(label):
if label in self._started: self._started.remove(label)
self.labels[label] = '%.4f' % (time() - self.labels[label])
else: self.labels[label] = 0
def get_list(self):
labels = {}
for key in self.labels.keys():
if key not in self._started: labels[key] = self.labels[key]
return labels
T = TimeProfiler()
T.start('connect')
c = psycopg2.connect('host=127.0.0.1 user=postgres dbname=shopmaker')
T.stop('connect')
print T.get_list()python /home/alex/test.py
{'connect': '0.1348'}
Офлайн
ChuckУ меня получается:
Это для вебсайта.
Что вы имеете в виду? Для каждого нового пользователя я заново подключаюсь к базе. Не для каждого запроса в движке сайта, разумеется.
Офлайн
DcDrПовторил спустя минут двадцать. Получил уже задержку 0.052, а последующие опять 0.026-0.026
У меня получается:
{'connect': ‘0.0920’}
{'connect': ‘0.0250’}
{'connect': ‘0.0250’}
То есть первый раз значительно дольше
Офлайн
DcDrПерезапустил PostgreSQL - подключение осталось таким же быстрым.DcDrПовторил спустя минут двадцать. Получил уже задержку 0.052, а последующие опять 0.026-0.026
У меня получается:
{'connect': ‘0.0920’}
{'connect': ‘0.0250’}
{'connect': ‘0.0250’}
То есть первый раз значительно дольше
Очевидно, что разница между первым и последующими запусками тестирующей утилиты - это кэширование на уровне операционной системы (файловой системы), PostgreSQL.
То есть psycopg2 и Python здесь не причем.
В принципе у Вас не такие уж большие задержки - я на весьма жирном железе свои замеры производил - если ваши замеры с реального хостинга, то довольно хорошие показатели.
Офлайн
Переделал на пулы:
Один запуск:
{'create pool': '0.1290'}
{'connect 1': '0.0000', 'create pool': '0.1290'}
{'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1290'}
{'connect 3': '0.0000', 'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1290'}
{'create pool': '0.1150'}
{'connect 1': '0.0000', 'create pool': '0.1150'}
{'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1150'}
{'connect 3': '0.0000', 'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1150'}
T.start('create pool')
#pool = psycopg2.pool.ThreadedConnectionPool(5, 10, 'host=127.0.0.1 user=test dbname=test password=test')
pool = psycopg2.pool.PersistentConnectionPool(5, 10, 'host=127.0.0.1 user=test dbname=test password=test')
T.stop('create pool')
print T.get_list()
T.start('connect 1')
c = pool.getconn()
T.stop('connect 1')
print T.get_list()
T.start('connect 2')
c = pool.getconn()
T.stop('connect 2')
print T.get_list()
T.start('connect 3')
c = pool.getconn()
T.stop('connect 3')
print T.get_list()
Офлайн