Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Медленное подключение к базе sqlite при первом подключении / 21 сообщений из 21, страница 1 из 1
03.11.2018, 19:33
    #39727654
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Здравствуйте, подскажите почему при первом подключении к базе, подключение происходит довольно долго, особенно заметно на базах с большим объемом данных. После того как база загрузилась, то последующие запуски приложения с загрузкой базы происходит быстро, но только до тех пор пока компьютер не перезагрузишь, после перезагрузки, первый запуск опять долгий.

Вопросы такие:
1. почему так происходит?
2. как можно от этого избавиться, есть ли способ сделать первый запуск быстрым как и последующие?

Спасибо.
...
Рейтинг: 0 / 0
03.11.2018, 19:39
    #39727657
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Возможно первый раз идет чтение с диска, затем из кэша, т.е. из памяти. Если так, то просто сделать первый запуск в холостую, т.е. планировщик при старте ОС запускает какую-то прогу, которая обращается к базе.
...
Рейтинг: 0 / 0
03.11.2018, 19:51
    #39727663
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima TЕсли так, то просто сделать первый запуск в холостую, т.е. планировщик при старте ОС запускает какую-то прогу, которая обращается к базе.Не совсем понятно о чем вы и при чем тут планировщик.
Опишу ситуацию подробнее. У меня есть приложение написанное на C#, с помощью библиотеки sqlite.dll я открываю базу. При первом запуске приложения база открывается долго, затем если закрыть программу и снова программу запущу и открою базу, то база открывается очень быстро, до тех пор пока я не перезагружу компьютер. После перезагрузки, первое открытие базы программой всегда долгое. Это происходит с каждой базой, которою я открываю программой.
...
Рейтинг: 0 / 0
03.11.2018, 20:39
    #39727678
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Железо опиши. В нем проблема. Но по описанным симптомам просто достаточно сделать один фальшстарт и дальше все будет работать. Это самый дешевый вариант решения проблемы.
...
Рейтинг: 0 / 0
03.11.2018, 20:51
    #39727681
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima TЖелезо опиши. В нем проблема. Но по описанным симптомам просто достаточно сделать один фальшстарт и дальше все будет работать. Это самый дешевый вариант решения проблемы.Дело не в железе. Потому как погуглив, понял что проблема не у одного меня, но ответа на решение проблемы я не нашел.
Вот к примеру у человека такая же проблема . Я в английском несилен, но из того что понял проблему там так и не решили.

Вот еще тут , но тот ответ что там указан:
Код: sql
1.
CREATE INDEX i_tableone_entry ON tableOne( entry );


мне не помог.

Так что тут дело не в железе, проблема распространенная.
...
Рейтинг: 0 / 0
03.11.2018, 22:31
    #39727704
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Neff,

Поддерживаю первый ответ ( 21723373 ).
Дай базе расширение которое не обрабатывается виндами как потенциально опасное или собственное виндовое.
Убедись что твоя база не лежит на сетевом диске.
...
Рейтинг: 0 / 0
03.11.2018, 22:37
    #39727706
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
White OwlNeff,

Поддерживаю первый ответ ( 21723373 ).
Дай базе расширение которое не обрабатывается виндами как потенциально опасное или собственное виндовое.
Убедись что твоя база не лежит на сетевом диске.
Расширения менял, на проблему это никак не повлияло. База лежит на локальном диске.
...
Рейтинг: 0 / 0
03.11.2018, 23:30
    #39727709
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Хочу уточнить, скорее не при первом подключении базы, а при первом запросе SELECT, затем все работает быстро, даже если приложение закрыть а потом снова открыть и делать запросы к базе.
...
Рейтинг: 0 / 0
04.11.2018, 02:42
    #39727727
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Вот еще аналогичная проблема, без ответа.
...
Рейтинг: 0 / 0
04.11.2018, 17:13
    #39727838
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Поискав информацию в сети, понял вашу мысль. Вы считаете, что при первом запуске происходит кеширование файла базы, средствами Windows, при первом запуске. Я решил проверить это, вот пример:

1. делаю первый запрос
Код: sql
1.
SELECT column1, column2 FROM Table1 WHERE column1 LIKE 'test'

Этот первый запрос длиться 30 секунд, после того как данные загрузились, закрываю приложение, затем открываю и снова выполняю данный запрос, данные загружаются за 1 секунду.

2. изменяю запрос на запрос
Код: sql
1.
SELECT column1 FROM Table1 WHERE column1 LIKE 'test'

И снова первый запрос занимает 30 секунд, а последующие 1 секунду.

Я так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит.
...
Рейтинг: 0 / 0
04.11.2018, 19:04
    #39727874
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Neff,

Может проблема в вашем провайдере данных (C# -> провайдер -> ADO.NET -> SQlite ). Попробуйте выполнить запрос через стандартную утилиту для sqlite, если задержек не будет, то проблема не в самих данныхи ни в ядре БД, тогда надо смотреть ваше приложение
...
Рейтинг: 0 / 0
04.11.2018, 19:29
    #39727880
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
NeffЯ так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит.
Возможно ни при чем. Но надо сделать ситуацию повторяемой, чтобы все могли увидеть и подтвердить. Как понимаю как-то завязаны старт ОС и использование LIKE.

Свои данные мало кто готов предоставить для опытов, отчасти поэтому тут 21680375 выкладывал скрипт создания относительно большой БД со штрихкодами, можно на ее основе попытаться повторить данную проблему. Сегодня некогда, завтра позанимаюсь.
...
Рейтинг: 0 / 0
04.11.2018, 21:41
    #39727922
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
VSVLADNeff,

Может проблема в вашем провайдере данных (C# -> провайдер -> ADO.NET -> SQlite ). Попробуйте выполнить запрос через стандартную утилиту для sqlite, если задержек не будет, то проблема не в самих данныхи ни в ядре БД, тогда надо смотреть ваше приложениеЗдравствуйте, пробовал открывал базу в сторонних приложениях, например в SQLite Expert. Первый раз так же открывает с задержкой, последующие запуски открывает сразу за 1 сек.
...
Рейтинг: 0 / 0
04.11.2018, 21:45
    #39727924
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima TNeffЯ так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит.
Возможно ни при чем. Но надо сделать ситуацию повторяемой, чтобы все могли увидеть и подтвердить. Как понимаю как-то завязаны старт ОС и использование LIKE Открывал базу на других машинах и без использования LIKE, пробовал открывать базу сторонними утилитами, проблема та же. Долгий первый запуск, затем все быстро, пока не перезагрузишь компьютер или не скопируешь базу в другой каталог и снова открыть. Так что и при смене каталога первый запуск с задержкой, что странно.
...
Рейтинг: 0 / 0
04.11.2018, 22:14
    #39727934
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima TСвои данные мало кто готов предоставить для опытов, отчасти поэтому тут 21680375 выкладывал скрипт создания относительно большой БД со штрихкодами, можно на ее основе попытаться повторить данную проблему.Я попробовал скачал архив и преобразовалего по инструкции в посте и преобразовал ее в базу. Сторонней утилитой база открылась сразу без задержек.
...
Рейтинг: 0 / 0
04.11.2018, 22:47
    #39727947
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Блин ребята, проблему решил благодаря этому 21680375 посту, спасибо Dima T за наводку. Проанализировав созданную с конвертированную базу sqlite.exe, увидел, что там добавлен индекс к каждому столбцу. Добавил индекс ко всем столбцам в своей базе через CREATE INDEX и все нормально заработало, база стала открываться быстро всегда и везде. Раньше то же пробовал CREATE INDEX, но не для всех столбцов, в этом видимо и была проблема. В общем спасибо за ответы, что натолкнули меня свой "косяк".
...
Рейтинг: 0 / 0
05.11.2018, 04:25
    #39727980
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Столкнулся с новой проблемой...
Если я создаю таблицу, потом заполняю ее данными, затем создаю индексы через команду CREATE INDEX, то таблица всегда открывается быстро.

Но если я создаю таблицу, затем создаю индексы, а потом заполняю таблицу данными, то проблема остается.

Так и должно быть? Как правильно создавать индексы?
...
Рейтинг: 0 / 0
05.11.2018, 15:27
    #39728126
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
NeffДобавил индекс ко всем столбцам в своей базе через CREATE INDEX и все нормально заработало
Это бред какой-то и так точно не надо делать.
Индекс нужен для быстрого поиска, т.е. если ты пишешь
Код: sql
1.
select ... where name = 'товар'


то тут нужен индекс по name, тогда поиск будет не перебором всей таблицы, а по индексу будут выбраны только нужные записи.
Минус индексов в том что при каждом insert/update требуется перестройка индекса, что тоже занимает время. Вкратце описал, не буду углубляться, при желании это в книгах почитаешь.
Явно дело не в индексах.

Несколько раз перечитал топик, согласен с подозрениями White Owl на антивирус, но сменой расширения его не проведешь. Просто отключи антивирус и запусти свою прогу - не будет тормозов, значит дело в нем, добавь прогу в исключения.
...
Рейтинг: 0 / 0
05.11.2018, 16:58
    #39728144
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima T, да я почитал про индексы и с вами согласен, но то что без индексов первый запуск таблицы составляет 30 секунд, а с индексами 1 сек это факт. Как сделать по другому, что бы без индексов загружалось за те же 1 сек, я не знаю.

В обще, ранее использовал под хранение данных, базы Access и там таких проблем не было, при том же формате таблиц и данных. Но затем пришлось искать альтернативу, так как у Access ограничение в 2 гб, а разделение таблиц на части делать не хочется.

Вот решил попробовать SQLite базы, но тут проблем оказалось не меньше, индексы, после удаления данных каждый раз вызывать команду VACUUM, что тоже не вариант, а PRAGMA auto_vacuum при создании таблиц не работает, так как видимо нужно включить параметр SQLITE_DEFAULT_AUTOVACUUM при компиляции библиотеки.

Если подскажите варианты баз, для хранения больших объемов данных буду благодарен. Нужно что бы база хранилась на локальном диске, одним файлом и помимо текста, можно было сохранять в базе документы в формате Word и PDF. Знаю что хранить файлы в базе плохая идея, но так нужно.
...
Рейтинг: 0 / 0
05.11.2018, 18:58
    #39728200
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
NeffDima T, да я почитал про индексы и с вами согласен, но то что без индексов первый запуск таблицы составляет 30 секунд, а с индексами 1 сек это факт. Как сделать по другому, что бы без индексов загружалось за те же 1 сек, я не знаю.
Индексы нужны, но там где надо. Как уже написал у них есть плюсы и минусы, т.е. прежде чем добавить индекс - надо понимать зачем он нужен.

NeffВ обще, ранее использовал под хранение данных, базы Access и там таких проблем не было, при том же формате таблиц и данных. Но затем пришлось искать альтернативу, так как у Access ограничение в 2 гб, а разделение таблиц на части делать не хочется.
Если у тебя база 2+ Гб и первый запрос делает скан всей базы, то считай: скорость чтения HDD ~100 мб/сек, т.е. 20+ сек в идеале. Скорость чтения памяти (кэша диска) 3-4 Гб/сек, т.е. меньше секунды. Скорее всего ответ в этом, сделай как я советовал 21723373 и забей.
NeffВот решил попробовать SQLite базы, но тут проблем оказалось не меньше, индексы, после удаления данных каждый раз вызывать команду VACUUM, что тоже не вариант, а PRAGMA auto_vacuum при создании таблиц не работает, так как видимо нужно включить параметр SQLITE_DEFAULT_AUTOVACUUM при компиляции библиотеки.
Ацессовские базы тоже пухнут и требуют сжатия, что по сути тот же VACUUM. auto_vacuum не рекомендую использовать, при твоих гигабайтах это будет тормоз после каждого удаления.
NeffЕсли подскажите варианты баз, для хранения больших объемов данных буду благодарен. Нужно что бы база хранилась на локальном диске, одним файлом и помимо текста, можно было сохранять в базе документы в формате Word и PDF. Знаю что хранить файлы в базе плохая идея, но так нужно.
Идея очень плохая, но если так нужно - хотя бы вынеси файлы в отдельную базу. Сделай одну нормальную базу, а вторую - куча файлов одной таблицей: (file_id int, file_data text) и там индекс по file_id чтобы быстро находить нужный файл.
По-хорошему надо использовать полноценный SQL-сервер (MSSQL, MySQL, Postgres, Oracle), но ты хочешь на файл-сервере прожить, тут только sqlite.
...
Рейтинг: 0 / 0
05.11.2018, 21:43
    #39728250
Neff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленное подключение к базе sqlite при первом подключении
Dima T, спасибо за рекомендации. Нужно будет попробовать с хранением файлов в отдельной базе. Просто файлов очень много (около 30 тыс.), но все небольшого размера, в среднем 100-200 кб, хранить и контролировать это не очень удобно. Была мысля хранить это все в zip архиве, что бы все было одним файлом, но как это все будет работать, когда в него придется добавлять/удалять файлы не знаю, надо потом протестировать.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Медленное подключение к базе sqlite при первом подключении / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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