Django ужасно медленно работает с 8000 экземплярами модели (Как удалить базу данных PostgreSQL)? - PullRequest
0 голосов
/ 23 февраля 2011

У меня на сервере разработки запущена установка Django. Я недавно использовал python manage.py loaddata 8000models.json. Теперь все очень медленно. Страницы не загружаются. python manage.py flush не возвращается. ModelType.objects.count() не возвращается.

(Или, может быть, они вернутся, если я подожду достаточно долго.)

Что здесь происходит? Действительно ли Джанго не в состоянии обработать такое количество данных? Или есть другая проблема?

Обновление : я наблюдаю эту проблему на PostgreSQL, но не на SQLite с тем же объемом данных. Возможно, мне просто нужно стереть PostgreSQL и перезагрузить данные.

Обновление 2 : Как я могу стереть PostgreSQL и выполнить сброс? python manage.py reset appname не отвечает.

Обновление 3 : Вот как я пытаюсь стереть PostgreSQL:

#! bin/bash

sudo -u postgres dropdb mydb
sudo -u postgres createdb mydb
sudo -u postgres psql mydb < ~/my-setup/my-init.sql
python ~/path/to/manage.py syncdb

Однако это вызывает следующие ошибки:

dropdb: database removal failed: ERROR:  database "mydb" is being accessed by other users
DETAIL:  There are 8 other session(s) using the database.
createdb: database creation failed: ERROR:  database "mydb" already exists
ERROR:  role "myrole" cannot be dropped because some objects depend on it
DETAIL:  owner of table mydb.mytable_mytable
# ... more "owner of table", "owner of sequence" statements, etc

Как я могу закрыть эти другие сессии? У меня не работает Apache. Я использовал только один экземпляр сервера разработки Django за раз. Однако, когда он перестал отвечать, я убил его с помощью Control + Z. Может быть, это привело к тому, что он не освободил соединение с базой данных, что вызвало эту проблему? Как я могу обойти это?

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Ctrl-Z просто останавливает процесс, он не убивает его.(Я предполагаю, что вы используете bash) введите jobs в своем терминале, и вы должны увидеть, что старые процессы все еще работают.

После того, как вы убьете все задания, которые обращаются к базе данных PostgreSQL, вы должны иметь возможностьотбрасывать, создавать и синхронизировать, как вы ожидаете.

0 голосов
/ 23 февраля 2011

Вы пытались проверить, что ваша база данных postrgres все еще отвечает, судя по звукам, она, вероятно, обрабатывает данные, которые вы сказали ей загрузить.

При загрузке данных вы должны просто дать ей сначала закончить. Если для отображения страниц по-прежнему требуется очень много времени, вместо этого следует проверить свои запросы.

Использование .count () даже в PostgreSQL (с довольно медленным счетом) с 8000 элементов должно возвращаться в течение достаточно длительного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...