powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / sqlite out of memory exception
9 сообщений из 9, страница 1 из 1
sqlite out of memory exception
    #39534820
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзаю SQLite в 2-х проектах:
1) На Qt WinForms 64 bit (Win7-10 x64 4-16 GB, Linux x64 4-8 GB)
2) ASP.NET MVC 64 bit (Win Serv 2012 x64 8 GB)
Версии библиотек последние.

Вначале я юзал x86, при росте базы я впервые 2-а года назад получил исключение "out of memory", погуглил и понял, что не хватает памяти x86, перешёл на x64. Проблема исчезла. Но сейчас опять появилась.
И это как на Линуксе, так и на Винде. Все оси 64 битные, библиотеки тоже. Памяти от 4 - 16 Гиг.

Например, запрос к таблицам:
docs ~0.5 млн записей
payments ~2,5 млн записей
contractors ~0,1 млн записей
План запроса показывают, что все индексы используются, тупого перебора нет.

Запросы разные, даже простой запрос выдаёт ошибку:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 
FROM docs, payments, contractors 
WHERE 
 (docs.docDate between @d1 and d2) and 
 (doc.docid=payments.docid) and 
 ...



П.С. У меня "Джойнами".
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39534969
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin,

Профайлером не пользовались? возможно жрёт память какой-нибудь враппер system.data.sqlite, а не сама либа. Надо бы точно выяснить где именно. Как происходит чтение? в цикле по записно либо как-то всё сразу идёт в некий массив? "out of memory" это исключение .NET?
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39534988
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin,

Размеры таблиц в единицы миллионов записей это ничто на самом деле. Волноваться можно начинать когда подрастишь базу на три-четыре порядка.
Проблема определенно либо в драйвере, либо уже в самом клиенте. Впрочем, у тебя же .Net? Тогда проблемы с памятью гарантированы изначально.

Впрочем, можешь еще посмотреть на файловую систему. Если запрос кривой, то он может, скидывая промежуточные результаты во временный файл, сожрать совершенно неприличные объемы на диске. И тогда источником "out of memory" будет банальное отсутствие места на HDD (или невозможность FS поддерживать файл большого объема).
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39537428
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD
Ни циклов ни массивов нет.
Тупо запрос и результат - сведённая (сгрупированная) таблица данных, записей ~1 - 1000 (ну макс. 5 тыщь не более).
White Owl
Во всех запросах группировки (по нескольким полям), без группировки работает нормально (суммирование в селекте убрал).
Получаю на выходе огромное к-во записей, но работает.
Да и есть проект на Qt по Линукс.
Ладно, буду разбираться ...
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39537444
_____void_____
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала можно попробовать "проблемные" запросы
"штатной" утилитой sqlite3[.exe]

И станет понятно, где не хватает памяти ...
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39537574
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Можно уточнить в каких таких случаях sqlite ругается "out of memory" при нехватке диска?
в случае диска ошибка другая
#define SQLITE_FULL 13 /* Insertion failed because database is full */
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39537663
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPAWhite Owl,

Можно уточнить в каких таких случаях sqlite ругается "out of memory" при нехватке диска?
в случае диска ошибка другая
#define SQLITE_FULL 13 /* Insertion failed because database is full */Нет, эта ошибка если на саму базу места не хватает.
А когда СУБД обрабатывает тяжелый запрос, она сбрасывает промежуточные результаты во временные файлы. И обычно, место под эти временные файлы находится там-же куда ОС сбрасывает свой свап. И если кончается место на этом устройстве (предполагая что файл базы лежит на отдельном диске), можно получить конфликт с ОС - когда уже сама система не может больше растить свап-файл и тогда СУБД выдаст SQLITE_NOMEM ошибку.
Ну или как вариант, если для свапа выделен отдельный диск (или свап вообще запрещен) - можно забить память всякой фигней и получать ошибку нехватки памяти вообще на любой чих. Правда тогда не обязательно иметь картинку как описывает ТС, "любой чих" это не "упали на запросе" :)
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39555317
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLite ничего не кэширует при SELECT запросе
просто выдает запись за записью

2 модератор
почему удалил?
...
Рейтинг: 0 / 0
sqlite out of memory exception
    #39556365
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaratIskSQLite ничего не кэширует при SELECT запросе просто выдает запись за записьюЭто не совсем правда.
Для большинства задач, где требуется встроенная БД, кэширование просто не нужно. Поэтому, по умолчанию, кэширование выключено. Но его можно включить...
https://www.sqlite.org/sharedcache.html

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

MaratIsk2 модератор
почему удалил?Потому что предыдущий пост был не об SQLite.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / sqlite out of memory exception
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]