powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Segmentation Fault
7 сообщений из 7, страница 1 из 1
Segmentation Fault
    #38915564
devspec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые участники сообщества.

Ситуация следующая.
Имеется база данных SQLite с примерно 3-мя миллиардами записей. Каждая запись - это некое поле типа CHAR и ряд дополнительных полей с различными типами. Размер файла - около 340 гб. Максимальная длина контента в поле doc - 256 симв, контент на русском языке.
Я пытаюсь создать полнотекстовый индекс и получаю ошибку Segmentation Fault.
Пытался я его создать различными способами, как под Windows (с помощью SQLite Expert и своего софта на .NET, в т.ч. c архитектурой x64), так и под Linux (как Ubuntu, так и Centos). Даже скомпилировал sqlite из исходников, включив необходимые флаги для FTS3 и FTS4 - ошибка одна и та же.

Пробовал два варианта
contentless FTS4 - это когда контент хранится в обычной таблице, а в FTS-таблице хранится только индекс ( create virtual table docs_fts using fts4(content='docs'... )

второй вариант - создать полноценную FTS-таблицу из обычной - insert into docs_fts select doc... from docs;

SQLite работает примерно 4 часа, после чего неизменно выдает Segmentation Fault. Под Windows обычно ошибка - out of memory - при том, что свободной памяти еще более чем достаточно (в том числе - в x64-софте, который теоретически может использовать все 16 гб памяти, которые у меня установлены). Видимо, это потому, что Windows не знает, что такое Segmentation Fault.
Полей со значением NULL в базе нет.

Большая просьба - подскажите, что я делаю не так и в какую сторону копать.

Спасибо.
...
Рейтинг: 0 / 0
Segmentation Fault
    #38915677
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devspecSQLite работает примерно 4 часа, после чего неизменно выдает Segmentation Fault. Под Windows обычно ошибка - out of memory - при том, что свободной памяти еще более чем достаточно
Если ты 100% уверен что проблема началась только после того как был добавлен FTS, и 1000% уверен что ничего кроме не добавлялось - тогда берешь другую версию SQLite, собираешь ее и надеешься что данная ошибка была исправлена (или еще не внесена если будешь брать более старую версию). Полистай список исправленных ошибок начиная от твоей версии и вплоть до текущей. Потом почитай багтрекер - может кто-то уже натыкался на подобное и скажет точно в какой версии ошибка возникла.

Но 99.9% шансов за то, что ошибка в твоей собственной обвязке FTS. Добавил в свое приложение диалог использующий полнотекстовый поиск, ошибся в нем - все проблемы и начались.


devspec (в том числе - в x64-софте, который теоретически может использовать все 16 гб памяти, которые у меня установлены). Видимо, это потому, что Windows не знает, что такое Segmentation Fault.Неправда. Винда прекрасно знает что такое нарушение сегментов, а на ошибку типа "не хватает памяти" количество реальной памяти никак не влияет. Сколько бы у тебя этой памяти ни было - всю можно захапать. А то что ты видишь в это время "пустую" память, так это винда врет - она выделяет некоторый кусок памяти для своих собственных нужд (в том числе и для ругани на нехватку памяти), но показывает эту память как свободную.
...
Рейтинг: 0 / 0
Segmentation Fault
    #38915736
devspec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал на трех разных версиях SQLite, в том числе - на самой последней, доступной на сайте.
Не совсем понимаю, что такое "обвязка FTS"... Базу я создал и наполнил незадолго до того, как начал пытаться создать ее полнотекстовый индекс, никакой другой работы с базой, кроме её наполнения данными, не производилось. В ней одна таблица docs , гарантированно не содержащая NULL-значений. Тоже думал, что, возможно, что-то с базой, сделал Reindex и Vacuum - Reindex происходит моментально, Vacuum происходит, хоть и долго, но успешно.
Грубо говоря мои действия:

CREATE TABLE docs ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [doc] CHAR... (тут другие поля)
(тут действия по наполнению базы данными - они загружаются моим собственным скриптом из текстовых файлов)

CREATE VIRTUAL TABLE docs_fts using fts4 (content='docs', doc... (тут другие поля)
(тут попытка INSERT INTO phrases_fts(phrases_fts) VALUES ('rebuild') дабы перестроить contentless FTS index)

или

CREATE VIRTUAL TABLE docs_fts using fts4 (doc... (тут другие поля)
(тут попытка INSERT INTO docs_fts SELECT doc... from docs;)

или

CREATE VIRTUAL TABLE docs_fts using fts3 (doc... (тут другие поля)
(тут попытка INSERT INTO docs_fts SELECT doc... from docs;)

Для каждой попытки делал новую копию исходного файла, т.к. подозревал, что база могла нарушиться после Segmentation Fault.
Даже поменял планки памяти на другие - опасался, что, возможно, память глючная.

После всех попыток результат один - Segmentation Fault.

В общем, моя совесть чиста - это, судя по всему, ошибка движка SQLite. Маловероятно, что разработчики тестировали SQLite на таких объемах данных.
Теперь нужно только понять, что же делать дальше )
Может быть попробовать INSERT INTO docs_fts SELECT doc... from docs LIMIT 0,100000000 и вставлять, например, по 100 млн записей? Возможно, ошибка из-за чрезмерно большого объема данных?
...
Рейтинг: 0 / 0
Segmentation Fault
    #38915738
devspec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибся в посте, INSERT INTO phrases_fts(phrases_fts) VALUES ('rebuild') читать как INSERT INTO docs_fts(docs_fts) VALUES ('rebuild') , набирал по памяти
...
Рейтинг: 0 / 0
Segmentation Fault
    #38915787
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devspecНе совсем понимаю, что такое "обвязка FTS"... Ты сказал что падение происходит через четыре часа.
Четыре часа чего? Что в эти четыре часа происходит?
Только загрузка данных? Если да, то через что? Через какую программу?
Вот эта программа скорее всего и глючит.

devspecВ общем, моя совесть чиста - это, судя по всему, ошибка движка SQLite. Маловероятно, что разработчики тестировали SQLite на таких объемах данных.
Теперь нужно только понять, что же делать дальше )Ну как я уже сказал:
1) Убедиться что проблема не в обвязке.
2) Попробовать другие версии движка
3) Сообщить о проблеме в багтрекере.
...
Рейтинг: 0 / 0
Segmentation Fault
    #38915799
devspec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4 часа отрабатывают те или иные команды INSERT в FTS-таблицу, которые я написал выше. Это занимает примерно одинаковое время во всех программах и во всех версиях SQLite. И после этого - Segmentation Fault.
Я думал, что проблема на поверхности, поэтому в багтрекер пока не писал. Теперь понятно, что надо писать, спасибо.
...
Рейтинг: 0 / 0
Segmentation Fault
    #38941062
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно из-за большого к-во записей.
У меня было ~300 млн записей, но текстовое поле содержало больше "символов".
Точно не помню как всё делал, но точно помню, что делал по частям.
То есть создал БД с аналогичной структурой и переносил туда данные частями.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Segmentation Fault
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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