Контакты
Местоположение
Россия, Санкт-Петербург и область, Санкт-Петербург

Достижения

Все достижения (129)

Наибольший вклад в теги

Все теги (337)

Лучшие ответы пользователя

Все ответы (2049)
  • Какие книги есть по правильному написанию кода, по правильной структуре кода?

    Melkij
    @Melkij
    PostgreSQL DBA
    Классика:
    Совершенный код Макконнела
    Рефакторинг Фаулера
    Ответ написан
    2 комментария
  • Как сделать чтобы большая БД держала нагрузку?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ооо.... Вы это сейчас вообще серьёзно?

    Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
    Запускаю свою облачную платформу, код и архитектура создана с нуля.

    У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

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

    Значит этому юзеру достаточно ходить только на мастер.
    Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
    select somefunc();
    Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

    Другой пример:
    begin isolation level repeatable read;
    select ...
    update ...
    commit;

    Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
    И прочие принципиально-нерешаемые вопросы.

    DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
    Ответ написан
    Комментировать
  • Понимание PCI-ex линий?

    Melkij
    @Melkij
    PostgreSQL DBA
    Открываете мануал к материнке и внимательно ищете сведения о том, что куда подведено электрически, в каком количестве. Если в мануале не описано - то продолжаете упорно искать в интернетах, что куда подведено. Начните с блок-схемы чипсета.

    В частности, самый верхний M.2 вам недоступен вовсе. Потому что i7 10700k - это 10 поколение, мануал однозначно упоминает что верхний M.2 работает только при установке CPU 11 поколения (потому что слот подведён на линии PCI-E самого CPU)
    Средний M.2 отключит один из разъёмов SATA в случае использования SATA M.2. Для NVME диска нет примечаний, до 4 линий от чипсета.
    Нижний M.2 отключит два разъёма SATA при установке любого SSD в этот слот. Останутся ли у него 4 линии для PCI-E - не упомянуто, но скорей всего да.

    У чипсета линий PCI-E более чем достаточно, аж 24 штуки. К чипсету подключены два M.2, один слот PCI-E x4, один слот x1, итого на всякую прочую мелочёвку остаётся ещё 11 линий.

    учитывая количество линий на чипсете, я могу установить 1 видеокарту в режиме x16

    Верхний PCI-E подключен к CPU, а не к чипсету.
    Ответ написан
    1 комментарий
  • Какие книги прочитать по лучшим практикам проектирования БД?

    Melkij
    @Melkij
    PostgreSQL DBA
    Bill Karwin SQL Antipatterns
    В общем-то, в духе рефакторинга как раз: как делают часто неправильно, почему это плохо (но когда и адекватно для задачи) и как сделать лучше.
    Ответ написан
    1 комментарий
  • Как добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей?

    Melkij
    @Melkij
    PostgreSQL DBA
    Могу ответить про postgresql.

    без ее блокировки

    Именно в такой постановке вопроса - никак.

    С короткой блокировкой (доли секунд) - другое дело. Принципиально зависит от конкретного alter table и версии базы
    Простой alter table foo add column col; - ставите statement_timeout to '100ms' и вносите как есть.
    alter table foo add column col default const - после pg11 см. выше, до - интересное приключение
    Если default не константа - сначала внесите как default null, затем обновляете частями. как в процессе до pg11.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (3)