|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Здравствуйте, подскажите почему при первом подключении к базе, подключение происходит довольно долго, особенно заметно на базах с большим объемом данных. После того как база загрузилась, то последующие запуски приложения с загрузкой базы происходит быстро, но только до тех пор пока компьютер не перезагрузишь, после перезагрузки, первый запуск опять долгий. Вопросы такие: 1. почему так происходит? 2. как можно от этого избавиться, есть ли способ сделать первый запуск быстрым как и последующие? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 19:33 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Возможно первый раз идет чтение с диска, затем из кэша, т.е. из памяти. Если так, то просто сделать первый запуск в холостую, т.е. планировщик при старте ОС запускает какую-то прогу, которая обращается к базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 19:39 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima TЕсли так, то просто сделать первый запуск в холостую, т.е. планировщик при старте ОС запускает какую-то прогу, которая обращается к базе.Не совсем понятно о чем вы и при чем тут планировщик. Опишу ситуацию подробнее. У меня есть приложение написанное на C#, с помощью библиотеки sqlite.dll я открываю базу. При первом запуске приложения база открывается долго, затем если закрыть программу и снова программу запущу и открою базу, то база открывается очень быстро, до тех пор пока я не перезагружу компьютер. После перезагрузки, первое открытие базы программой всегда долгое. Это происходит с каждой базой, которою я открываю программой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 19:51 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Железо опиши. В нем проблема. Но по описанным симптомам просто достаточно сделать один фальшстарт и дальше все будет работать. Это самый дешевый вариант решения проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 20:39 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima TЖелезо опиши. В нем проблема. Но по описанным симптомам просто достаточно сделать один фальшстарт и дальше все будет работать. Это самый дешевый вариант решения проблемы.Дело не в железе. Потому как погуглив, понял что проблема не у одного меня, но ответа на решение проблемы я не нашел. Вот к примеру у человека такая же проблема . Я в английском несилен, но из того что понял проблему там так и не решили. Вот еще тут , но тот ответ что там указан: Код: sql 1.
мне не помог. Так что тут дело не в железе, проблема распространенная. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 20:51 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Neff, Поддерживаю первый ответ ( 21723373 ). Дай базе расширение которое не обрабатывается виндами как потенциально опасное или собственное виндовое. Убедись что твоя база не лежит на сетевом диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 22:31 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
White OwlNeff, Поддерживаю первый ответ ( 21723373 ). Дай базе расширение которое не обрабатывается виндами как потенциально опасное или собственное виндовое. Убедись что твоя база не лежит на сетевом диске. Расширения менял, на проблему это никак не повлияло. База лежит на локальном диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 22:37 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Хочу уточнить, скорее не при первом подключении базы, а при первом запросе SELECT, затем все работает быстро, даже если приложение закрыть а потом снова открыть и делать запросы к базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 23:30 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Вот еще аналогичная проблема, без ответа. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 02:42 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Поискав информацию в сети, понял вашу мысль. Вы считаете, что при первом запуске происходит кеширование файла базы, средствами Windows, при первом запуске. Я решил проверить это, вот пример: 1. делаю первый запрос Код: sql 1.
Этот первый запрос длиться 30 секунд, после того как данные загрузились, закрываю приложение, затем открываю и снова выполняю данный запрос, данные загружаются за 1 секунду. 2. изменяю запрос на запрос Код: sql 1.
И снова первый запрос занимает 30 секунд, а последующие 1 секунду. Я так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 17:13 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Neff, Может проблема в вашем провайдере данных (C# -> провайдер -> ADO.NET -> SQlite ). Попробуйте выполнить запрос через стандартную утилиту для sqlite, если задержек не будет, то проблема не в самих данныхи ни в ядре БД, тогда надо смотреть ваше приложение ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 19:04 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
NeffЯ так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит. Возможно ни при чем. Но надо сделать ситуацию повторяемой, чтобы все могли увидеть и подтвердить. Как понимаю как-то завязаны старт ОС и использование LIKE. Свои данные мало кто готов предоставить для опытов, отчасти поэтому тут 21680375 выкладывал скрипт создания относительно большой БД со штрихкодами, можно на ее основе попытаться повторить данную проблему. Сегодня некогда, завтра позанимаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 19:29 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
VSVLADNeff, Может проблема в вашем провайдере данных (C# -> провайдер -> ADO.NET -> SQlite ). Попробуйте выполнить запрос через стандартную утилиту для sqlite, если задержек не будет, то проблема не в самих данныхи ни в ядре БД, тогда надо смотреть ваше приложениеЗдравствуйте, пробовал открывал базу в сторонних приложениях, например в SQLite Expert. Первый раз так же открывает с задержкой, последующие запуски открывает сразу за 1 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 21:41 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima TNeffЯ так понял кеширование средствами OC тут не причем? Не могу понять, почему так происходит. Возможно ни при чем. Но надо сделать ситуацию повторяемой, чтобы все могли увидеть и подтвердить. Как понимаю как-то завязаны старт ОС и использование LIKE Открывал базу на других машинах и без использования LIKE, пробовал открывать базу сторонними утилитами, проблема та же. Долгий первый запуск, затем все быстро, пока не перезагрузишь компьютер или не скопируешь базу в другой каталог и снова открыть. Так что и при смене каталога первый запуск с задержкой, что странно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 21:45 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima TСвои данные мало кто готов предоставить для опытов, отчасти поэтому тут 21680375 выкладывал скрипт создания относительно большой БД со штрихкодами, можно на ее основе попытаться повторить данную проблему.Я попробовал скачал архив и преобразовалего по инструкции в посте и преобразовал ее в базу. Сторонней утилитой база открылась сразу без задержек. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 22:14 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Блин ребята, проблему решил благодаря этому 21680375 посту, спасибо Dima T за наводку. Проанализировав созданную с конвертированную базу sqlite.exe, увидел, что там добавлен индекс к каждому столбцу. Добавил индекс ко всем столбцам в своей базе через CREATE INDEX и все нормально заработало, база стала открываться быстро всегда и везде. Раньше то же пробовал CREATE INDEX, но не для всех столбцов, в этом видимо и была проблема. В общем спасибо за ответы, что натолкнули меня свой "косяк". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2018, 22:47 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Столкнулся с новой проблемой... Если я создаю таблицу, потом заполняю ее данными, затем создаю индексы через команду CREATE INDEX, то таблица всегда открывается быстро. Но если я создаю таблицу, затем создаю индексы, а потом заполняю таблицу данными, то проблема остается. Так и должно быть? Как правильно создавать индексы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 04:25 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
NeffДобавил индекс ко всем столбцам в своей базе через CREATE INDEX и все нормально заработало Это бред какой-то и так точно не надо делать. Индекс нужен для быстрого поиска, т.е. если ты пишешь Код: sql 1.
то тут нужен индекс по name, тогда поиск будет не перебором всей таблицы, а по индексу будут выбраны только нужные записи. Минус индексов в том что при каждом insert/update требуется перестройка индекса, что тоже занимает время. Вкратце описал, не буду углубляться, при желании это в книгах почитаешь. Явно дело не в индексах. Несколько раз перечитал топик, согласен с подозрениями White Owl на антивирус, но сменой расширения его не проведешь. Просто отключи антивирус и запусти свою прогу - не будет тормозов, значит дело в нем, добавь прогу в исключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 15:27 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima T, да я почитал про индексы и с вами согласен, но то что без индексов первый запуск таблицы составляет 30 секунд, а с индексами 1 сек это факт. Как сделать по другому, что бы без индексов загружалось за те же 1 сек, я не знаю. В обще, ранее использовал под хранение данных, базы Access и там таких проблем не было, при том же формате таблиц и данных. Но затем пришлось искать альтернативу, так как у Access ограничение в 2 гб, а разделение таблиц на части делать не хочется. Вот решил попробовать SQLite базы, но тут проблем оказалось не меньше, индексы, после удаления данных каждый раз вызывать команду VACUUM, что тоже не вариант, а PRAGMA auto_vacuum при создании таблиц не работает, так как видимо нужно включить параметр SQLITE_DEFAULT_AUTOVACUUM при компиляции библиотеки. Если подскажите варианты баз, для хранения больших объемов данных буду благодарен. Нужно что бы база хранилась на локальном диске, одним файлом и помимо текста, можно было сохранять в базе документы в формате Word и PDF. Знаю что хранить файлы в базе плохая идея, но так нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 16:58 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 18:58 |
|
Медленное подключение к базе sqlite при первом подключении
|
|||
---|---|---|---|
#18+
Dima T, спасибо за рекомендации. Нужно будет попробовать с хранением файлов в отдельной базе. Просто файлов очень много (около 30 тыс.), но все небольшого размера, в среднем 100-200 кб, хранить и контролировать это не очень удобно. Была мысля хранить это все в zip архиве, что бы все было одним файлом, но как это все будет работать, когда в него придется добавлять/удалять файлы не знаю, надо потом протестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2018, 21:43 |
|
|
start [/forum/topic.php?fid=54&msg=39727922&tid=2008419]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 153ms |
0 / 0 |