sonyps4.ru

В postgres постоянно растет размер временных файлов. Комментариев нет

В октябре прошлого года Microsoft анонсировала обновленный фитнес-браслет Band 2, который вызвал много споров буквально сразу после официальной презентации. Этот производитель почему-то продолжает жить в своем небольшом мире и выпускать нишевые гаджеты. Все мы понимаем, что продажи будут поддерживаться за счет многочисленных приложений, а не только благодаря дизайну и прошивке.

Увы, но сразу можно заявить, что на Microsoft Band 2 поставили крест на этапе разработки. Гаджет на старте выпустили по цене $250, то есть он дороже предыдущей модели браслета на $50. При этом даже такая цена ставит его выше, чем большинство аналогичных устройств на Android Wear (говорим про бюджетный класс). Хорошо еще, что самая доступная версия Apple Watch стоит чуть дороже.

Из-за подобной странной ситуации видим, что в Microsoft пытаются оправдаться доработкой функциональности по умолчанию: здесь добавили приложения для велосипедной прогулки, для игры в гольф, небольшую клавиатуру, доработали также интерфейс, есть встроенный барометр. Однако все еще присутствуют 3 важных недостатка: нехватка приложений, интерфейс, ориентированный на текстовые уведомления, а также неудачный дизайн этого интерфейса.

Объективно это или субъективно? Решать будете вы.

Дизайн и качество


Band 2 от Microsoft ориентирован на работу с текстовой информацией, и самый удобный способ ношения гаджета - с внутренней стороны запястья. Если у вас будет возможность протестировать самим это устройство - обязательно попробуйте надеть браслет, как мы указали.

Фитнес-браслет имеет изогнутый сенсорный AMOLED экран размером 32 х 18 мм и с разрешением 320 х 128 пикселей (255ppi). Предыдущая модель была с экраном 320 х 106 пикселей. Прогресс, как говорится, налицо. За счет того, что дисплей и корпус теперь изогнуты, браслет более плотно лежит на запястьи. Дисплей защищен стеклом Gorilla Glass 4.

Дизайн не вызывает отторжения, даже приятный. Резиновый браслет надежно будет лежать на руке. Материал не вызывает аллергической реакции, это уже проверено. Предыдущий Microsoft Band был с ремешком, который мог вызвать кожную сыпь. Еще одна деталь - часть батареи перенесли в ремешок, но увеличение толщины дискомфорта не вызывает.

Изменился не только дизайн основного модуля фитнес-браслета, но и ремешка. Мало того, что в него встроили датчик ультрафиолета, он стал более громоздким. Это повлияло на размещении гаджета на руке - придется застегивать ремешок на дальние дырочки. Но, несмотря на эти нюансы, модель Band 2 оказалась легче предшественника - нынешний вес 59г.

Хотя Microsoft Band считается фитнес-трекером, то есть он должен быть надет во время активных занятий спортом, но корпус не имеет полноценной защиты от воды. Стоит опасаться даже брызг.

Инженеры постарались сделать Band 2 одинаково удобным как для работы, так и для активного отдыха и развлечений. То есть браслет может отлично справляться с большинством задач и без подключения к смартфону (Android, Windows или iOS - нет разницы). Само же подключение требует стандартного Bluetooth сопряжения.

Разумеется, Band 2 имеет расширенную поддержку Windows-устройств. Это в первую очередь относится к использованию голосового помощника Cortana. Нужно лишь долго удерживать зажатой черную кнопку действия и сразу на вашем смартфоне запустится соответствующее приложение.

Дополнительная функциональность будет доступна после установки на смартфон приложения Microsoft Health. Это панель управления фитнес-браслетом с широкой палитрой настроек. Можно составить свою схему отслеживания прогресса во время тренировок. Аналогичная программа Google Fit в этом плане выглядит попроще.

В Microsoft Health мы получаем намного больше информации, чем нужно для отслеживания состояния здоровья.

Весь интерфейс Microsoft Band 2 представляет собой набор плиток (как в Windows 8). Всего есть 19 плиток-приложений и 13 из них можно увидеть одновременно. Какие именно - выбирать вам. Все это вы найдете в настройках.

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

Мы выше заметили, что экран Band 2 больше подходит для текстовой информации, однако читать сообщения из вашей электронной почты вы не сможете. К примеру, приложение «Почта» покажет заголовки писем и немного дополнительной информации. Фотографии просмотреть тоже не получится. Клавиатура далеко не шедевр, но умеет неплохо угадывать продолжение вводимых слов (опция Microsoft Word Flow). С помощью этой узкой клавиатуры можно печатать ответ на текст, вот только куда проще будет достать смартфон из кармана.

Функциональность


Частично мы это успели обсудить выше. Еще можно отметить интересную функцию отслеживания сна: браслет будет запоминать фазы сна, продолжительность, эффективно ли вы спали, сколько раз проснулись ночью, пульс, количество сожженных калорий. Все данные можно прочитать с экрана браслета, а не только с помощью смартфона. В Microsoft Health вы сможете узнать все то же самое, но в подробностях.

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

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

Не забываем о том, что фитнес-браслет Band 2 частично является смарт-часами. Да, тут нет таких возможностей для работы с уведомлениями, как в Tizen или Android Wear, но браслет провибрирует, когда на смартфон придет СМС или уведомление из социальных сетей.

Характеристики Microsoft Band 2

  • Совместимость с Windows Phone, iOS и Android по Bluetooth 4.1
  • Экран 1.36-дюймов с разрешением 320 х 128 пикселей, 255ppi
  • Уведомления с помощью вибрации
  • Автономность: до 2х дней
  • Вес: 59г.
  • Ремешок резиновый, съемный, черный


Выводы

Как видите, от производителя мы мало знаем о характеристиках фитнес-браслета Microsoft Band 2. Такое ощущение, что производитель не хотел продавать этот гаджет и активно продвигать его на рынок.

Браслет привлекает взгляд обновленным дизайном. Выглядит Band 2 как гибрид Samsung Gear Fit и предыдущей модели Microsoft Band. C одной стороны, это большой шаг вперед, но все же этого мало.

Из плюсов отметим огромные возможности для отслеживания за состоянием здоровья по умолчанию, изогнутый AMOLED экран, наличие GPS. Жаль, что корпус браслета не имеет защиты от воды, ремешок гаджета не самый удобный. Кто знает, может Band 3 станет ближе к идеалу.

Люди часто жаловались много о том, что они не совсем удобны и честно говоря выглядят некрасиво. Крышка батареи будет шелушиться, когда вы слишком много потеете, металл будет разъедать потом, поэтому соединение зарядки станет ненадежным из-за коррозии. Microsoft Band 2 постарались исправить все эти жалобы и превратить это фитнес устройство во что-то, что вы действительно полюбите. Давайте выясним, как они это сделали.

Купить Microsoft Band 2

Характеристики Microsoft Band 2 :

· Комплект поставки: браслет, зарядное устройство, руководство пользователя.

· Материал исполнения: TPSiV.

· Размер экрана: изогнутый 32 х 12.8 мм.

· Тип экрана: AMOLED, 320 x 128 пикселей.

· Батарея: 48 часов "нормального" использования.

· Время зарядки: полтора часа.

· Тип батареи: литий-полимерная.

· Рабочая температура: от -10 до 40 по С.

· Рабочая высота: - 300 м до +4877 м.

· Сенсоры: оптический датчик сердцебиения, трехосевой гироскоп, акселерометр, GPS, датчик освещения, датчик температуры кожи, датчик ультрафиолетового излучения, гальванический датчик, микрофон, барометр.

· Дополнительные возможности: вибромотор.

· Подключение: Bluetooth 4.0 LE.

· Поддерживаемые устройства: смартфоны на Windows Phone 8.1.1 и выше, iPhone 4S, 5, 5C, 5S, 6, 6 Plus, 6S, 6S Plus. Android 4.3-5.0.

· Защита: защита от воды.

Дизайн Microsoft Band 2

На первый взгляд, Microsoft Band 2 получил обновление аппаратного обеспечения. Многие из его датчиков и возможностей стали работать заметно лучше. Часы имеют AMOLED изогнутый экран размером 32 мм х 12,8 мм (разрешение 320 128 пикселей) и литий-полимерную батарею, которая должна продержаться около 48 часов без подзарядки. Если вы используете GPS слежение для езды на велосипеде, то заряда батареи хватит не более чем на 5 часов.

У вас есть оптический датчик сердечного ритма, 3-осевой акселерометр, гирометр, GPS, датчик освещенности, датчик температуры кожи, датчика ультрафиолетового излучения, емкостной датчик, датчик гальванической реакция кожи, микрофон и барометр (для отслеживания пролетов которые вы прошли по лестнице). Там также есть Bluetooth 4.0 и поддержка LE. К сожалению Band 2 не являются водонепроницаемыми. Легкий дождь и мытье рук не должны повредить им, но они не предназначены для погружения в жидкость. Часы Microsoft также поддерживают синхронизацию с приложением Microsoft Health на Windows Phone, IOS, Android, Mac OSX и Windows ПК.

Microsoft Band 2 немного больше, чем оригинал. Экран больше и шире, застежка больше. Весь корпус металлический с красивым изогнутым экраном Gorilla Glass, который довольно сложно поцарапать. Здесь вы также можете увидеть кнопку включения и кнопку действия вместе с отверстие для микрофона слева. Резиновое запястье придает очень гладкий вид и сужается к тонкой полоске вокруг вашего запястья. На внутренней полосе вы найдете оптический датчик пульса.


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

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


Изогнутый экран выглядит абсолютно великолепно, правда есть один большой минус по сравнению с плоским экраном оригинальной Microsoft Band: блики! Независимо от того на какой угол вы поворачиваете запястье, чтобы попытаться увидеть экран, изогнутый экран вызывает отражения, которые затемняют экран и вообще делают его нечитаемым особенно на улице.




Срок службы батареи

Microsoft Band 2 рассчитан на работу от одного заряда батареи около двух дней Емкость батареи изменяется незначительно в зависимости от размера вашего Band 2 (небольшие имеют батарею 170мАч, а средние / большие 200mAh). За 30 минут зарядки вы получите от 0 до примерно 70% мощности. Так что, если вы поместите его в зарядное устройство, пока вы принимаете, то времени вполне хватит. Часы необходимо синхронизировать с компьютером или смартфоном, так как в случае полной «посадки» батареи все данные могут исчезнуть.


Достоинства и недостатки:

Плюсы

Отличное качество сборки и дизайн;

Много доступных приложений для синхронизации Windows Phone, Android, IOS, Mac, и Windows;

Постоянный мониторинг сердечного ритма;

Настраиваемые управляемые тренировки;

Встроенный GPS приемник позволяет отслеживать без телефона;

Два дня автономной работы;

Синхронизация с другими службами здравоохранения.


Минусы

Новый механизм зарядки труднее прикрепить;

Нет динамика для звуковых объявлений уведомления или взаимодействия с Cortana;

Собственный порт зарядки;

Режим часов не настраивается, не показывают уровень заряда батареи;

Уведомления отображаются иногда поздно.



Стоимость Microsoft Band 2

Примерная стоимость устройства составит $ 249. Цена для фитнес устройства намного выше большинства конкурентов, она на $ 50 больше, чем стоила оригинальная версия Microsoft Band . Однако учитывая качество сборки и работу над улучшением ПО, то увеличение ценны вполне справедливо.


Заключение

Microsoft Band 2 ставит перед собой задачу завоевывать рынок носимых устройств. Они больше позиционируются не как смартчасы, а как высококлассное фитнес устройство. Microsoft Band 2 обладают мониторингом работы вашего тела и помогают вам правильно следить за своим здоровьем.

16 фев 2015

Оптимизация работы PostgreSQL

by Admin

Настройка конфигурации

Настройка ресурсов

shared_buffers

Размер разделяемой между процессами PostgreSQL памяти, которая нужна для выполнения активных операций. Не следует указывать слишком большой объём, так как PostgreSQL использует также дисковый кэш.
Значения:
- Средний объём данных и 256-512 МБ доступной памяти: 16-32 МБ
- Большой объём данных и 1-4 ГБ доступной памяти: 64-256 МБ

temp_buffers
Буфер под временные объекты, в основном для временных таблиц.
Можно установить порядка 16 МБ

max_prepared_transactions
Количество одновременно подготавливаемых транзакций.
Для работы 1С этот параметр значения не имеет, PREPARE TRANSACTION там не используются.
Можно оставить по дефолту - 5

work_mem
Специальная память, используется для сортировки и кэширования таблиц, для одного запроса.
При задании этого параметра следует учитывать количество конкурентных запросов, выполняемых в один момент времени.
При памяти 1-4Gb рекомендуется устанавливать 32-128MB

maintenance_work_mem
Память использующаяся для операций VACUUM, CREATE INDEX, ALTER TABLE и FOREGIN KEY.
Следует устанавливать большее значение, чем для work_mem. Слишком большие значения приведут к использованию свопа.
При памяти 1-4Gb рекомендуется устанавливать 128-512MB

max_stack_depth
Специальный стек для сервера, в идеале он должен совпадать с размером стека, выставленном в ядре ОС. Установка большего значения, чем в ядре, может привести к ошибкам.
Рекомендуется устанавливать 2-4MB

max_fsm_relations
Максимальное количество таблиц, для которых будет отслеживаться свободное место в общей карте свободного пространства. Эти данные собираются VACUUM.
Выставьте параметр в соответствии с количеством таблиц в вашей базе с запасом. (Применимо для версий до 8.4)

max_fsm_pages
Количество блоков, для которых будет хранится информация о свободном месте. Информация хранится в разделяемой памяти, для каждой записи требуется по 6 байт.
Использование этого параметра позволяет избежать использования VACUUM FULL для базы, достаточно будет VACUUM. (Применимо для версий до 8.4)
Этот параметр должен быть не меньше чем 16*max_fsm_relations
Данный параметр задается автоматически при создании базы утилитой initdb
Можно задать его и вручную: в качестве начального приближения можно взять половину от среднего количества записей, изменяемых (UPDATE или DELETE) между запусками команды VACUUM.
Оценить это значение (база должна проработать уже какое-то время) можно выполнив:

vacuum full analyze;
NOTICE: number of page slots needed (196272) exceeds max_fsm_pages (153600)
HINT: Consider increasing the configuration parameter "max_fsm_pages" to a value over 196272.

max_files_per_process
Максимальное количество файлов, открываемых процессом и его подпроцессами в один момент времени.
Уменьшите данный параметр, если в процессе работы наблюдается сообщение "Too many open files ".

Запись транзакционных логов на диск

commit_delay и commit_siblings
Значение commit_delay выражается в микросекундах (0 по умолчанию). Значение commit_siblings выражается в штуках (5 по умолчанию).
commit_delay определяют задержку между попаданием записи в буфер журнала транзакций и сбросом её на диск. Если при успешном завершении транзакции активно не менее commit_siblings транзакций, то запись будет задержана на время commit_delay. Если за это время завершится другая транзакция, то их изменения будут сброшены на диск вместе, при помощи одного системного вызова. Эти параметры позволят ускорить работу, если параллельно выполняется много «мелких» транзакций.

fsync
Данный параметр отвечает за сброс данных из кэша на диск при завершении транзакций.
Если установить его значение

fsync=off

то данные не будут записываться на дисковые накопители сразу после завершения операций. Это может существенно повысить скорость операций insert и update, но есть риск повредить базу, если произойдет сбой (неожиданное отключение питания, сбой ОС, сбой дисковой подсистемы).
Используйте эту возможность только если у вас имеются надежные ИБП и программное обеспечение, завершающее работу системы при низком заряде батарей.
Не следует отключать fsync при работе PostgreSQL на Windows платформе, из-за нестабильности системы.

wal_sync_method
Метод, который используется для принудительной записи данных на диск.
Если fsync=off, то этот параметр не используется.

Возможные значения:
open_datasync - запись данных методом open() с параметром O_DSYNC
fdatasync - вызов метода fdatasync() после каждого commit
fsync_writethrough - вызывать fsync() после каждого commit игнорирую паралельные процессы
fsync - вызов fsync() после каждого commit
open_sync - запись данных методом open() с параметром O_SYNC

Не все методы доступны на определенных платформах. По умолчанию устанавливается первый, который доступен в системе.

full_page_writes
Установите данный параметр в off, если fsync=off.
Иначе

Когда этот параметр on, PostgreSQL записывает содержимое каждой страницы в журнал транзакций во время первой модификации таблицы после контрольной точки. Это необходимо потому что страницы могут записаться лишь частично если в ходе процесса ОС "упала". Это приволит к тому, что на диске оказаываются новые данные смешанные со старыми. Строкового уровня записи в журнал транзакций может быть не достаточно, что бы полность восстановить данные после "падения". full_page_writes гарантирует корректное восстановление, ценой увелечения записываемых данных в журнал транзакций.(Потому что журнал транзакций все время начинается с контрольной точки. Единственный способ снижения объема записи заключается в увеличении checkpoint interval).

wal_buffers
Количество памяти используемое в SHARED MEMORY для ведения транзакционных логов.
При доступной памяти 1-4GB рекомендуется устанавливать 256-1024kb

Оптимизация запросов

enable_nestloop
Определяет использование планировщика запросов. В некоторых случаях выключение планировщика может уменьшать время исполнения отдельных запросов, в том числе и значительно. Однако в подавляющем большинстве случаев планировщик позволяет уменьшить время выполнения запросов. Не следует его выключать, по крайней мере на постоянной основе.

random_page_cost
Устанавливает у планировщика оценку "стоимоти" не последовательного перебора данных. По умолчанию 4.0. Уменьшение этого значения по отношению к seq_page_cost вызовет у планировщика предпочтение сканирования индекса, увеличение -- наобород сделает сканирование индекса "дороже". Вы можете изменить оба значения чтобы изменить отношение "стоимости" дисковых операций ввода/выдода, по отношениб с "стоимости" использования процессора, которая бадет описана следующими параметрами.

На серверах с быстрыми дисковыми массивами имеет смысл уменьшать изначальную настройку до 3.0, 2.5 или даже до 2.0. Если же активная часть вашей базы данных много больше размеров оперативной памяти, попробуйте поднять значение параметра. Можно подойти к выбору оптимального значения и со стороны производительности запросов. Если планировщик запросов чаще, чем необходимо, предпочитает последовательные просмотры (sequential scans) просмотрам с использованием индекса (index scans), понижайте значение. И наоборот, если планировщик выбирает просмотр по медленному индексу, когда не должен этого делать, настройку имеет смысл увеличить. После изменения тщательно тестируйте результаты на максимально широком наборе запросов. Никогда не опускайте значение random_page_cost ниже 2.0; если вам кажется, что random_page_cost нужно еще понижать, разумнее в этом случае менять настройки статистики планировщика.

cpu_tuple_cost
Устанавливает у планировщика оценку "стоимоти" затрат на обработку каждой строки во время выполнения запроса. По умолчанию 0,01.

cpu_index_tuple_cost
Устанавливает у планировщика оценку "стоимоти" затрат на обработку каждого индекса во время операции сканирования индекса. По умолчанию 0,005

cpu_operator_cost
Устанавливает у планировщика оценку "стоимоти" затрат на выполнение каждого оператора или функции во время выполнения запроса. По умолчанию 0.0025.

effective_cache_size
Передает данные планировщику запросов об объёме памяти, которая используется ОС для кэширования файлов, для одного запроса.
Этот параметр в ОС можно посмотреть в настройках:
Для Windows: в Диспетчере задач, Закладка Быстродействие, Физическая память-Системный кэш.
Для Linux: наберите команду free, необходимое значение в столбце cached (в kB)

Данное значение необходимо разделить на количество конкурентных запросов в один момент времени (среднее количество подключений к базе + запас).

default_statistics_target
Устанавливает глубину статистики по таблицам. БОльшие значения могут повысить время выполнения команды ANALYZE, но улучшат построение плана запроса.
Рекомендуется устанавливать порядка 100.

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

Сбор статистики

stats_command_string
Передавать ли сборщику статистики информацию о текущей выполняемой команде и времени начала её выполнения.
Устанавливать on

stats_start_collector
Включать ли сбор статистики.
Устанавливать on

stats_row_level, stats_block_level
Собирать ли информацию об активности на уровне записей и блоков соответственно.
Устанавливать
stats_row_level=on
stats_block_level=off

stats_reset_on_server_start
Обнулять ли статистику при перезапуске сервера
Устанавливать off

Автовакуум

VACUUM - сборка "мусора". VACUUM восстанавливает место занятые "мертвыми" данными. При выполнении обычных операций с данными, PostgreSQL не удаляет данные физически из таблиц, это происходит с операцией VACUUM.

autovacuum
Включать ли автовакуум (автоматического запуска VACUUM),
устанавливать on

autovacuum_naptime
Пауза между запусками Автовакуума.
Зависит от того, как часто обновляются данные в ваших таблицах. Может соствлять порядка 5min, по умолчанию 1min

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

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

Блокировки

max_locks_per_transaction
Количество блокировок за одну транзакцию:
установить порядка 250

deadlock_timeout
Время жизни взаимных блокировок.
Установить порядка 2 секунд.

Возможная ошибка
После исправления файла конфигурации PostgreSQL может не запуститься, выдав ошибку:

FATAL: could not create shared memory segment:...
Failed system call was shmget(key=5432001, size=140075008, 03600).
This error usually means that PostgreSQL"s request for a shared memory segment exceeded your kernel"s SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 140075008 bytes), reduce PostgreSQL"s shared_buffers parameter (currently 16384) and/or its max_connections parameter (currently 10).
If the request size is already small, it"s possible that it is less than your kernel"s SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.

Для исправления необходимо увеличить параметр SHMMAX в системе. Сделать это можно следующим образом (для ОС Linux):

Выполните команду:

echo 150829120 > /proc/sys/kernel/shmmax

указав свое новое значение для параметра (какое именно - можно посмотреть в логе ошибки PostgreSQL). Данная операция устанавливает параметр на лету, но после перезагрузки системы изменения будут потеряны. Чтобы этого не происходило, внесите в файл /etc/sysctl.conf следующую строку:

kernel.shmmax = 150829120

указав своё значение.

Пример конфигурации для сервера с 2G оперативной памяти

Средняя настройка

Среднестатическая настройка для максимальной производительности. Возможно для конкретного случая лучше подойдут другие настройки. Внимательно изучите данное руководство и настройте PostgreSQL, опираясь на эту информацию.

RAM -- размер памяти

* shared_buffers = 1/8 RAM или больше (но не более 1/4);
* work_mem в 1/20 RAM;
* maintenance_work_mem в 1/4;
* max_fsm_relations в планируемое кол-во таблиц в базах * 1.5;
* max_fsm_pages в max_fsm_relations * 2000;
* fsync = true;
* wal_sync_method = fdatasync;
* commit_delay = от 10 до 100 ;
* commit_siblings = от 5 до 10;
* effective_cache_size = 0.9 от значения cached, которое показывает free;
* random_page_cost = 2 для быстрых cpu, 4 для медленных;
* cpu_tuple_cost = 0.001 для быстрых cpu, 0.01 для медленных;
* cpu_index_tuple_cost = 0.0005 для быстрых cpu, 0.005 для медленных;
* autovacuum = on
* autovacuum_vacuum_threshold = 1800
* autovacuum_analyze_threshold = 900

Обслуживание базы

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

VACUUM выполняется автоматически, в соответствии с настройками в файле конфигурации.

VACUUM FULL выполнять не обязательно при правильно настроенном автовакууме.

Диски и файловые системы

Если в вашем сервере есть несколько физических дисков, то вы можете разнести файлы базы данных и журнал транзакций по разным дискам:

Остановите сервер.
Перенесите каталоги pg_clog и pg_xlog, находящийся в каталоге с базами данных, на другой диск.
Создайте на старом месте символическую ссылку.
Запустите сервер.

Задаёт объём памяти, который будет использовать сервер баз данных для буферов в разделяемой памяти. По умолчанию это обычно 128 мегабайт (128MB), но может быть и меньше, если конфигурация вашего ядра накладывает дополнительные ограничения (это определяется в процессе initdb ). Это значение не должно быть меньше 128 килобайт. (Этот минимум зависит от величины BLCKSZ .) Однако для хорошей производительности обычно требуются гораздо большие значения. Задать этот параметр можно только при запуске сервера.

Если вы используете выделенный сервер с объёмом ОЗУ 1 ГБ и более, разумным начальным значением shared_buffers будет 25% от объёма памяти. Существуют варианты нагрузки, при которых эффективны будут и ещё большие значения shared_buffers , но так как Postgres Pro использует и кеш операционной системы, выделять для shared_buffers более 40% ОЗУ вряд ли будет полезно. При увеличении shared_buffers обычно требуется соответственно увеличить max_wal_size , чтобы растянуть процесс записи большого объёма новых или изменённых данных на более продолжительное время.

В серверах с объёмом ОЗУ меньше 1ГБ следует использовать меньший процент ОЗУ, чтобы оставить достаточно памяти для операционной системы. Кроме того, большие значения shared_buffers не так эффективны в Windows. Возможно, вы получите лучшие результаты, если оставите это значение относительно небольшим и будете больше полагаться на кеш операционной системы. Оптимальные значения shared_buffers для Windows обычно лежат в интервале от 64 до 512 мегабайт. huge_pages (enum)

Включает/отключает использование огромных страниц памяти. Допустимые значения: try (попытаться, по умолчанию), on (вкл.) и off (выкл.).

В настоящее время это поддерживается только в Linux. В других системах значение try просто игнорируется.

Когда huge_pages имеет значение try , сервер попытается использовать огромные страницы, но может переключиться на обычные, если это не удастся. Со значением on , если использовать огромные страницы не получится, сервер не будет запущен. Со значением off огромные страницы использоваться не будут. temp_buffers (integer)

Задаёт максимальное число временных буферов для каждого сеанса, По умолчанию объём временных буферов составляет восемь мегабайт (1024 буфера). Этот параметр можно изменить в отдельном сеансе, но только до первого обращения к временным таблицам; после этого изменить его значение для текущего сеанса не удастся.

Сеанс выделяет временные буферы по мере необходимости до достижения предела, заданного параметром temp_buffers . Если сеанс не задействует временные буферы, то для него хранятся только дескрипторы буферов, которые занимают около 64 байтов (в количестве temp_buffers). Однако если буфер действительно используется, он будет дополнительно занимать 8192 байта (или в общем случае, BLCKSZ байтов). max_prepared_transactions (integer)

Задаёт максимальное число транзакций, которые могут одновременно находиться в «подготовленном » состоянии (см. PREPARE TRANSACTION ). При нулевом значении (по умолчанию) механизм подготовленных транзакций отключается. Задать этот параметр можно только при запуске сервера.

Если использовать транзакции не планируется, этот параметр следует обнулить, чтобы не допустить непреднамеренного создания подготовленных транзакций. Если же подготовленные транзакции применяются, то max_prepared_transactions , вероятно, должен быть не меньше, чем max_connections , чтобы подготовить транзакцию можно было в каждом сеансе.

Для ведомого сервера значение этого параметра должно быть больше или равно значению на ведущем. В противном случае на ведомом сервере не будут разрешены запросы. work_mem (integer)

Задаёт объём памяти, который будет использоваться для внутренних операций сортировки и хеш-таблиц, прежде чем будут задействованы временные файлы на диске. Значение по умолчанию - четыре мегабайта (4MB). Заметьте, что в сложных запросах одновременно могут выполняться несколько операций сортировки или хеширования, так что этот объём памяти будет доступен для каждой операции. Кроме того, такие операции могут выполняться одновременно в разных сеансах. Таким образом, общий объём памяти может многократно превосходить значение work_mem ; это следует учитывать, выбирая подходящее значение. Операции сортировки используются для ORDER BY , DISTINCT и соединений слиянием. Хеш-таблицы используются при соединениях и агрегировании по хешу, а также обработке подзапросов IN с применением хеша. maintenance_work_mem (integer)

Задаёт максимальный объём памяти для операций обслуживания БД, в частности VACUUM , CREATE INDEX и ALTER TABLE ADD FOREIGN KEY . По умолчанию его значение - 64 мегабайта (64MB). Так как в один момент времени в сеансе может выполняться только одна такая операция, и обычно они не запускаются параллельно, это значение вполне может быть гораздо больше work_mem . Увеличение этого значения может привести к ускорению операций очистки и восстановления БД из копии.

Учтите, что когда выполняется автоочистка, этот объём может быть выделен autovacuum_max_workers раз, поэтому не стоит устанавливать значение по умолчанию слишком большим. Возможно, будет лучше управлять объёмом памяти для автоочистки отдельно, изменяя . replacement_sort_tuples (integer)

Когда количество сортируемых кортежей меньше заданного числа, для получения первого потока сортируемых данных будет применяться не алгоритм quicksort, а выбор с замещением. Это может быть полезно в системах с ограниченным объёмом памяти, когда кортежи, поступающие на вход большой операции сортировки, характеризуются хорошей корреляцией физического и логического порядка. Заметьте, что это не относится к кортежам с обратной корреляцией. Вполне возможно, что алгоритм выбора с замещением сформирует один длинный поток и слияние не потребуется, тогда как со стратегией по умолчанию может быть получено много потоков, которые затем потребуется слить для получения окончательного отсортированного результата. Это позволяет ускорить операции сортировки.

Значение по умолчанию - 150000 кортежей. Заметьте, что увеличивать это значение обычно не очень полезно, и может быть даже контрпродуктивно, так как эффективность приоритетной очереди зависит от доступного объёма кеша процессора, тогда как со стандартной стратегией потоки сортируются кеш-независимым алгоритмом. Благодаря этому, стандартная стратегия позволяет автоматически и прозрачно использовать доступный кеш процессора более эффективным образом.

Если в maintenance_work_mem задано значение по умолчанию, внешние сортировки в служебных командах (например, сортировки, выполняемые командами CREATE INDEX для построения-индекса B-дерева) обычно никогда не используют алгоритм выбора с замещением (так как все кортежи помещаются в память), кроме случаев, когда входные кортежи достаточно велики. autovacuum_work_mem (integer)

Задаёт максимальный объём памяти, который будет использовать каждый рабочий процесс автоочистки. По умолчанию равен -1, что означает, что этот объём определяется значением . Этот параметр не влияет на поведение команды VACUUM , выполняемой в других контекстах. max_stack_depth (integer)

Задаёт максимальную безопасную глубину стека для исполнителя. В идеале это значение должно равняться предельному размеру стека, ограниченному ядром (как устанавливает команда ulimit -s или равнозначные ей), за вычетом запаса примерно в мегабайт. Этот запас необходим, потому что сервер проверяет глубину стека не в каждой процедуре, а только в потенциально рекурсивных процедурах, например, при вычислении выражений. Значение по умолчанию - два мегабайта (2MB), выбрано с большим запасом, так что риск переполнения стека минимален. Однако, с другой стороны, его может быть недостаточно для выполнения сложных функций. Изменить этот параметр могут только суперпользователи.

Если max_stack_depth будет превышать фактический предел ядра, то функция с неограниченной рекурсией сможет вызвать крах отдельного процесса сервера. В системах, где Postgres Pro может определить предел, установленный ядром, он не позволит установить для этого параметра небезопасное значение. Однако эту информацию выдают не все системы, поэтому выбирать это значение следует с осторожностью. dynamic_shared_memory_type (enum)

Выбирает механизм динамической разделяемой памяти, который будет использовать сервер. Допустимые варианты: posix (для выделения разделяемой памяти POSIX функцией shm_open), sysv (для выделения разделяемой памяти System V функцией shmget), windows (для выделения разделяемой памяти в Windows), mmap (для эмуляции разделяемой памяти через отображение в память файлов, хранящихся в каталоге данных) и none (для отключения этой функциональности). Не все варианты поддерживаются на разных платформах; первый из поддерживаемых данной платформой вариантов становится для неё вариантом по умолчанию. Применять mmap , который нигде не выбирается по умолчанию, вообще не рекомендуется, так как операционная система может периодически записывать на диск изменённые страницы, что создаст дополнительную нагрузку; однако, это может быть полезно для отладки, когда каталог pg_dynshmem находится в RAM-диске или когда другие механизмы разделяемой памяти недоступны.

18.4.2. Диск

Примерная стоимость очистки буфера, оказавшегося в общем кеше. Это подразумевает блокировку пула буферов, поиск в хеш-таблице и сканирование содержимого страницы. По умолчанию этот параметр равен одному. vacuum_cost_page_miss (integer)

Примерная стоимость очистки буфера, который нужно прочитать с диска. Это подразумевает блокировку пула буферов, поиск в хеш-таблице, чтение требуемого блока с диска и сканирование его содержимого. По умолчанию этот параметр равен 10. vacuum_cost_page_dirty (integer)

Примерная стоимость очистки, при которой изменяется блок, не модифицированный ранее. В неё включается дополнительная стоимость ввода/вывода, связанная с записью изменённого блока на диск. По умолчанию этот параметр равен 20. vacuum_cost_limit (integer)

Общая стоимость, при накоплении которой процесс очистки будет засыпать. По умолчанию этот параметр равен 200.

Примечание

Некоторые операции устанавливают критические блокировки и поэтому должны завершаться как можно быстрее. Во время таких операций задержка очистки по стоимости не осуществляется, так что накопленная за это время стоимость может намного превышать установленный предел. Во избежание ненужных длительных задержек в таких случаях, фактическая задержка вычисляется по формуле vacuum_cost_delay * accumulated_balance / vacuum_cost_limit и ограничивается максимумом, равным vacuum_cost_delay * 4.

18.4.5. Фоновая запись

В числе специальных процессов сервера есть процесс фоновой записи , задача которого - осуществлять запись «грязных » (новых или изменённых) общих буферов на диск. Он старается записывать данные из буферов так, чтобы обычным серверным процессам, обрабатывающим запросы, не приходилось ждать записи или это ожидание было минимальным. Однако процесс фоновой записи увеличивает общую нагрузку на подсистему ввода/вывода, так как он может записывать неоднократно изменяемую страницу при каждом изменении, тогда как она может быть записана всего раз в контрольной точке. Параметры, рассматриваемые в данном подразделе, позволяют настроить поведение фоновой записи для конкретных нужд.

Задаёт максимальное число буферов, которое сможет записать процесс фоновой записи за раунд активности. При нулевом значении фоновая запись отключается. (Учтите, что на контрольные точки, которые управляются отдельным вспомогательным процессом, это не влияет.) По умолчанию значение этого параметра - 100 буферов. Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера. bgwriter_lru_multiplier (floating point)

Число загрязнённых буферов, записываемых в очередном раунде, зависит от того, сколько новых буферов требовалось серверным процессам в предыдущих раундах. Средняя недавняя потребность умножается на bgwriter_lru_multiplier и предполагается, что именно столько буферов потребуется на следующем раунде. Процесс фоновой записи будет записывать на диск и освобождать буферы, пока число свободных буферов не достигнет целевого значения. (При этом число буферов, записываемых за раунд, ограничивается сверху параметром bgwriter_lru_maxpages .) Таким образом, со множителем, равным 1.0, записывается ровно столько буферов, сколько требуется по предположению («точно по плану » ). Увеличение этого множителя даёт некоторую страховку от резких скачков потребностей, тогда как уменьшение отражает намерение оставить некоторый объём записи для серверных процессов. По умолчанию он равен 2.0. Этот параметр можно установить только в файле postgresql.conf или в командной строке при запуске сервера. bgwriter_flush_after (integer)

Когда процессом фоновой записи записывается больше чем bgwriter_flush_after байт, сервер даёт указание ОС произвести запись этих данных в нижележащее хранилище. Это ограничивает объём «грязных» данных в страничном кеше ядра и уменьшает вероятность затормаживания при выполнении fsync в конце контрольной точки или когда ОС сбрасывает данные на диск большими порциями в фоне. Часто это значительно уменьшает задержки транзакций, но бывают ситуации, особенно когда объём рабочей нагрузки больше , но меньше страничного кеша ОС, когда производительность может упасть. Этот параметр действует не на всех платформах. Он может принимать значение от 0 (при этом управление отложенной записью отключается) до 2 Мбайт (2MB). Значение по умолчанию - 512kB в Linux и 0 в других ОС. (Если BLCKSZ отличен от 8 Кбайт, значение по умолчанию и максимум корректируются пропорционально.) Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

С маленькими значениями bgwriter_lru_maxpages и bgwriter_lru_multiplier уменьшается активность ввода/вывода со стороны процесса фоновой записи, но увеличивается вероятность того, что запись придётся производить непосредственно серверным процессам, что замедлит выполнение запросов.

18.4.6. Асинхронное поведение

Effective_io_concurrency (integer)

Задаёт допустимое число параллельных операций ввода/вывода, которое говорит Postgres Pro о том, сколько операций ввода/вывода могут быть выполнены одновременно. Чем больше это число, тем больше операций ввода/вывода будет пытаться выполнить параллельно Postgres Pro в отдельном сеансе. Допустимые значения лежат в интервале от 1 до 1000, а нулевое значение отключает асинхронные запросы ввода/вывода. В настоящее время этот параметр влияет только на сканирование по битовой карте.

Для магнитных носителей хорошим начальным значением этого параметра будет число отдельных дисков, составляющих массив RAID 0 или RAID 1, в котором размещена база данных. (Для RAID 5 следует исключить один диск (как диск с чётностью).) Однако, если база данных часто обрабатывает множество запросов в различных сеансах, и при небольших значениях дисковый массив может быть полностью загружен. Если продолжать увеличивать это значение при полной загрузке дисков, это приведёт только к увеличению нагрузки на процессор. Диски SSD и другие виды хранилища в памяти часто могут обрабатывать множество параллельных запросов, так что оптимальным числом может быть несколько сотен.

Асинхронный ввод/вывод зависит от эффективности функции posix_fadvise , которая отсутствует в некоторых операционных системах. В случае её отсутствия попытка задать для этого параметра любое ненулевое значение приведёт к ошибке. В некоторых системах (например, в Solaris), эта функция присутствует, но на самом деле ничего не делает.

Значение по умолчанию равно 1 в системах, где это поддерживается, и 0 в остальных. Это значение можно переопределить для таблиц в определённом табличном пространстве, установив одноимённый параметр табличного пространства (см. ALTER TABLESPACE ). max_worker_processes (integer)

Задаёт максимальное число фоновых процессов, которое можно запустить в текущей системе. Этот параметр можно задать только при запуске сервера. Значение по умолчанию - 8.

Для ведомого сервера значение этого параметра должно быть больше или равно значению на ведущем. В противном случае на ведомом сервере не будут разрешены запросы. max_parallel_workers_per_gather (integer)

Задаёт максимальное число рабочих процессов, которые могут запускаться одним узлом Gather . Параллельные рабочие процессы берутся из пула процессов, контролируемого параметром . Учтите, что запрошенное количество рабочих процессов может быть недоступно во время выполнения. В этом случае план будет выполняться с меньшим числом процессов, что может быть неэффективно. Значение 0 (заданное по умолчанию) отключает параллельное выполнение запросов.

Учтите, что параллельные запросы могут потреблять значительно больше ресурсов, чем не параллельные, так как каждый рабочий процесс является отдельным процессом и оказывает на систему примерно такое же влияние, как дополнительный пользовательский сеанс. Это следует учитывать, выбирая значение этого параметра, а также настраивая другие параметры, управляющие использованием ресурсов, например . Ограничения ресурсов, такие как work_mem , применяются к каждому рабочему процессу отдельно, что означает, что общая нагрузка для всех процессов может оказаться гораздо больше, чем при обычном использовании одного процесса. Например, параллельный запрос, задействующий 4 рабочих процесса, может использовать в 5 раз больше времени процессора, объёма памяти, ввода/вывода и т. д., по сравнению с запросом, не задействующим рабочие процессы вовсе.

За дополнительными сведениями о параллельных запросах обратитесь к Главе 15 . backend_flush_after (integer)

Когда одним обслуживающим процессом записывается больше backend_flush_after байт, сервер даёт указание ОС произвести запись этих данных в нижележащее хранилище. Это ограничивает объём «грязных» данных в страничном кеше ядра и уменьшает вероятность затормаживания при выполнении fsync в конце контрольной точки или когда ОС сбрасывает данные на диск большими порциями в фоне. Часто это значительно сокращает задержки транзакций, но бывают ситуации, особенно когда объём рабочей нагрузки больше , но меньше страничного кеша ОС, когда производительность может упасть. Этот параметр действует не на всех платформах. Он может принимать значение от 0 (при этом управление отложенной записью отключается) до 2 Мбайт (2MB). По умолчанию он имеет значение 0 , то есть это поведение отключено. (Если BLCKSZ отличен от 8 Кбайт, максимальное значение корректируется пропорционально.) old_snapshot_threshold (integer)

Задаёт минимальное время, которое можно пользоваться снимком без риска получить ошибку снимок слишком стар. Этот параметр можно задать только при запуске сервера.

По истечении этого времени старые данные могут вычищены. Это предотвращает замусоривание данными снимков, которые остаются задействованными долгое время. Во избежание получения некорректных результатов из-за очистки данных, которые должны были бы наблюдаться в снимке, клиенту будет выдана ошибка, если возраст снимка превысит заданный предел и из этого снимка будет запрошена страница, изменённая со времени его создания.

Значение -1 (по умолчанию) отключает это поведение. Полезные значения для производственной среды могут лежать в интервале от нескольких часов до нескольких дней. Заданное значение округляется до минут, а минимальные значения (как например, 0 или 1min) допускаются только потому, что они могут быть полезны при тестировании. Хотя допустимым будет и значение 60d (60 дней), учтите, что при многих видах нагрузки критичное замусоривание базы или зацикливание идентификаторов транзакций может происходить в намного меньших временных отрезках.

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

Установка этого параметра не гарантирует, что обозначенная ошибка будет выдаваться при всех возможных обстоятельствах. На самом деле, если можно получить корректные результаты, например, из курсора, материализовавшего результирующий набор, ошибка не будет выдана, даже если нижележащие строки в целевой таблице были ликвидированы при очистке. Некоторые таблицы не могут быть безопасно очищены в сжатые сроки, так что на них этот параметр не распространяется. В частности, это касается системных каталогов и таблиц с хеш-индексами. Для таких таблиц этот параметр не сокращает раздувание, но и не чреват ошибкой снимок слишком стар при сканировании.

Появилась у нас в конторе мегапрограмма по оперативному учету. Программеры ее уже год как ваяют, практически все работники конторы в ней заняты, без нее в облэнерго сейчас жизни нет. Не работает программа - контора в определенном смысле парализована.
Сейчас в системе около 700 пользователей, при этом активных бывает до 100 рыл.
Естественно вопрос производительности сейчас первостепенный (если считать с нуля, то задача номер 0 отказоустойчивость будет решена в ближайшее время). Моя задача как админа выжать все возможное из базы данных. Это PostgreSQL версии 8.2, с которого сейчас осуществляется тестовая миграция на 9.0.
Здесь будет приведен файл параметров postgresql.conf с расширенными комментариями по каждому пункту.
Установка каждого параметра выбиралась исходя из существующего опыта эксплуатации, исследования открытых источников, как минимум 3-х, официальной документации, а также тестов производительности приложения на сервере в максимально идентичными настройками БД 8.2. и 9.0.


# Файл параметров PostgreSQL postgresql.conf
# Попытка заставить базу EnergyNET летать соколом.
# Указаные настройки подразумевают, что на сервере, где
# крутится PostgreSQL никого кроме него нет, не считая
# операционной системы.
#########################################################

# shared_buffers
#
# Смысл параметра: PostgreSQL не читает данные напрямую
# с диска и не пишет их сразу на диск. Данные загружаются
# в общий буфер сервера, находящийся в разделяемой памяти,
# серверные процессы читают и пишут блоки в этом буфере,
# а затем уже изменения сбрасываются на диск.
# Если процессу нужен доступ к таблице, то он сначала
# ищет нужные блоки в общем буфере. Если блоки
# присутствуют, то он может продолжать работу, если
# нет — делается системный вызов для их загрузки.
# Загружаться блоки могут как из файлового кэша ОС, так и
# с диска, и эта операция может оказаться весьма «дорогой».
# Если объём буфера недостаточен для хранения часто
# используемых рабочих данных, то они будут постоянно
# писаться и читаться из кэша ОС или с диска, что крайне
# отрицательно скажется на производительности.
# Принцип таков, что значение параметра устанавливаем
# в размере 25-40% от оперативной памяти. От версии
# PostgreSQL не зависит.
#
shared_buffers = 500MB # 2GB ОЗУ
#shared_buffers = 3000MB # 12GB ОЗУ

# temp_buffers
#
# Смысл параметра: Максимальное количество памяти, выделяемой
# каждой сессии для работы с временными таблицами.
# Необходимо помнить, что как только сессия заняла размер,
# указанный в temp_buffers, эта память не освобождается,
# пока сессия не завершится. На системах с большим
# количеством одновременно работающих пользователей
# некорректное (завышенное) значение этого параметра
# запросто может привести к бешеному свопу, и как
# следствие, краху операционной системы. А если при
# этом еще и fsync = off, то готовьтесь восстанавливать
# базу из резервных копий.
# У нас временные таблицы не используются, так что
# можно оставить значение по умолчанию. То есть
# вообще удалить из postgresql.conf
#
temp_buffers = 8MB

# max_prepared_transactions
#
# Смысл параметра: устанавливает максимальное количество
# PREPARED TRANSACTION которые могут устанавливаться в
# состояние prepared единовременно.
# У нас 98% всех транзакций - PREPARED.
# Минимально необходимое значение параметра = max_connections
#
max_prepared_transactions = 600

# work_mem
#
# Смысл параметра: Задаёт объём памяти, который используют
# внутренние операции сортировки и хэш-таблицы перед тем
# как перейти на использование временных файлов на диске.
# Если объём памяти недостаточен для сортироки некоторого
# результата, то серверный процесс будет использовать
# временные файлы. Если же объём памяти слишком велик,
# то это может привести к своппингу.
# В сложном запросе параллельно может быть запущено несколько
# операций сортировки и хэширования, и каждая может занять
# столько памяти, сколько задано в этом параметре, прежде
# чем начнет использовать временные файлы. Кроме того, эти
# операции могут одновременно выполняться в нескольких сессиях.
# Таким образом, используемая память может оказаться в несколько
# раз больше, чем work_mem. Операции сортировки используются
# для ORDER BY, DISTINCT и операций соединения методом
# слияния (merge joins). Хэш-таблицы используются при
# операциях соединения методом хэширования (hash joins),
# операциях аггрегирования, основанных на хэшировании и
# обработке IN-подзапросов на основе хэширования.
# Своими словами: если некая операция из перечисленных выше требует
# для выполнения больше памяти, чем указано в параметре work_mem,
# для этой операции будет создан временный файл в каталоге pgsql_tmp
# соответствующей БД. Так что оценить, какой объем необходимо задать
# данному параметру можно просто влянув в этот каталог в пиковые
# часы нагрузки. Если суммарный объем созданных там файлов поместится
# в оперативную память и останется хотя-бы 30% резерва, с учетом
# остальных работающих на сервере задач, то можно задавать значение, равное
# размеру примерно одинаковых по объему файлов. Тут конечно тоже без
# фанатизма, ибо если временный файл больше 100 метров, то нужно
# трижды подумать...
#
work_mem = 32MB

# autovacuum
#
# Смысл простой - выполнение процессов VACUUM в автоматическом
# режиме во время работы сервера.
# У нас VACUUM и ANALYZE будут выполняться ночью
# через CRON, так что включать автовакуум не будем.
# Ну незачем нам еще и в рабочее время систему
# нагружать некритичными вещами.
#
autovacuum = off

# effective_io_concurrency
#
# Смысл параметра: Задаёт число операций чтения/записи на
# диск, которые по мнению PostgreSQL могут выполняться
# одновременно. Увеличение этого значения может повысить
# число операций ввода/вывода, которое любая сессия
# PostgreSQL может попытаться выполнить параллельно.
# Допустимые значения лежат в диапазоне от 1 до 1000,
# либо 0, если вы хотите запретить выполнение асинхронных
# операций ввода/вывода.
# Для оценки необходимого значения этого параметра можно
# начать с числа отдельных устройств, включая RAID 0
# или RAID 1, используемых базой данных. Для RAID 5
# чётность устройств не учитывается. Однако, если база
# данных часто занята множеством запросов, получаемых от
# различных одновременных сессий, даже низкие значения
# могут держать занятым дисковый массив. Значение выше
# необходимого для поддержания занятости дисков приведёт
# только к дополнительной загрузке процессора.
# По простому, ставим значение параметра в число,
# равное количеству шпинделей в дисках, на
# которых расположена база данных. Потом пробуем уменьшить
# или увеличить, и оцениваем результат при каждом изменении
# параметра. Вообще параметр новый, малоопробованый,
# рекомендаций мало. Так что будем тестировать.
#
effective_io_concurrency = 4 # 4 диска в RAID10

# fsync
#
# Смысл параметра: Данный параметр отвечает за сброс данных
# из кэша на диск при завершении транзакций. Если
# установить его значение fsync = off то данные не будут
# записываться на дисковые накопители сразу после завершения
# операций. Это может существенно повысить скорость
# операций insert и update, но есть риск повредить базу,
# если произойдет сбой (неожиданное отключение питания,
# сбой ОС, сбой дисковой подсистемы).
# Самый сука стремный параметр. Если есть возможность,
# ВСЕГДА используйте fsync = on. Если с производительностью
# жопа, то при значении off большую часть проблем можно
# порешать. Вот такая неоднозначная хрень. На винде
# желательно его не выключать в следствии глючности самой
# винды.
# Если fsync = off, то обязательно установить
# full_page_writes = off
# Если fsync = on, а с производительность проблемы, то
# лучше поиграться с synchronous_commit, но fsync не
# трогать.
#
fsync = on

# full_page_writes
#
# Смысл параметра: Если этот параметр включен, сервер
# PostgreSQL пишет весь контент каждой страницы диска в WAL
# во время первого изменения этой страницы после контрольной
# точки. Это необходимо, поскольку если в процессе записывания
# страницы произойдет системный сбой, на диске может оказаться
# страница, в которой смешаны старые и новые данные. Изменения
# на уровне строк данных, которые обычно хранятся в WAL, может
# быть не достаточно для восстановления страницы после
# системного сбоя. Хранение образа всей страницы гарантирует,
# что страница будет восстановлена правильно, но это будет
# стоить увеличения количества данных, которые нужно будет
# занести в WAL. (Так как чтение WAL всегда начинается с
# контрольной точки, удобно делать это при первом изменении
# каждой страницы после контрольной точки. Таким образом,
# одним из способов уменьшения стоимости записи страниц
# является увеличение интервала между контрольными точками.)
# Отключение этого параметра ускоряет работу, но может привести
# к повреждению базы данных в случае системного сбоя или
# отключения питания. Риски схожи с отключением fsync, хотя в
# данном случае они меньше.
#
full_page_writes=on

# synchronous_commit
#
# Смысл параметра: Определяет, должна ли транзакция ждать,
# пока записи WAL будут перенесены на диск, прежде чем команда
# вернёт клиенту сообщение об успешном выполнении. По
# умолчанию и с точки зрения безопасности этот параметр должен
# быть включен. Если параметр выключен, возможен промежуток
# времени между сообщением об успешном выполнении транзакции
# и моментом, когда транзакция на самом деле защищена от сбоя
# на сервере. В отличие от fsync, отключение этого параметра
# не может привести к риску противоречия в базе данных: сбой
# может привести к потере последних прошедших транзакций, но
# состояние базы данных при этом будет таким, как будто эти
# транзакции просто были прерваны. Таким образом, отключение
# synchronous_commit может оказаться полезным, если
# производительность важнее, чем точность в проведении
# транзакций.
#
synchronous_commit = off

effective_cache_size: указывает планировщику на размер самого большого объекта в базе данных, который теоретически может быть закеширован. На выделенном сервере имеет смысл выставлять effective_cache_size в 2/3 от всей оперативной памяти; на сервере с другими приложениями сначала нужно вычесть из всего объема RAM размер дискового кэша ОС и память, занятую остальными процессами.



Загрузка...