Почему запуск SQLite (через python) приводит к «неофициальному» заполнению памяти? - PullRequest
2 голосов
/ 27 июня 2011

Я имею дело с некоторыми большими (десятки миллионов записей, около 10 ГБ) файлами базы данных с использованием SQLite. Я делаю стандартный интерфейс этого питона.

Когда я пытаюсь вставить миллионы записей в базу данных или создать индексы для некоторых столбцов, мой компьютер медленно исчерпывает память. Если я смотрю на нормальный системный монитор, похоже, что большая часть системной памяти свободна. Однако когда я использую top, похоже, у меня почти нет свободной системной памяти. Если я сортирую процессы по их потреблению памяти, то ни один из них не использует более пары процентов моей памяти (включая процесс python, выполняющий sqlite).

Куда уходит вся память? Почему top и системный монитор Ubuntu расходятся во мнениях относительно того, сколько у меня системной памяти? Почему top говорит мне, что у меня очень мало свободной памяти, и в то же время не показывает, какой процесс (ы) использует (и) всю память?

Я использую Ubuntu 11.04, sqlite3, python 2.7.

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

10 к 1 говорит, что вас смущает буфер / кэш файловой системы linux

см.

Проверьте это, выполнив (как root)

echo 3 > /proc/sys/vm/drop_caches
0 голосов
/ 27 июня 2011

Память может быть не назначена процессу, но это может быть, например, файл в файловой системе tmpfs (иногда / dev / shm, / tmp). Вы должны показать нам вывод top или free (обратите внимание, что эти инструменты не показывают единственное значение «использования памяти»), чтобы позволить нам рассказать подробнее об использовании памяти.

В случае вставки записей в базу данных это может быть временное изображение, созданное для текущей транзакции, до того, как оно будет зафиксировано в реальной базе данных. Разделение вставки на несколько отдельных транзакций (если применимо) может помочь.

Я просто догадываюсь, недостаточно данных.

P.S. Кажется, я неправильно прочитал исходный вопрос (я предполагал, что компьютер замедляется), и нет никаких проблем. Ответ Сихе, вероятно, лучше

...