powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Vacuum Full без полного лока таблицы
25 сообщений из 154, страница 2 из 7
Vacuum Full без полного лока таблицы
    #37015325
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Andron]Maxim Bogukпропущено...


Так давайте определимся что кэш ФС является посредником между диском и структурой PostgreSQL которая определяется через параметр shared_buffers. Т.е. вначале данные запрашиваются пользователем в базе, затем PostgreSQL если их не находит в shared_buffers то читает с диска, но не напрямую а используя посредника - кэш ФС. И данные эти опят таки помещает из кэша ФС в shared_buffers для дальнейшей обработки и передачи пользователю. Еще раз выделю свое предположение: PostgreSQL не управляет данными в файловом кэше ОС, только в кэше определенном как shared_buffers. Если это так то имеем интересное следствие с т.з. производительности дискового IO.

Самое интересное следствие выходит если отдать около 50% под shared buffers. В итоге есть шанс получить ситуацию когда у вас данные лежат в 2х местах в памяти и эффективный размер кеша будет половина от наличной памяти.

Из этого следует что по хорошему под shared buffers имеет смысл отдавать или 20-25% или 75-80% наличной памяти (предполагая что сервер выделен исключительно под базу). Из моего опыта оба варианта на 8.3+ вполне работоспособны а какой из них даст большую производительность очень сильно зависит от конкретного проекта.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015351
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Вообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015378
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronВообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы.Насчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан?

Это к тому, что вообще говоря - надо читать, похоже, уже mailing lists, для ответа на вопрос. Я могу предположить, что это сделано для автоматического распределения ресурсов между процессорами... То есть когда у вас на одной машине стоят и Pg и Apache, то неизвестно - что больше будет читать данные Apache или Pg. И что эффективнее кешировать - файлы для Apache или файлы для Pg.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015405
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronMaxim Boguk,

Вообще напрашивается такой вопрос: а зачем дополнительно кэшировать данные базы, ведь это приводит к накладным расходам и снижению надежности. Кажется это называется Direct IO и как раз позволяет избежать использования кэширования на уровне ОС в случае использования файлов для базы. Речь идет именно про файлы а не raw device, с которыми подобной проблемы не возникает, но и PostgreSQL их не поддерживает вроде бы.

До 8.3 Postgres очень плохо работал с обьемами shared memory большими чем 1gb. Поэтому так или иначе приходилось использовать кеш ОС.

Сейчас эта проблема устранена в основном (не до конца на самом деле... остались некоторые внутренние накладные расходы которые линейно от обьема shared memory растут), и разговоры о direct IO ведутся но общее мнение разработчиков таково:
текущая схема работы работает вполне прилично и пока никто еще не предоставил test case и результаты где бы direct IO давало бы выйгрыш в скорости работы и смысла в этом направлении двигатся нет (во всяком случае пока нет спонсоров которые бы это оплатили).
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015415
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarstoneНасчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан?


В процессорах есть двойное кэширование? Потому что в случае с PostgreSQL имеем как раз двойное кэширование. А в IBM например думаете дураки сидят когда придумали использовать DirectIO для файлов базы?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015434
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronWarstoneНасчет надежности - не согласен, а насчет накладных расходов... При первом приближении - кажется да, но если подумать, то L3/L2/L1 cache в процессорах зачем-то сделан?


В процессорах есть двойное кэширование? Потому что в случае с PostgreSQL имеем как раз двойное кэширование. А в IBM например думаете дураки сидят когда придумали использовать DirectIO для файлов базы?L3/L1 cache. L3 от 256Кб до 2Мб сейчас, L1 32/64Кб. Читайте доки.

А в IBM сидят не дураки (Причем тут IBM?) просто ИМХО считалось что их СУБД будет одна на железе. Для Пг-же считалось что на этом-же железе будет крутиться еще и веб-сервер или еще чего... И в этом случае использование кеша ОС - оправданно. Если хочется поведения а-ля IBM - ставьте shared_buffers в 70-80%.

ЗЫ: Предлагаю дальнейшую дискуссию выделить в отдельную тему.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015445
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы даже сказал не "двойное" а дублирующее кэширование. Насчет надежности такой схемы: она однозначно ненадежна при записи . База пишет данные в лог, пишет их в файл данных и считает что они уже на диске. А они всего то попали в файловый кэш ФС и неизвестно когда они будут реально записаны на диск . Это конечно не касается супер навороченных дисковых стоек с батарейками, но вполне имеет место проблема для недорогих серверов.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015465
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К модератору:
если вас не затруднит, пожайлуста, отделите вопросы касащиеся shared buffers/direct IO из этой темы в отдельную.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37015901
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronЯ бы даже сказал не "двойное" а дублирующее кэширование. Насчет надежности такой схемы: она однозначно ненадежна при записи . База пишет данные в лог, пишет их в файл данных и считает что они уже на диске. А они всего то попали в файловый кэш ФС и неизвестно когда они будут реально записаны на диск . Это конечно не касается супер навороченных дисковых стоек с батарейками, но вполне имеет место проблема для недорогих серверов.Читайте мануалы. Для этого fsync придуман.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016210
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Warstone...
Читайте мануалы. Для этого fsync придуман.

Читал, параметр действует на запись буфера write ahead log на диск при выполнении коммита в базе: сервер ждет когда буфер лога будет действительно записан на диск и только после этого коммит считается выполненным. Конечно это решает проблему с надежностью.

However, using fsync results in a performance penalty: when a transaction is committed, PostgreSQL must wait for the operating system to flush the write-ahead log to disk .

Но одновременно снижает производительность.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016225
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andron,

"Но одновременно снижает производительность."

- использование жестких дисков вообще снижает производительность.)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016290
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk...
Сейчас эта проблема устранена в основном (не до конца на самом деле... остались некоторые внутренние накладные расходы которые линейно от обьема shared memory растут), и разговоры о direct IO ведутся но общее мнение разработчиков таково:
текущая схема работы работает вполне прилично и пока никто еще не предоставил test case и результаты где бы direct IO давало бы выйгрыш в скорости работы и смысла в этом направлении двигатся нет (во всяком случае пока нет спонсоров которые бы это оплатили).

Набрав в гугле "Direct IO performance" можно сразу найти ссылки на статьи почему ведущие разработчики СУБД используют его в своих базах. А PostgreSQL разработчики сомневаются что оно полезно :) Так что думаю тут дело не в test case а в ресурсах самих разработчиков.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016307
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

Обычно выделенный "диск" под вал-лог все вопросы "производительности" снимет. // ну и плюс правильно выставленные параметры "сброса" буферов, то что про чекпоинты.

вот в тему:

http://it.toolbox.com/blogs/database-soup/rhel-6-and-the-return-of-wal_sync_method-42931?rss=1

http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm

http://archives.postgresql.org/pgsql-hackers/2010-11/msg00226.php - тут надо всю ветку полистать.

а вот кое-что про чекпоинты:

http://www.depesz.com/index.php/2010/11/03/checkpoint_completion_target/
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016361
eddie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha TyurinMisha Tyurin,

Обычно выделенный "диск" под вал-лог все вопросы "производительности" снимет. совсем свалюсь в оффтопик ;)

в случае скажем 4 дисков какая конфигурация будет предпочтительнее?
raid 10 под data+wal или raid 1 под data + raid 1 под wal?
в случае 6 и более дисков тот же самый вопрос - есть ли смысл делать отдельный raid 1 под wal?

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

ps: речь в первую очередь про сервера, соответсвенно подразумевается использование рейд-контроллеров с bbu.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016411
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eddie,

суть в том, что вы ничего от direct io для вал-лога по факту не получаете, кроме общих потенциальных проблем с ним связанных.

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

--

про конфигурацию райдов, надо прикидывать. у меня сейчас зеркало из двух винтов под вал и четыре диска в десятке под базу. ничего не меряли - просто так получилось)
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016442
AlexeyNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andron

Если ты думаешь, что люди делающие PG делают что-то не так - возьми и помоги, если есть острое желание, время, силы и знания. Что сложного? Вот Maxim Boguk так и поступил.

Maxim Boguk
Насколько добавляется I/O при таком, ленивом вакууме?
Можно как-то лимитировать по этому параметру?
Насколько оцениваете надежность - на фронтальной базе запустить можно?
А то опять эти дампы-копи-пасты между 4-мя серваками :(


eddie

Без знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016487
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeyNP Maxim Boguk
Насколько добавляется I/O при таком, ленивом вакууме?
Можно как-то лимитировать по этому параметру?
Насколько оцениваете надежность - на фронтальной базе запустить можно?
А то опять эти дампы-копи-пасты между 4-мя серваками :(Если сравнивать с VACUUM FULL, то, теоретически, "не на много больше", но тут только тесты покажут.

Лимитировать по IOPSам пока нельзя, но планируется, насколько я понял.

Про надежность - пусть сам автор скажет, я туда пока-что не сильно залез.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016536
eddie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurinсуть в том, что вы ничего от direct io для вал-лога по факту не получаете, кроме общих потенциальных проблем с ним связанных. понятное дело, wal у нас в общем-то небольшой

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

наоборот, СУБД знает что она делает - index scan или seq scan, соответственно и есть смысл в учреждающем чтении или нет.


AlexeyNPБез знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД. а как обосновать выделенное?
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016708
AlexeyNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeyNPБез знания специфики задачи что-то посоветовать нельзя. Если грубо, то мало коммитов/много чтений, то лучше один массив. Если много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД. а как обосновать выделенное?[/quot]

Логически - на этот массив не будет идти I/O по чтению основных данных БД.
Практически - было у меня пара проектов, где выделенный массив под WAL давал прирост скорости - шла работа с большими кусками текстовых данных (документы).

На практике, обычно, не удается найти достаточно лишних дисков, чтобы соорудить из них WAL-массив, так что проще все закинуть в один кусок RAID-10 и пусть ось+контроллер все сами разруливают. Ну и в среднем если по профилю нагрузки смотреть - если много коммитов, то это основной профиль БД, и нет смысла его отделять, а если много чтений, то аналогично. Так что, наверное, то что в цитате, это скорее пожелание, а не правило - т.е. если можно, то лучше выделить, но не критично.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016747
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eddie,

скан индекса - дело похоже и правду довольно "произвольное" - но это очень мало переборов. или я не прав? могу и ошибится.

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

--

если у нас много пишущих транзакций, то нам надо их все фсинкать.

сколько позволяет делать записей в секунду современный диск?

а) без кеша рейда с батарейкой (может он сглаживает пики через кеш)
б) с кешом рейда
в) как зависит кол-во возможных записей в секунду от конфигурации рейда? может ли рейд писать быстрее чем один голый диск? мне кажется что нет, это я вывожу из определения рейд 0. можно и обсудить.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016759
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

в) поправляюсь, если он может писать параллельно куски данных - то похоже имеем серьезное увеличение скорости по кол-ву винтов в рейде 0
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37016876
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeyNPЕсли много коммитов, то лучше отдельный массив под WAL. Надо знать профиль нагрузки на БД.Всегда казалось что если много INSERT/UPDATE операций, а не COMMIT, так как I/U операции вроед так-же в WAL оседают, даже если потом был роллбек... Поправьте меня, если я не прав.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37017202
сколько позволяет делать записей в секунду современный диск?

Смотрите среднее время поиска сектора (seek time) для диска. Среднее кол-во иопсов будет как 1/ на это время. Для типичных SATA HDD дисков около 100. У серверных вариантов HDD числа будут выше в разы, до 2-3.

а) без кеша рейда с батарейкой (может он сглаживает пики через кеш)
б) с кешом рейда


От батарейки скорость не зависит, важен режим записи - write-back (блок считается записанным после записи в кэш контролёра) или write-through (... на диск). Прирост будет, а на сколько - зависит от типа нагрузки.

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


Опять всё зависит от типа нагрузки. Для "разбросанных" IO (random, scattered read/write) и последовательных IO большими блоками RAID0 в идеале удваивает кол-во иопсов. RAID1 удваивает максимум до 2х иопсы на scattered чтение (диски везде считаем одинаковыми). Это называется расслоением блочного устройства и различные комбинации RAID0/1/JBOD как раз используются для повышения иопсов.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37017279
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeyNP Andron

Если ты думаешь, что люди делающие PG делают что-то не так - возьми и помоги, если есть острое желание, время, силы и знания. Что сложного? Вот Maxim Boguk так и поступил.

Maxim Boguk
Насколько добавляется I/O при таком, ленивом вакууме?
Можно как-то лимитировать по этому параметру?
Насколько оцениваете надежность - на фронтальной базе запустить можно?
А то опять эти дампы-копи-пасты между 4-мя серваками :(



IO добавляется приблизительно столько же сколько от vacuum full было бы (+/- 2 раза от ситуации в таблице зависит).
По IO лимитировать можно... смотрите параметры:
--pages-per-round= (сколько страниц чистить за 1 цикл вызова хранимки) по умолчанию 10
--delay= (сколько в секундах ждать после каждой пачки в --pages-per-round принимает float по умолчанию - 0)
--delay-ratio - наиболее полезный для целей лимитирования нагрузки параметр... работает он следующим образом: смотрится за сколько обработалось последняя --pages-per-round= пачка страниц, после спит (время обработки предыдущей пачки)*--delay-ration времени, умолчательное значение 2 (это позволяет одному и тому же скрипту нормально работать и в пиковую нагрузку и ночью в минимуме нагрузки... так как чем медленее идет основной процесс тем больше будут паузы между вызовами... я в при эксплуатации видел до 10 раз разницы в скорости между дневной и ночной работой).

Умолчательные настройки (не быстро но не создавая большой нагрузки на сервер):
--pages-per-round=10 --delay-ratio=2
Настройки упаковать любой ценой максимально быстро:
--pages-per-round=100 --delay-ratio=0
(ставить больше 100 в --pages-per-round=100 не стоит начинаются накладные расходы и с 1000 уже в 1.5 раза медленее идет... меньше 10 тоже не стоит ставить пока нет реализации через DBD::Pg или managed psql).

Обязательно стоит посмотреть на то чтобы у вас vacuum_cost_delay был в базе так настроен чтобы вызов vacuum не вызывал перегрузки дисковой системы, так как скрипт в процессе работы делает обычный vacuum таблицы до 20 раз.

Система тестировалась на ОЧЕНЬ нагруженных базах моих клиентов (список тут: http://mboguk.moikrug.ru/) на очень разных серверах и структурах таблиц. Проблем выявлено не было (лучше не забывать делать svn up перед использованием так как выявленные сложности я оперативно исправяю).

Потери или повреждения данных не было ни разу, 1 раз возникла перегрузка дисковой системы в дневное время (после чего собственно и появилась автоподстройка нагрузки через --delay-ratio).

Комментарии по результатам использования приветствуются.
...
Рейтинг: 0 / 0
Vacuum Full без полного лока таблицы
    #37017467
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eddieнаоборот, СУБД знает что она делает - index scan или seq scan, соответственно и есть смысл в учреждающем чтении или нет. http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY

PG всё это умеет, и O_DIRECT и posix_fadvise.
...
Рейтинг: 0 / 0
25 сообщений из 154, страница 2 из 7
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Vacuum Full без полного лока таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]