Я работал над подпрограммой, используя сценарии оболочки 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? Он хранится в памяти или на диске;может ли кеш вызываться, обращаться или манипулировать каким-либо образом? Что вызывает полное повторное сканирование? Есть ли какая-либо команда для ручного запуска полного повторного сканирования, если я когда-либо захочу это сделать?
Это просто любопытство, у меня нет реальной проблемы, которую нужно решить.