Многодисковые подсистемы   

   
Многодисковые подсистемы

Во время работы с данными, записанными на жестком диске, его головка совершает множество перемещений c одной дорожки на другую. В результате длительных циклов записи/чтения диск заполняется множеством разбросанных в разных местах блоков данных, что негативно влияет на его производительность в целом. (Для оценки состояния активности каждого из дисков можно воспользоваться утилитами Vmstat и sar).
Один из способов решения создавшейся проблемы заполнения диска является простое перемещение файлов с данными с одного диска на другой. Особенно отметим - это должен быть именно физически другой диск, но не другой раздел на том же самом диске. Следует помнить, что все файловые системы, представленные логическими разделами одного и того же диска, на самом деле обслуживаются одним и тем же физическим устройством.
Распределение файлов базы данных на несколько дисков может быть реализовано следующими способами:
  • Перемещение базы данных

    initlocation позволяет вам изначально разместить базу данных на нескольких дисках.
  • Перемещение таблиц

    Символические связи позволяют вам перемесить выбранные таблицы и индексы на отдельные диски. Подобное перемещение возможно лишь в периоды остановки сервера POSTGRESQL. Также следует помнить, что POSTGRESQL не контролирует символические связи, поэтому если вы удалили таблицу и пересоздали ее заново, она будет создана на диске, указанном по умолчанию для этой базы. В версии 7.1 вы можете установить соответствия имен базы данных, таблиц и индексов их числовым файловым именам при помощи pg_database.oid и pg_class.relfilenode.
  • Перемещение индексов

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

    Символические связи также позволяют вынести за пределы диска таблицы, участвующие в объединениях (см. join команду SQL). Например, если таблица A объединяется с таблицей B подобным образом, то совместный доступ к данным будет намного быстрее, т. к. доступ к таблице A на одном диске будет осуществляется в то время, пока к таблице В на другом диске.
  • Перемещение журнала упреждающих транзакций

    Символические связи используются для перемещения каталог pg_xlog на отдельный диск. (Заметим, что pg_xlog существует только в версиях POSTGRESQL не младше 7.1) В отличие от классического журнала транзакций, упреждающий журнал осуществляет запись транзакции на диск до фактического ее завершения. При этом, в целях надежности кэширование не производится (т.е. - все данные о транзакции непосредственно обязаны быть записаны на диск). Если система располагает отдельным диском для подобного журналирования, сама операция по работе с данными не будет прерываться на излишнее перемещение головок, сохранение, повторное позиционирование и т.д. (Вы можете отключить форсированную запись на диск журнала упреждающих транзакций (параметр -F), однако в этом случае выход из строя операционной системы потребует восстановления из резервных копий). Еще одним способом решения подобной проблемы является установка RAID массива дисков, позволяющего распределить всю файловую подсистему на несколько физических носителей. Зеркалирование может несколько замедлить запись данных, однако поднимет скорость их чтения - ведь теперь данные будет подчитываться одновременно с нескольких физических носителей.

Оглавление                                                                                                Читать дальше...