Comments 39
Всё равно самым узким местом была 1С, даже с учётом того, что базы размерами всего гигов по 50-100 были. Те, несколько процентов, что удалось отвоевать на конфигах mssql, всё равно терялись на уровне производительности логики вышестоящего приложения (того самого 1С).
размер ОЗУ превышает размер базы на диске). Не очень понятно, почему сообщество postgres до сих пор использует настройки по-умолчанию, актуальные для сервера с небольшим объемом ОЗУ и дисками HDDУ вас не ОЗУ большое, у вас просто база маленькая)
Не очень понятно, почему сообщество postgres до сих пор использует настройки по-умолчанию, актуальные для сервера с небольшим объемом ОЗУ и дисками HDD, а не для современных серверов. Надеюсь в скором времени это исправят.
Не исправят, потому что это не ошибка. Параметры постгреса по умолчанию установлены таким образом, чтобы база запускалась на чём угодно, включая холодильники и кофеварки. Для оптимизации производительности его нужно настраивать (сюрприз!). Поздравляю автора статьи с этим открытием.
В mysql, например, раньше были примеры конфигов — my-small, my-large, my-medium, my-huge, в базе годились как и для холодильника (меньше 64мб), так и для вполне приличного вдс (1-2гб). И даже был отдельный пример для 4гб с подключением иннодб my-innodb-heavy-4G
Да, безусловно, в идеальном мире, базу данных должен настраивать администратор под конкретные задачи, блаблабла. Но в подавляющем большинстве случаев этих конфигов хватало для того, что бы на свежеподнятом вдс не напарываться на дурацкие проблемы прямо из коробки и не надо было звать дорогостоящего администратора или разбираться с этими нюансами самостоятельно.
Юзкейс:
Надо поставить Постгрес вот на эту машину. Конфигурация машины известна, примерный профиль нагрузки тоже известен. Хочется в красивой менюшке потыкать кнопочки и готово. Более-менее оптимальные настройки выставлены.
Добавить возможность сохранить конфиг и применять его на другие такие же машины и вообще хорошо будет.
pgconfigurator.cybertec.at
И вот ещё один, попроще: https://pgtune.leopard.in.ua/
Вбиваете количество ОЗУ, тип дисков и вам дают минимальные изменения, которые нужно внести в конфиг под эту конфигурацию.
А сейчас вся эта оценка перекладывается на админа, а разработчики постгре умывают лапки.
При том, что уже 2022-й год на дворе, AI якобы стучится в окно. А чёртов постгрес даже сам посчитать оптимальную разбивку памяти не может. Какой там AI...
И, заметьте, мы не рассматриваем достаточно распространённые случаи, когда на сервере не только постгрес, но и другое ПО, которому тоже нужно оставить кусок памяти. Про это постгрес должен телепатически догадаться?
Имхо, высосанное из пальца нытьё.
С каких пор максимальная утилизация приложением железа считается несвойственной для приложения деятельностью? Этим должны феи из страны грёз заниматься? Какой процент установок Постгрес делается Ансиблом или подобными системами, неужели близкий к 100? Откуда Ансиблу знать оптимальные параметры под конкретное железо и профиль нагрузки конкретной БД?
Как правило, БД - это сердце любого приложения, где вообще есть БД. Какого лешего на сервере с 1Тб RAM предлагать по умолчанию work_mem=4Mb? Ты что-то слышал про системные вызовы, позволяющие определить запущенные приложения и используемую ими память, не прибегая к телепатии? Если требуется сделать запас, почему нельзя это сделать указанием одного параметра (фиксированного или динамического макс. порога исползования RAM) вместо пяти? Что, ПО СУБД не способно посчитать оптимальную разбивку самостоятельно?
Имхо, комментарий человека с мышлением IT-неандертальца, не делающего хорошо свою работу, не стремящегося повысить эффективность работы, и забивающего на сигналы пользователей продукта об устаревшей конфигурации (да и моральном устаревании подхода с фиксированной конфигурацией как такового), "ведь это лишь нытьё". Так может, СУБД вообще не нужны, супермэн ты наш суровый, можно ж в csv данные хранить, зачем перенимать свойственную им функцию хранения данных ещё куда-то?
От себя добавлю, что я выставил минимальные параметры seq_page_cost = random_page_cost = 0.1, чтобы отдать приоритет данным в памяти над дисковыми
По-моему автор чего-то сильно нагородил здесь. Открываем документацию:
By default, these cost variables are based on the cost of sequential page fetches; that is, seq_page_cost is conventionally set to 1.0
Если я правильно понял, то выставив в 0.1 он просто ухудшил стоимость остальных операций в 10 раз (остальные это сканы на CPU), т.е. предпочёл использовать обращение к диску вместо использования процессора. Т.е. всё наоборот сделал, относительно заявленного.
Грустно, когда люди работают с дефолтными настройкам
Вообще, как работает процесс обучения — человек сталкивается с проблемой и ищет ее решение. Только адресный поиск информации с последующим ее закреплением может дать результат. Чтение о чем-то сферическом запишется в кратковременную память и растворится, так же, как институтские лекции по матану
И, конечно, нужно точно знать какой параметр может дать больший прирост производительности относительно других. Об этом в документации тоже не напишут
Я утверждаю, что для настройки постгреса, подходящей в подавляющем количестве случаев достаточно ознакомиться и осознать не все 3000 страниц и даже не 90. Знания о параметрах, связанных с оперативной памятью, I/O, bgwriter`ом и вакуумом расположены в документации достаточно компактно. Отправной точкой для, как вы выражаетесь, «адресного поиска» может служить любой онлайн-калькулятор вроде pgtune.leopard.in.ua.
Какой параметр в каждом конкретном случае окажет большее влияние — зависит от многих критериев, в том числе не связанных с железом и никакая автонастройка все их не в состоянии объять. Разумеется, бездумно ничего ставить не нужно, именно для этого я и рекомендую обратиться к документации, а точнее тем её немногим страницам, которые как раз описывают влияние на СУБД. Pgtune я привёл в качестве примера отправной точки, раз уж вы отказываете людям в способности загуглить, что в первую очередь стоит настраивать после установки постгреса.
Ну и я, если бы был на свою голову, DBA DB2 или там Оракла какого-нибудь, не стал бы безоговорочно доверять подобным автонастройкам и профилям, хотя бы до проведения натурных испытания со сравнением с собственной конфигурацией.
Возвращаясь к теме статьи — то, что её автор узнал для себя про веса операций (при условии, что остальные настройки у него в порядке) так поздно и это стало для него открытием — досадное недоразумение, только и всего.
Как одно изменение конфигурации PostgreSQL улучшило производительность медленных запросов в 50 раз