Я создал базу данных, содержащую в общей сложности 3 таблицы для определенной цели. Общий размер всех таблиц составляет около 850 МБ - очень скудный ... из которых одна отдельная таблица содержит около 800 МБ (включая индекс) данных и 5 миллионов записей (ежедневное добавление около 6000 записей).Таблица PostgreSQL в памяти
Система PG-Windows с 8 ГБ оперативной памяти Windows 7 ноутбук с SSD. Я выделил 2048MB как shared_buffers, 256MB как temp_buffers и 128MB как work_mem. Я выполняю один запрос несколько раз против единственной таблицы - надеясь, что таблица останется в ОЗУ (отсюда приведенные выше параметры). Но, хотя я вижу всплеск в использовании памяти во время выполнения (примерно на 200 МБ), я не вижу, чтобы потребление памяти оставалось не менее 500 МБ (чтобы данные оставались в памяти). Все функции postgres exe показывают размер 2-6 МБ в диспетчере задач. Следовательно, я подозреваю, что LRU не сохраняет данные в памяти.
Среднее время выполнения запроса составляет около 2 секунд (очень простой запрос одной таблицы) ... но мне нужно довести его до 10-20 мс или даже поменьше, если это возможно, только потому, что существует слишком много раз, то же самое будет выполнено и может быть достигнуто только за счет хранения информации в памяти. Любые советы?
С уважением, Капило
Немного связано: http://dba.stackexchange.com/q/53415/7788 –
Проверьте 'pg_fincore' (если он работает в Windows). Это может быть полезно. Обычно я считаю, что поведение кэша Windows бесполезно. –
Я проверил два комментария. Но они на самом деле не связаны. Моя проблема проста. Несмотря на то, что вы выбрасываете 2 ГБ оперативной памяти в качестве shared_buffers и имеете хороший размер временных и рабочих mems, почему не запускается использование памяти? Я все еще вижу, что использование памяти всем postgres.exe составляет всего менее 200 МБ. Я не уверен, что таблица вообще находится в памяти. – Kapil