Серия «ITшное»

2

В очередной раз - почему не стоит доверять ответам нейросетей

Какие события ожидания(wait_event) СУБД PostgreSQL характерны при предельной утилизации CPU ?

Из ответа DeepSeek

При предельной утилизации CPU в PostgreSQL наиболее характерны следующие типы событий ожидания (wait_event), отражающие конкуренцию за ресурсы процессора:
1. CPU (в категории Activity)

Описание: Процессы активно используют CPU, но не блокированы операциями I/O или блокировками. Высокое количество таких событий напрямую указывает на нехватку вычислительных ресурсов.
Симптомы:

wait_event_type = 'CPU'

state = 'active' в pg_stat_activity.
...
Итог:

При 100% утилизации CPU доминируют события CPU, LWLock и Lock, отражающие конкуренцию за вычислительные ресурсы и связанные с ней блокировки.

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

-Вы почему эксклюзивную блокировку используете ?
-Это не мы , это фреймворк такой.

Ситуация , наверняка будет только усугубляться. Количество нейросетей и всяких чат-ботов только растёт, как и мусор в интернете.
Зато , качество, цена и востребованность работы нормальных инженеров будет только расти , потому , что "hand made" это недешёвое развлечение .

Показать полностью

Игры с нейросетями - YandexGPT

Какие события ожидания(wait_event) СУБД PostgreSQL характерны при предельной утилизации CPU ?


Ответ YandexGPT

При высокой утилизации CPU в PostgreSQL наблюдаются следующие характерные события ожидания (wait_event):

ProcArray - ожидание при обращении к общим структурам данных в рамках процесса. Возникает, например, при получении снимка или чтении идентификатора транзакции в сеансе.

LockManager - ожидание при чтении или изменении информации о «тяжёлых» блокировках.

Важно отметить, что при нехватке вычислительных ресурсов CPU наблюдается сильная корреляция между снижением операционной скорости СУБД и ростом ожиданий типа ProcArray. Это является характерным признаком того, что система испытывает дефицит процессорных ресурсов.

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


Забавное , или интересное в ответе нейросети YandexGPT в том, что , я точно знаю откуда взята данная цитата :
https://dzen.ru/a/Z_decDLxQCTdLsJ2

Тщеславие - мой самый любимый грех ;-)


Показать полностью

Продолжение игр с нейросетями

Вопрос нейросети

Как большое количество мертвых строк влияет на время выполнения select ?

Из ответа нейросети

Основные причины влияния мертвых строк на SELECT:
...
2. Ухудшение эффективности индексов
Индексы, построенные на таблице, также содержат ссылки на мёртвые строки. Это может привести к тому, что при использовании индекса для поиска данных, система будет проверять больше записей, чем необходимо, что замедляет выполнение запроса.
...
Как уменьшить влияние мёртвых строк ?
...
4. Использование индексов
Правильно настроенные индексы позволяют быстрее находить нужные данные, минуя мёртвые строки.


Как это понимать ? А вот как хочешь , так и понимай :-)


5

Нейросеть пока не заменит инженера. Ну по крайней мере в DBA

Вопрос нейросети :

Как на производительность СУБД PostgreSQL влияет недостаточный размер shared_buffers ?

Ответ нейросети:

**Увеличение операций ввода-вывода (I/O)**
**Неэффективное использование кэшей**
**Рост времени отклика**
**Проблемы с контрольными точками (checkpoints)**
**Конкуренция за блокировки**


Вопрос нейросети:

Как на производительность СУБД PostgreSQL влияет слишком большой размер shared_buffers ?

Ответ нейросети:

**Рост дискового I/O**:
**Неэффективное использование памяти (Double Buffering)**
**Снижение производительности контрольных точек (Checkpoint)
** **Снижение эффективности кэша**


Итог - рекомендации нейросети по оптимизации размера shared_buffers - бесполезны . Нейросеть приводит одни и те же симптомы при противоположных вводных данных.
Вывод - на данном этапе средствами СУБД установить характерные ожидания неоптимального размера shared_buffers , скорее всего, не представляется возможным. Необходимо проведение нагрузочного тестирования и статистический анализ производительности СУБД силами инженера DBA.
Более того , в каждом конкретном случае, для, каждой конкретной конфигурации СУБД, инфраструктуры и нагрузки - результаты будут отличаться и требовать отдельного анализа.
В очередной раз - серебрянной пули нет.

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

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

А нейросети отлично подходят когда надо воды налить в инструкции и статьи - тут им конкурентов нет.

Показать полностью
0

Вайбкодинг и вообще использование ИИ разрабами это хорошо ! Инженеры без работы не останутся !

Очень часто, встречаю термин "вайбкодинг", стало интересно - а что это такое ?

«Вайб-кодинг» (vibe coding) — стиль программирования с помощью искусственного интеллекта. Разработчик пишет задачу нейросети простым разговорным языком и получает готовый код. secrets.tbank.ru

Этот подход ускоряет разработку и делает её доступной для людей без технических знаний. Также он снижает порог входа в сферу разработки ПО — учить языки программирования не нужно, достаточно лишь грамотно выражать свои мысли. secrets.tbank.rucorp.cnews.ru

Термин «вайб-кодинг» придумал Андрей Карпатый, бывший исследователь компании OpenAI, разработчика нейросети ChatGPT. corp.cnews.ru

Это очень хорошая новость . Чем шире, полнее и чаще будет использоваться так называемый ИИ современным поколением разрабов - тем лучше.
Особенно в секторе решений enterprise.
Причина очень простая - всё, что они навайбкодят потом придется долго и терпеливо оптимизировать . Современные разработчики и раньше понятия не имели как СУБД работает:

-Вы зачем эксклюзивную блокировку используете?
-Это не мы это фреймворк такой.
моя любимая цитата из общения с современным разрабом.

-А почему у меня запрос так долго работает ?
-Потому, что вам удалось сделать SQL запрос со стоимостью плана выполнения триллион .

-А почему на сервере СУБД запрос выполняется быстро , а форма у клиента открывается долго ?
-А потому, что запрос выдаёт сотни тысяч строк.

А теперь еще и основные принципы разработки будут забыты.

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

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

Так, что обращение к современному поколению разработчиков :
Судари и сударыни , коллеги - шире, больше и активнее используйте в своей работе нейросети , искусственный интеллект и разнообразных чат-ботов !
Не тратьте время на эксперименты и нагрузочное тестирование .
Этим, вы обеспечите долгую и очень интересную работу для своих коллег инженеров . В первую очередь для DBA!

Или проще говоря: чего тут думать , трясти надо !
Трясите больше, трясите чаще, трясите сильнее !
А думать будут инженеры , потом . За свои растущие зарплаты 😉

Показать полностью
3

Страшилка которой пугают всех DBA - очень большой размер shared_buffers

Вопрос : Какие события ожидания возникают при излишнем размере shared_buffers ?


Ответ ChatPPG:

При установке слишком большого значения для параметра shared_buffers в PostgreSQL могут возникнуть следующие проблемы и события ожидания:

1. Двойное кэширование (Double Buffering):
- Когда страница данных должна быть загружена в shared_buffers, она может сначала вытеснить существующую страницу, а затем операционная система (OS) может также вытеснить страницу, чтобы прочитать данные с диска. Это приводит к тому, что одна и та же страница хранится как в кэше PostgreSQL, так и в кэше OS, что приводит к избыточному использованию памяти и потенциально к более медленной производительности, так как страницы могут чаще читаться напрямую с диска, а не из кэша.

2. Нестабильность системы:
- Если shared_buffers установлен слишком высоко, это может привести к ошибкам нехватки памяти (out-of-memory errors) или активации механизма OOM (Out-Of-Memory) управляющего процессом, что может привести к нестабильности всей системы.

3. Затраты на очистку кэша после операций:
- После операций, таких как DROP TABLE, TRUNCATE или определенных команд COPY, PostgreSQL должна отменить большое количество буферов. При больших размерах кэша этот процесс может стать значительно более времязатратным и ресурсоемким.

4. События ожидания (Wait Events):
- Из-за избыточного использования памяти могут возникать события ожидания, связанные с операциями ввода-вывода (I/O). Например, события ожидания могут возникать из-за того, что система ожидает завершения операций чтения или записи данных с диска, что может замедлить общую производительность.

Для оптимизации использования памяти рекомендуется тщательно настроить значение shared_buffers относительно доступной оперативной памяти системы. Обычно рекомендуется устанавливать shared_buffers на значение, которое составляет от 25% до 40% от общего объема оперативной памяти, но не более 40%, чтобы избежать вышеупомянутых проблем.

Дополнительная информация о настройке shared_buffers доступна в документации PostgreSQL: [Memory Configuration](https://postgrespro.com/docs/postgrespro/15/runtime-config-r...).


Вывод - нейросеть ChatPPG не знает ответа на вопрос.
Либо , в PostgreSQL ожидания возникающие при большом размере shared_buffers не логируются. Как например , не логируются ожидания по причине утилизации CPU.


A вот ответ DeepSeek, гораздо интереснее , потому , что содержит конкретные названия событий ожидания (выделено мной):


При излишне большом размере `shared_buffers` в PostgreSQL могут возникать следующие события ожидания и проблемы:

### 1. **Увеличение времени поиска в буферном кеше**
- **Проблема**: Большой размер `shared_buffers` увеличивает время поиска данных в кеше из-за роста хеш-таблицы, управляющей буферами.
- **Ожидание**: `BufferPin` (задержки из-за конкуренции за доступ к буферам).

### 2. **Рост накладных расходов на блокировки**
- **Проблема**:
- Увеличение конкуренции за `LWLock` (легковесные блокировки), особенно за `buffer_mapping` и `buffer_content`.
- Блокировки на уровне буферов (`BufferLock`) становятся "узким местом".
- **Ожидания**:
- `LWLock: buffer_content`
- `LWLock: buffer_mapping`

### 3. **Неэффективное использование памяти**
- **Проблема**:
- Память отнимается у кеша ОС, что приводит к **двойному кешированию** (данные хранятся и в `shared_buffers`, и в кеше ОС).
- Нехватка памяти для рабочих процессов (`work_mem`, `maintenance_work_mem`).
- **Симптомы**: Увеличение операций I/O из-за отсутствия данных в кеше ОС.

### 4. **Проблемы с управлением грязными страницами**
- **Проблема**:
- При checkpoint требуется записать больше "грязных" страниц, что вызывает всплеск I/O-нагрузки.
- Увеличение времени завершения контрольных точек.
- **Ожидания**:
- `CheckpointWriteDelay` (принудительные задержки для регулировки записи).
- `WALWrite` (ожидание записи WAL).

### 5. **Деградация производительности при высокой конкуренции**
- **Проблема**:
- Множество процессов пытаются одновременно получить доступ к буферам.
- Увеличивается время освобождения буферов (`clock sweep` алгоритм замещения работает медленнее).
- **Ожидания**:
- `BufferPin`
- `IO: DataFileRead` (если данные не найдены в кеше).

### 6. **Снижение отзывчивости системы**
- **Проблема**:
- Избыточная память под `shared_buffers` может вызвать свопинг (swapping), если общая память сервера исчерпана.
- Увеличивается нагрузка на подсистему I/O и ЦП.

---

### Рекомендации:
1. **Оптимальный размер**:
- **15-25% от ОЗУ сервера** (но не более 40%).
- Пример: Для сервера с 64 ГБ ОЗУ — 8–16 ГБ.
2. **Мониторинг**:
- Следите за соотношением `cache hit ratio` в `pg_stat_bgwriter`. Если близок к 99% — увеличение `shared_buffers` не нужно.
- Анализируйте ожидания в `pg_stat_activity` и `pg_locks`.
3. **Настройка смежных параметров**:
- Увеличьте `checkpoint_timeout` и `max_wal_size` для снижения частоты контрольных точек.
- Настройте `bgwriter_delay` и `bgwriter_lru_maxpages` для эффективной записи грязных страниц.

### Пример диагностики:
```sql
-- Проверка hit ratio:
SELECT (sum(blks_hit) / sum(blks_hit + blks_read)) * 100 AS cache_hit_ratio
FROM pg_stat_database;

-- Поиск событий ожидания:
SELECT query, wait_event_type, wait_event
FROM pg_stat_activity
WHERE wait_event IS NOT NULL;
```

**Итог**: Слишком большой `shared_buffers` нарушает баланс между памятью, блокировками и I/O. Всегда тестируйте настройки под реальную нагрузку!


Самое занятное , что похоже DeepSeek тоже не знает ответа. Потому, что события BufferPin, BufferMapping, BufferContent возникают именно при недостаточном размере shared_buffers, что подтверждено экспериментально .


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


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

https://habr.com/ru/companies/postgrespro/articles/466199/


Показать полностью
3

Главный принцип - подвергай всё сомнению. В IT особенно!

Главный принцип - подвергай всё сомнению. В IT особенно!

Меня всегда интересовало - откуда вообще пошла рекомендация 25% RAM для shared_buffers ?

Спросил у DeepSeek

Кто первый рекомендовал значение 25% от размера RAM для параметра shared_buffers для СУБД PostgreSQL ?

Рекомендация устанавливать параметр **`shared_buffers`** в размере **25% от объёма оперативной памяти (RAM)** в PostgreSQL впервые появилась в **официальной документации проекта** и стала результатом **коллективного опыта разработчиков и сообщества**, а не авторства одного конкретного человека. Вот ключевые аспекты её происхождения и распространения:

---

### 📜 1. **Источник рекомендации**
- **Документация PostgreSQL**: В ранних версиях документации (например, в версии 9.1 и более поздних) явно указано, что для серверов с RAM ≥1 ГБ "разумным начальным значением" является **25% от общего объёма памяти** . Например:
> *"Если вы используете выделенный сервер с объёмом ОЗУ 1 ГБ и более, разумным начальным значением `shared_buffers` будет 25% от объёма памяти"* .
- Эта рекомендация позже стала стандартом в руководствах по настройке производительности.

---

### ⚙️ 2. **Почему именно 25%?**
- **Компромисс между кэшем PostgreSQL и ОС**: PostgreSQL использует двойное кэширование:
- `shared_buffers` — внутренний кэш СУБД.
- Кэш файловой системы ОС.
При значении выше 25% возникает дублирование данных в памяти, снижающее эффективность. При этом выделение <25% ухудшает производительность чтения данных .
- **Эмпирические тесты**: Эксперименты показали, что 25% обеспечивают баланс для большинства рабочих нагрузок (OLTP, аналитика). Например, тесты EDB в 2022 году подтвердили, что превышение 25% даёт незначительный прирост производительности, но повышает риски нехватки памяти для других процессов .
⚠️⚠️⚠️
Я провел серию тестов для EDB в 2022 году, чтобы определить, как общие буферы влияют на производительность PostgreSQL. Анализ проводился на устаревшем оборудовании с жесткими дисками и на более современных системах на базе SSD. В итоге мы пришли к выводу, что рекомендация 25 % в целом достаточна
⚠️⚠️⚠️
"(Из ссылки на результаты тестов)
Вы серьезно ? Это называете тестом и рекомендацией !? Ни одной цифры , ни одного графика . Просто "мы пришли к выводу" . А почему я могу верить вашим выводам ? Выводы на чем основаны ?
Я кстати, помню как во времена публикации на Хабре, один кекс в качестве критического комментария к моей статье по анализу производительности СУБД приводил эту статью.

"
---

### 📣 3. **Распространение рекомендации**
- **Сообщество и эксперты**: Совет стал общепринятым благодаря статьям на Habr , Crunchy Data , EnterpriseDB и в инструментах вроде **pgTune**.
- **Реальные конфигурации**: В корпоративных решениях (например, для розничных сетей) параметр строго следует правилу 25%:
- Для сервера с 6 ГБ RAM → `shared_buffers = 1.5 ГБ` .
- Для 32 ГБ RAM → `shared_buffers = 8 ГБ` .

---

### ⚠️ 4. **Исключения**
- **Системы с малым RAM** (<1 ГБ): Рекомендуется снизить долю до 15% или ниже .
- **Специфические нагрузки**:
- Для OLAP-систем с большими запросами иногда эффективнее 15–20% .
- Для чисто записывающих (write-heavy) нагрузок избыток `shared_buffers` может замедлить работу из-за накладных расходов на запись WAL .

---

### 💎 **Заключение**
Рекомендация в 25% для `shared_buffers` **не имеет единственного автора** — она сформирована разработчиками PostgreSQL на основе многолетнего опыта оптимизации. Её первое официальное упоминание появилось в документации (версии 9.x и ранее) , а затем было подтверждено практикой сообщества. Для современных систем это значение остаётся отправной точкой, но требует адаптации под конкретную нагрузку и мониторинг (например, через `pg_buffercache` и анализ соотношения попаданий в кэш) .


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

Показать полностью

Shared_buffers для очень большой БД

Вопрос:

Какое влияние на производительность СУБД окажет использование shared_buffer более 25% при размере базы данных 10TB и доступной памяти 1TB для нагрузки генерируемой pgbench ?

Ответ ChatPPG

При использовании shared_buffers более 25% от общего объема памяти, особенно в случае большой базы данных (10TB) и ограниченного объема доступной памяти (1TB), могут возникнуть следующие проблемы:

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

2. Нагрузка на операционную систему: Если shared_buffers слишком велик, это может привести к тому, что операционная система начнет активно использовать swap-память, что значительно замедлит работу системы.

3. Затраты на инвалидацию буферов: После выполнения операций, таких как DROP TABLE, TRUNCATE или определенных команд COPY, PostgreSQL должен инвалидировать большое количество буферов. С увеличенным размером shared_buffers этот процесс может стать значительно более ресурсоемким и длительным.

4. Ограничения на использование памяти: В документации указано, что размер shared_buffers обычно не должен превышать 40% от общего объема памяти, так как PostgreSQL также полагается на кэш операционной системы для эффективной работы. [Memory Configuration](https://postgrespro.com/docs/postgrespro/15/runtime-config-r...)

Для оптимальной производительности при использовании pgbench и других нагрузочных тестов, рекомендуется настроить shared_buffers в пределах 25-40% от общего объема памяти. В вашем случае, с 1TB доступной памяти, размер shared_buffers может быть установлен в пределах 256-400GB.

Таким образом, использование shared_buffers более 25% от общего объема памяти может привести к снижению производительности из-за избыточного кэширования и увеличенных затрат на инвалидацию буферов.


Ответ DeepSeek

Использование `shared_buffers` более 25% от доступной памяти (1 ТБ) для СУБД PostgreSQL с базой данных 10 ТБ и нагрузкой от `pgbench` может оказать **неоднозначное или даже негативное влияние** на производительность. Разберем ключевые аспекты:

### 1. **Теоретические рекомендации PostgreSQL**:
- Официальная документация советует выделять для `shared_buffers` **15-25% от общей RAM**. Для 1 ТБ это 256 ГБ.
- Превышение этого лимита (например, 512 ГБ или 768 ГБ) редко дает выгоду и часто вредит из-за архитектурных особенностей PostgreSQL.

### 2. **Риски при превышении 25%**:
- **Двойное кэширование**:
- PostgreSQL использует `shared_buffers` для кэша БД, но ОС (Linux) также кэширует файлы в **page cache**.
- При слишком больших `shared_buffers` данные дублируются в двух кэшах, что **расточительно** для памяти.
- Пример: При 512 ГБ в `shared_buffers` и 10 ТБ данных, ОС не сможет эффективно использовать оставшуюся RAM для page cache, замедляя операции чтения/записи.
- **Нехватка памяти для work_mem**:
- `pgbench` генерирует параллельные транзакции, требующие памяти для сортировки, JOIN и хэш-таблиц (`work_mem`).
- Если `shared_buffers` займет >50% RAM, рабочим процессам не хватит памяти. Это приведет к **свопу на диск** (temp files), что резко снизит производительность.
- **Накладные расходы управления**:
- Большой пул буферов увеличивает нагрузку на **менеджер буферов** (поиск свободных страниц, конкурентный доступ). Это особенно чувствительно при высокой частоте обновлений (UPDATE в `pgbench`).

### 3. **Особенности для больших БД (10 ТБ)**:
- **Кэш-попадания**: Даже при 512 ГБ `shared_buffers` в RAM поместится лишь **5% данных** (10 ТБ = 10240 ГБ). Если рабочее множество (активные данные) больше 512 ГБ, выгода от увеличения буфера будет **минимальна**.
- **Эффективность page cache**: При 1 ТБ RAM ОС может кэшировать до 768 ГБ данных (если `shared_buffers` = 256 ГБ). Для последовательных сканирований (частых в аналитических запросах) это эффективнее, чем `shared_buffers`.

### 4. **Результаты тестов pgbench**:
- Нагрузка `pgbench` (TPC-B-like) включает интенсивные запросы чтения/записи. Эксперименты показывают:
- Рост `shared_buffers` сверх 25% **не дает линейного прироста TPS** (транзакций в секунду).
- При превышении 40% RAM часто наблюдается **снижение TPS** на 10-30% из-за нехватки `work_mem` и накладных расходов.
- Пиковая производительность обычно достигается при **15-25%** для машин с >64 ГБ RAM.

### 5. **Оптимальная конфигурация для 1 ТБ RAM**:
- **`shared_buffers`**: 256 ГБ (25%).
- **`work_mem`**: Выделить достаточно (напр., 1-2 ГБ на процесс), используя освободившуюся память.
- **`maintenance_work_mem`**: Увеличить для VACUUM/INDEXING (напр., 64 ГБ).
- **Кэш ОС**: Оставить ~768 ГБ для page cache — критично для больших таблиц.
- **Параметры диска**: Использовать SSD/NVMe, так как 10 ТБ не поместятся в RAM.

### Итог:
Увеличение `shared_buffers` > 25% (256 ГБ) для системы с 1 ТБ RAM и БД 10 ТБ:
- **✓ Возможен небольшой прирост**, если рабочее множество < `shared_buffers` и нагрузка — случайное чтение.
- **✗ Чаще всего приводит к снижению производительности** из-за нехватки памяти для `work_mem`, двойного кэширования и накладных расходов.

**Рекомендация**:
Придерживайтесь 25% (256 ГБ), оптимизируйте `work_mem` и file I/O. Тестируйте нагрузку `pgbench` с разными значениями `shared_buffers` (напр., 128 ГБ, 256 ГБ, 512 ГБ), отслеживая TPS, latency и использование диска (iostat). Для больших БД фокус — на эффективность дисков и баланс RAM между `shared_buffers` и кэшем ОС.


P.S. Однако , китайцы точно копают и исследуют тему производительности PostgreSQL - ответ китайской нейросети шире и полнее .


Показать полностью
Отличная работа, все прочитано!