2017-02-20 10 views
0

Мне интересно, где/как позволить PostgreSQL (9.6) обрабатывать проблемы памяти между вторичным хранилищем (например, жесткими дисками) и буферами памяти?Как обрабатывать буфер и вторичное хранилище с помощью программирования сервера PostgreSQL (SPI)?

Например, как загрузить релевантные данные в память, когда некоторые запросы, которые запрашиваются, не находятся в буфере; и как очистить некоторые данные на диске, когда буфер памяти заполнен?

Я еще не программировал сервер. Но когда я посмотрел на Server Programming Interface и раздел о memory management, я не могу найти упоминаний о «вторичном хранилище» или «буфере» и т. Д. Где такие проблемы обрабатываются?

Можете ли вы дать некоторые указания по этому поводу?

ответ

0

Я думаю, вы здесь смущены.

Функции управления памятью, которые вы указали выше, предназначены для выделения и управления памятью, которая остается выделенной после завершения вашей функции (но освобождается при завершении вызывающего оператора), например. чтобы содержать результаты, чтобы вернуться к вызывающей функции.

Управление хранением данных и буферизация данных происходят на другом, гораздо более низком уровне, и вы не можете влиять на это через SPI. SPI - это просто интерфейс для кода C, запущенного на сервере, для запуска SQL-операторов. Что касается общих буферов, то не имеет значения, выдаете ли вы запрос от psql или через SPI.

+0

Спасибо за ваш ответ. «Управление хранилищами и буферизация данных происходят на другом, гораздо более низком уровне, и вы не можете влиять на это через SPI». Итак, есть ли способ вне SPI, чтобы убедиться, что серверные расширения, например, могут обрабатывать управление хранилищами? то есть не генерировать ошибки из памяти из-за ограничений основной памяти. – tinlyx

+0

Для этого вам необходимо правильно настроить параметры операционной системы и базы данных. Невозможно избежать OOM, если у вас не хватает памяти ... Какова реальная проблема, которую вы пытаетесь решить? –

+0

Например, напишите пользовательскую функцию SQL в C, которая не является OOM, если необходимые данные для функции превышают физическую память, но не место на жестком диске. – tinlyx

 Смежные вопросы

  • Нет связанных вопросов^_^