|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
Юзаю 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.
П.С. У меня "Джойнами". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2017, 16:12 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
potkin, Профайлером не пользовались? возможно жрёт память какой-нибудь враппер system.data.sqlite, а не сама либа. Надо бы точно выяснить где именно. Как происходит чтение? в цикле по записно либо как-то всё сразу идёт в некий массив? "out of memory" это исключение .NET? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2017, 18:43 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
potkin, Размеры таблиц в единицы миллионов записей это ничто на самом деле. Волноваться можно начинать когда подрастишь базу на три-четыре порядка. Проблема определенно либо в драйвере, либо уже в самом клиенте. Впрочем, у тебя же .Net? Тогда проблемы с памятью гарантированы изначально. Впрочем, можешь еще посмотреть на файловую систему. Если запрос кривой, то он может, скидывая промежуточные результаты во временный файл, сожрать совершенно неприличные объемы на диске. И тогда источником "out of memory" будет банальное отсутствие места на HDD (или невозможность FS поддерживать файл большого объема). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2017, 19:15 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
VSVLAD Ни циклов ни массивов нет. Тупо запрос и результат - сведённая (сгрупированная) таблица данных, записей ~1 - 1000 (ну макс. 5 тыщь не более). White Owl Во всех запросах группировки (по нескольким полям), без группировки работает нормально (суммирование в селекте убрал). Получаю на выходе огромное к-во записей, но работает. Да и есть проект на Qt по Линукс. Ладно, буду разбираться ... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2017, 12:11 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
Для начала можно попробовать "проблемные" запросы "штатной" утилитой sqlite3[.exe] И станет понятно, где не хватает памяти ... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2017, 12:47 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
White Owl, Можно уточнить в каких таких случаях sqlite ругается "out of memory" при нехватке диска? в случае диска ошибка другая #define SQLITE_FULL 13 /* Insertion failed because database is full */ ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2017, 15:37 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
PPAWhite Owl, Можно уточнить в каких таких случаях sqlite ругается "out of memory" при нехватке диска? в случае диска ошибка другая #define SQLITE_FULL 13 /* Insertion failed because database is full */Нет, эта ошибка если на саму базу места не хватает. А когда СУБД обрабатывает тяжелый запрос, она сбрасывает промежуточные результаты во временные файлы. И обычно, место под эти временные файлы находится там-же куда ОС сбрасывает свой свап. И если кончается место на этом устройстве (предполагая что файл базы лежит на отдельном диске), можно получить конфликт с ОС - когда уже сама система не может больше растить свап-файл и тогда СУБД выдаст SQLITE_NOMEM ошибку. Ну или как вариант, если для свапа выделен отдельный диск (или свап вообще запрещен) - можно забить память всякой фигней и получать ошибку нехватки памяти вообще на любой чих. Правда тогда не обязательно иметь картинку как описывает ТС, "любой чих" это не "упали на запросе" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2017, 17:56 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
SQLite ничего не кэширует при SELECT запросе просто выдает запись за записью 2 модератор почему удалил? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2017, 19:42 |
|
sqlite out of memory exception
|
|||
---|---|---|---|
#18+
MaratIskSQLite ничего не кэширует при SELECT запросе просто выдает запись за записьюЭто не совсем правда. Для большинства задач, где требуется встроенная БД, кэширование просто не нужно. Поэтому, по умолчанию, кэширование выключено. Но его можно включить... https://www.sqlite.org/sharedcache.html А уж будет это включено в используемом конкретном драйвере подключения к высокоуровневому языку программирования или нет - смотрите документацию на драйвер. MaratIsk2 модератор почему удалил?Потому что предыдущий пост был не об SQLite. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 19:07 |
|
|
start [/forum/topic.php?fid=54&msg=39555317&tid=2008473]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 410ms |
0 / 0 |