
- •Оглавление
- •Настройка производительности
- •Введение
- •Не используйте настройки по умолчанию
- •Используйте актуальную версию сервера
- •Стоит ли доверять тестам производительности
- •Настройка сервера
- •Используемая память
- •Журнал транзакций и контрольные точки
- •Планировщик запросов
- •Сбор статистики
- •Диски и файловые системы
- •Перенос журнала транзакций на отдельный диск
- •Примеры настроек
- •Среднестатическая настройка для максимальной производительности
- •Среднестатическая настройка для оконного приложения (1С), 2 ГБ памяти
- •Среднестатическая настройка для Web приложения, 2 ГБ памяти
- •Среднестатическая настройка для Web приложения, 8 ГБ памяти
- •Автоматическое создание оптимальных настроек: pgtune
- •Оптимизация БД и приложения
- •Поддержание базы в порядке
- •Использование индексов
- •Перенос логики на сторону сервера
- •Оптимизация конкретных запросов
- •Оптимизация запросов с помощью pgFouine
- •Заключение
- •Репликация
- •Введение
- •Slony-I
- •Введение
- •Установка
- •Настройка
- •Общие задачи
- •Устранение неисправностей
- •Londiste
- •Введение
- •Установка
- •Настройка
- •Общие задачи
- •Устранение неисправностей
- •Bucardo
- •Введение
- •Установка
- •Настройка
- •Общие задачи
- •RubyRep
- •Введение
- •Установка
- •Настройка
- •Устранение неисправностей
- •Заключение
- •Кластеризация БД
- •Введение
- •PL/Proxy
- •Установка
- •Настройка
- •Все ли так просто?
- •HadoopDB
- •Установка и настройка
- •Заключение
- •Заключение
- •PgPool-II
- •Введение
- •Давайте начнем!
- •Установка pgpool-II
- •Файлы конфигурации
- •Настройка команд PCP
- •Подготовка узлов базы данных
- •Запуск/Остановка pgpool-II
- •Ваша первая репликация
- •Настройка репликации
- •Проверка репликации
- •Ваш первый параллельный запрос
- •Настройка параллельного запроса
- •Настройка SystemDB
- •Установка правил распределения данных
- •Установка правил репликации
- •Проверка параллельного запроса
- •Master-slave режим
- •Онлайн востановление
- •Заключение
- •Мультиплексоры соединений
- •Введение
- •PgBouncer

2.6. Заключение
$rubyrep replicate -c myrubyrep.conf Verifying RubyRep tables
Checking for and removing rubyrep triggers from unconfigured tables Verifying rubyrep triggers of configured tables
Starting replication
Exception caught: Thread#join: deadlock 0xb76ee1ac - mutual join(0xb758cfac)
Это проблема с запусками потоков в Ruby. Решается двумя способами:
1.Запускать rubyrep через JRuby (тут с потоками не будет проблем)
2.Пофиксить rubyrep патчем:
--- /Library/Ruby/Gems/1.8/gems/rubyrep-1.1.2/lib/rubyrep/ replication_runner.rb 2010-07-16 15:17:16.000000000 -0400
+++ ./replication_runner.rb 2010-07-16 17:38:03.000000000 -0400 @@ -2,6 +2,12 @@
require ’optparse’ require ’thread’ +require ’monitor’
+
+class Monitor
+alias lock mon_enter
+alias unlock mon_exit +end
module RR
#This class implements the functionality of the ’replicate’ command.
@@-94,7 +100,7 @@
#Initializes the waiter thread used for replication pauses
#and processing
#the process TERM signal.
def init_waiter
- @termination_mutex = Mutex.new
+ @termination_mutex = Monitor.new @termination_mutex.lock
@waiter_thread ||= Thread.new {@termination_mutex.lock; self.termination_requested = true}
%w(TERM INT).each do |signal|
2.6Заключение
Репликация — одна из важнейших частей крупных приложений, которые работают на PostgreSQL. Она помогает распределять нагрузку на
57

2.6. Заключение
базу данных, делать фоновый бэкап одной из копий без нагрузки на центральный сервер, создавать отдельный сервер для логирования и м.д.
В главе было рассмотрено несколько видов репликации PostgreSQL. Нельзя четко сказать какая лучше всех. Slony-I — громоздкая и сложная в настройке система, но имеющая в своем арсенале множество функций, таких как поддержка каскадной репликации, отказоустойчивости (failover) и переключение между серверами (switchover). В тоже время Londiste не обладает подобным функционалом, но компактный и прост в установке. Bucardo — система которая может быть или master-master, или masterslave репликацией, но не может обработать огромные обьекты, нет отказоустойчивости(failover) и переключение между серверами (switchover). RubyRep, как для master-master репликации, очень просто в установке и настройке, но за это ему приходится расплачиватся скоростью работы — самый медленный из всех (синхронизация больших обьемов данных между таблицами).
58