PostgreSQL в базе данных памяти - PullRequest
21 голосов
/ 02 декабря 2009

Я хочу запустить свой сервер базы данных PostgreSQL из памяти. Причина в том, что на моем новом сервере у меня 24 ГБ памяти, и вряд ли какая-либо из них используется.

Я знаю, что могу запустить эту команду, чтобы создать виртуальный диск:

mdmfs -s 1024m md2 /mnt

И теоретически я мог бы PostgreSQL хранить там свои данные. Но проблема в том, что в случае сбоя или перезагрузки сервера данные исчезнут.

По сути, я хочу, чтобы база данных всегда загружалась в память, чтобы ей не приходилось обращаться к жесткому диску для чтения каждой записи, поскольку у меня есть тонны памяти, а память быстрее, чем жесткие ,

Есть ли способ сделать это, в то же время имея PostgreSQL для записи на диск, чтобы я не потерял данные в случае отказа сервера? Или есть способ кешировать все данные в памяти?

Ответы [ 4 ]

10 голосов
/ 01 июля 2011

Я сейчас использую потоковую репликацию, которая является асинхронной. Это означает, что мой MASTER может работать все в памяти, с отдельным экземпляром SLAVE с использованием традиционного диска.

Перезагрузка машины может включать остановку SLAVE, копирование данных postgresql обратно на ramdisk, а затем перезапуск MASTER с последующим SLAVE. Это была бы интересная возможность, которая хорошо сравнивается с чем-то вроде REDIS, но с преимуществом избыточности / hotstandby / backup / sql / rich toolset и т. Д.

6 голосов
/ 02 декабря 2009

Вы видели главу Настройка сервера ? проверьте это, затем Google postgresql memory tuning.

3 голосов
/ 02 декабря 2009

Я должен верить, что Postgres написан таким образом, чтобы в полной мере использовать доступную оперативную память на сервере. Как вы уже догадались, надежного способа сделать это за пределами Postgres нет.

В Postgres транзакции гарантируют, что все операции являются атомарными, поэтому, если питание отключается при записи в базу данных Postgres, вы потеряете только эту конкретную операцию, а не всю базу данных.

1 голос
/ 02 декабря 2009

Ответ кешируется. Посмотрите, как добавить память на сервер, а затем настроить PostgreSQL для максимального использования памяти. Кроме того, кеш файловой системы поможет с этим, делая некоторые из них автоматически. Вы сможете повысить производительность почти так же, как если бы она находилась в памяти, за исключением первого попадания, при этом вам не нужно было управлять ею самостоятельно, а иметь базу данных больше физической памяти.

...