Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / sqlite out of memory exception / 9 сообщений из 9, страница 1 из 1
11.10.2017, 16:12
    #39534820
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlite out of memory exception
Юзаю 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
11.10.2017, 18:43
    #39534969
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlite out of memory exception
potkin,

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

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

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

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

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

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

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

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

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


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