barabansheg
Июль 19, 2012 00:19:16
Слишком много запросов к бд? Значит проблема в коде? Разные страницы сайта выдают такое переодически. Куда копать?
Для работы с бд юзаю джанговский orm
fata1ex
Июль 19, 2012 00:21:59
Поменяйте max_connections или что-то в этом роде в конфиге mysql.
barabansheg
Июль 19, 2012 00:32:37
К сожалению, сайт на хостинге, доступа к конфигам БД нет =(
Потрясу хостеров.
FlaPy
Июль 19, 2012 02:46:30
обычно эта ошибка возникает когда забываем закрывать соединения и открываем новые.
Если выполнить SQL запрос:
SHOW variables LIKE "max_connections";
то можно увидеть доступное количество соединений. Попытаться изменить это значение, например на 150, можно выполнив запрос :
SET global max_connections = 150;
Но эти значения будут сброшены в default при перезапуске сервера MySQL
barabansheg
Июль 19, 2012 11:25:28
Хостеры написали, что ближе к ночи (как раз, когда я работаю над сайтом), они перезапускают сервер. Иногда выдает 504 ошибку, но чаще - too many connections. Если проблема в том, что не закрываю соединения, то как их закрывать используя orm джанговский?
fata1ex
Июль 19, 2012 12:43:36
ORM стоит выше уровня закрывания соединений. Покажите проблемное место в коде, когда возникают ошибки. Если непонятно, где это происходит, самое время подружиться с логгированием.
barabansheg
Июль 19, 2012 14:35:47
На разных страницах. Есть где два или три запроса, а есть где и один. Покурю логгирование на днях)
fata1ex
Июль 19, 2012 14:45:43
Интересно. А что за запросы такие покажите?
barabansheg
Июль 19, 2012 15:27:45
Вот например, при работе с этой вьюхой бывает:
@is_teacher
def list_pages(request):
if request.method == 'POST':
post_pages = request.POST.getlist('pages[]')
if request.POST['action'] == u'delete':
for page_id in post_pages:
p = Page.objects.get(id=int(page_id))
p.delete()
user = User.objects.get(id=request.session['user'])
menu = Menu.objects.get(owner = user)
if len(menu.items) < 1:
pages = Page.objects.filter(user=user)
else:
pages = 0
return render_to_response('list_pages.html', locals(), context_instance=RequestContext(request))
Даже если POST запрос в неё не посылаю, все равно иногда выдает ошибку эту
reclosedev
Июль 19, 2012 17:35:55
А post_pages - большой список?
Может тогда:
Page.objects.fiter(id__in=map(int, post_pages)).delete()
И может user'a проще вот так:
Еще
смущает. items - это что?