кэширование в sqlite или, может быть, WSL / Ubuntu - как это работает? - PullRequest
0 голосов
/ 30 сентября 2019

Я работал над подпрограммой, используя сценарии оболочки WSL / Ubuntu, вызывающие запросы sqlite3. В настоящее время почти все закомментировано, в то время как я концентрируюсь на последней части, поэтому многие файлы и таблицы не меняются. В конце скрипта находится простой запрос для примерно 20 таблиц с повторными вариантами

A5=$(sqlite3 $home/SQL/Cellar_analyse.db 'SELECT count(*) FROM table5;')
printf "%-8s%10d\t%-20s\n" "table5" $A5 "full" >> $tmp/tableStats 

, за которыми следует

cat $tmp/tableStats

, поэтому я получаю список длины всех таблиц,

Этим утром, когда я впервые разбудил мою машину, я повторно запустил тот же сценарий, что и вчерашним вечером, который основывался на начальной точке head -10 file |, поэтому было только 10 записей. Для запуска потребовалось 3 минуты 11 секунд, в основном это был расчет таблиц. Затем я изменил «head» на «cat», увеличив таким образом до нескольких тысяч записей, но весь сценарий впоследствии выполнялся за 2 секунды. На предыдущем ежедневном опыте он будет работать быстро до конца дня (независимо от сна машины), но завтра утром он снова состарится при первом запуске.

Так что я озадачен. Кто-нибудь может объяснить, как и где этот частичный, но не полный результат кэшируется? Это делается ОС (предположительно, Ubuntu, а не Windows?) Или sqlite? Он хранится в памяти или на диске;может ли кеш вызываться, обращаться или манипулировать каким-либо образом? Что вызывает полное повторное сканирование? Есть ли какая-либо команда для ручного запуска полного повторного сканирования, если я когда-либо захочу это сделать?

Это просто любопытство, у меня нет реальной проблемы, которую нужно решить.

...