Кто тормозит - я, sqlite или django? [solved]
Создал в django минимально возможную модель из одного-единственного поля:
В базе получилось оно самое:
Написал тестовую программку для загрузки данных из файла. Она проверяет, есть ли уже объект с таким значением (
На чтение работает нормально: если программу прервать и запустить снова, то ранее загруженные записи она находит мгновенно, а на создании новых опять тормозит.
База пустая, там одна-единственная таблица, других приложений в проекте вообще нет. Удалять базу целиком и создавать заново пробовал, не помогает.
Вопрос: это sqlite по жизни такой тормозной, или django с ним как-то криво работает, или это я что-то не так делаю?
Debian squeeze (6.0.3, stable)
python 2.6.6-3+squeeze6
python-django 1.2.3-3+squeeze2
libsqlite3-0 3.7.3-1
Нагрузка на машине никакая. Сама программа потребляет порядка 2% CPU и в основном находится в состоянии D, то бишь, в ожидании завершения ввода-вывода.
Скорость записи на диск сама по себе вполне нормальная:
Upd: проблема была вызвана автокоммитами после каждого save(). Решается использованием декоратора @transaction.commit_manually для функции, внутри которой крутится цикл, и transaction.commit() в конце этой функции.
Но почему автокоммиты занимают столько времени, я всё равно не понимаю.
foo=models.IntegerField(primary_key=True). В базе получилось оно самое:
CREATE TABLE "foo_foo" (
"foo" integer NOT NULL PRIMARY KEY
);Написал тестовую программку для загрузки данных из файла. Она проверяет, есть ли уже объект с таким значением (
Foo.objects.get(foo=...)), если нет - создаёт и сохраняет в базу. При отключённой записи в базу программа летает, но стоит раскомментировать o.save() у свежесозданного объекта - начинаются дикие тормоза, на добавление одной записи уходит порядка секунды.На чтение работает нормально: если программу прервать и запустить снова, то ранее загруженные записи она находит мгновенно, а на создании новых опять тормозит.
База пустая, там одна-единственная таблица, других приложений в проекте вообще нет. Удалять базу целиком и создавать заново пробовал, не помогает.
Вопрос: это sqlite по жизни такой тормозной, или django с ним как-то криво работает, или это я что-то не так делаю?
Debian squeeze (6.0.3, stable)
python 2.6.6-3+squeeze6
python-django 1.2.3-3+squeeze2
libsqlite3-0 3.7.3-1
Нагрузка на машине никакая. Сама программа потребляет порядка 2% CPU и в основном находится в состоянии D, то бишь, в ожидании завершения ввода-вывода.
Скорость записи на диск сама по себе вполне нормальная:
# dd if=/dev/zero of=1.tmp bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.0781606 s, 1.3 GB/s
Upd: проблема была вызвана автокоммитами после каждого save(). Решается использованием декоратора @transaction.commit_manually для функции, внутри которой крутится цикл, и transaction.commit() в конце этой функции.
Но почему автокоммиты занимают столько времени, я всё равно не понимаю.
