Ответы пользователя по тегу Linux
  • Как ускорить запрос Postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Нужен explain (analyze,buffers), сильно желательно с track_io_timing = on в конфиге.

    параметр work_mem на данный запрос не может оказывать почти никакого влияния

    Оказывает. Если планировщик решит, что work_mem не хватает - не будет hash join. Для сортировки 27кб, очевидно, без разницы.

    Впрочем, зачем вам вообще join подзапроса где одна только группировка подзапроса занимает половину времени ответа? Вам простой exists нужен.
    SELECT "t1".* FROM table_1 as t1
    where exists (select 1 from table_2 as t2 WHERE t1.primarykey=t2.session)
    ORDER BY "starttime" DESC LIMIT 20;

    А дальше know your data. Если по starttime DESC быстро находятся нужные exists - будет хорошо. Если exists мало - стоит подумать, а не денормализовать ли этот признак в table_1 с триггером для консистентности в table_2 и частичным индексом по starttime where t2_exists.

    Поля session и primarykey в формате uuid

    Не очень хорошая идея. Оно и сильно медленнее при сравнении относительно bigint (особенно если речь о varchar, а не uuid типе данных) и из-за случайного распределения несколько сбивает с толку статистику планировщика.
    Ответ написан
    1 комментарий
  • Как найти родительский процесс?

    Melkij
    @Melkij
    PostgreSQL DBA
    Есть у меня один зомби-процесс

    Где?
    user 3954 0.0 0.0 105316 952 pts/0 S+ 05:57 0:00 grep -w Z

    Здесь нет ни одного зомби.

    А grep в списке процессов ожидаемо есть и по условию "встречается Z" он успешно находит самого себя.
    Ответ написан
    1 комментарий
  • Почему не дает перенести файл с правами 777 даже по sudo?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если чуть присмотреться к пути в сообщении ошибки - то будет очевидно, что прав нет на удалённом хосте 192.168.1.27
    То есть вы банально не там смотрите права. sudo разумеется работает только на локальном хосте и удалённому нет никакого дела, есть у вас рутовые права на вашей локальной системе или нет.
    Ответ написан
    2 комментария
  • Как узнать, какие модули памяти сбоят (в каких слотах материнской платы они находятся)?

    Melkij
    @Melkij
    PostgreSQL DBA
    Раскурить спецификации на контроллер памяти и разводку материнской платы.
    Если верить самоидентификации ядром - сбоят первые модули на 1 и 3 каналах первого сокета.
    Ответ написан
    2 комментария
  • Как максимально быстро перенести бд mysql (MariaDB) на другой сервер?

    Melkij
    @Melkij
    PostgreSQL DBA
    Версия MariaDB отличается, но только на минорную версию.

    Это major релиз.
    Изучайте upgrading часть мануала: https://mariadb.com/kb/en/library/upgrading-from-m...

    По идее между ближайшими major версиями репликация у mariadb работает, поэтому самое быстрое - поднять реплику, затем promote до мастера.
    А, не ваш случай. Да, перенести физически диски - это будет быстрее, просто обычно нет такой возможности. Смотрите инструкцию к major обновлению, inplace upgrade возможен.
    Ответ написан
    Комментировать
  • Как перенести данные одного кластера postgres в другой?

    Melkij
    @Melkij
    PostgreSQL DBA
    Минорные релизы именно так и ставятся: обновляются выполняемые бинарники и рестартовать базу в том же самом datadir.
    О чём есть замечание в каждых release notes: https://www.postgresql.org/docs/9.6/static/release...
    A dump/restore is not required for those running 9.6.X.

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

    Кстати, обратите внимание, что 9.6.9 уже вышел и обновляться стоит именно на него.
    Ответ написан
    2 комментария
  • Linux: echo $$ возвращает неправильный PID, почему?

    Melkij
    @Melkij
    PostgreSQL DBA
    echo $$ вам возвращает pid оболочки, которую exec запустил. То что число находится рядом с искомым - совпадение.

    Для получения pid'а собственного процесса в php существует соответствующая функция getmypid
    Ответ написан
    1 комментарий
  • Mdadm удалит данные при создании raid 1 если на одном из разделов информация?

    Melkij
    @Melkij
    PostgreSQL DBA
    Да, будут потеряны.

    Во время переезда на массив часто массив инициализируют деградировавщим:
    mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/hdc1
    Затем копируют на него данные и потом добавляют недостающий диск.
    Ответ написан
  • Как создать программный RAID-1 массив на Ubuntu из размечённого/используемого и неразмеченного жёсткого диска?

    Melkij
    @Melkij
    PostgreSQL DBA
    Подводный камень очевиден - указанной командой вы потеряли все данные. Ну или получите отлуп, если повезёт.
    Не стесняйтесь поискать, вопрос миграции имеющейся системы на рейд - штука распространённая. Хотя несколько геморройная - сильно зависит от требований к даунтайму.

    Суть для вашего случая: разметить sdb, инициализировать как degraded массив:
    mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
    mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb5
    Перенести всё полезное с sda на sdb, поправить загрузчик, перезагрузиться с рейда, добавить разделы sda в соответствующие массивы.
    Инициализировать массив напрямую на устройство, а не разделы, возможно, но с этого устройства нельзя будет загружаться.

    Разные фокусы с переносом всего полезного. Системный раздел может быть проще через dd скопировать (но раздел на sdb должен быть чуть больше, там ещё mdadm суперблок в 2048 секторов)
    /home - начальную копию в 2-3 прохода rsync'ом, затем перемонтировать в ro и ещё один rsync.
    Ответ написан
    Комментировать
  • Как установить MySQL 5.0.15?

    Melkij
    @Melkij
    PostgreSQL DBA
    Взять исходники из музея и попробовать собрать. Не уверен что получится без проблем на современных версиях библиотек, но попробуйте.
    Ответ написан
    Комментировать
  • Как подключить один диск по iSCSI к двум виртуальным серверам?

    Melkij
    @Melkij
    PostgreSQL DBA
    iSCSI - блочный уровень.
    Если поверх него разместить ФС которая предполагает работу только на одном хосте - она и будет работать только на одном хосте от mount до umount. И попытки грубо вмешаться в её работу на другом хосте ни к чему кроме гарантированного повреждения данных не приведут.

    Вам нужна какая-нибудь сетевая ФС. NFS, например
    Ответ написан
    1 комментарий
  • Почему идёт потеря пакетов на bridge lxc?

    Melkij
    @Melkij
    PostgreSQL DBA
    bridge в mtr не будет виден в принципе, т.к. не является маршрутизатором.
    Выясните, кто вашу подсеть маршрутизирует и как это устройство настроено на обработку ICMP. Вполне может быть настроено отбрасывать ICMP и не отвечать на echo запросы, это допустимое поведение. не влияющее на tcp и udp.
    Ответ написан
    Комментировать
  • Как посмотреть, что занимает место на диске linux?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вероятно запущенные процессы удерживают открытыми дескрипторы уже удалённых файлов, что не позволяет освободить занятое место ФС.

    Список дескрипторов и процессов можно получить например так:
    sudo lsof -a +L1
    Пример строки от меня:
    COMMAND     PID   USER   FD   TYPE DEVICE   SIZE/OFF NLINK    NODE NAME
    php       17455 melkij    4r   REG  254,1 1048576000     0 2624572 /home/melkij/tmpfile (deleted)

    php процесс с pid 17455 удерживает deleted дескриптор файла размером в 1гб.

    Далее адресно разбираться с процессами.
    Ответ написан
    3 комментария
  • Postgresql как ограничить общий размер WAL-файлов?

    Melkij
    @Melkij
    PostgreSQL DBA
    Один сегмент WAL обычно имеет фиксированный размер 16мб (опция компиляции postgresql with-wal-segsize, если вы её указывали - вы должны об этом знать, плюс она требует initdb делать заново). Поэтому их количество пересчитывается в объём банальным умножением.

    Ограничить максимальный занимаемый объём wal сверху - нельзя. Такой единой гайки нет, даже если вас устраивает переход базы в readonly по достижении этого лимита. И есть довольно много гаек, которые при своём использовании могут попросить базу не вычищать старые wal ещё какое-то время.

    Гайки, на которые надо обращать внимание:
    wal_keep_segments - база оставляет на диске не меньше этого числа wal, что позволяет реплике штатно на некоторое время терять мастера и затем догонять
    replication slots - если вы сделаете слот репликации и его никто не будет читать - база будет сохранять wal пока не закончится диск. Если вы используете слоты репликации, то у вас в мониторинге обязана быть отдельная проверка что слот вычитывается
    max_wal_size - несмотря на название - объём wal, по накоплению которого происходит checkpoint. (либо по таймеру checkpoint_timeout смотря что случится раньше). Реально объём wal может быть выше, т.к. автоматический checkpoint намеренно не выполняется моментально, а размазан во времени.
    min_wal_size - этот объём wal всегда будет на диске занят и будет переписываться по кругу. Как гарантия того, что на диске есть место под столько wal
    archive_command - если включен и команда возвращает ненулевой статус возврата - то будет накапливать wal без ограничений. wal будут удалены (если только ещё не нужны какой из других настроек) когда archive_command получает от команды 0 код возврата.

    Если не хочется много денег тратить на резерв свободного места на хороших SSD - разместите на SSD саму базу данных, а WAL перенесите (симлинком директории pg_xlog (до 10.0) или pg_wal (10.0 и выше)) на отдельные HDD. WAL пишутся строго последовательно, вполне возможно жить с WAL на механических дисках и держать хорошую нагрузку.
    Плюс если работаете не с деньгами, можно сделать synchronous_commit = off. Что увеличит производительность всех пишущих транзакций. Но в случае фатального краха железа вы потеряете последние 3*wal_writer_delay транзакции (т.е. до 3*200мс = 600мс).
    Ответ написан
    2 комментария
  • TRIM на SSD в mdadm RAID 1?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вы так говорите будто инсталлятор сделает raid чем-то иным нежели linux raid (aka mdadm).

    Поддержка trim под linux raid - вопрос версии ядра linux (ну может ещё каких крайне нестандартных ядер).
    Ответ написан
    Комментировать
  • Чем бекапить все базы Postgres без прерывания доступа к сервису?

    Melkij
    @Melkij
    PostgreSQL DBA
    pg_basebackup
    Сделает консистентную физическую копию базы. Соответственно размер бекапа примерно равен размеру кластера postgresql + накопленные за время копирования WAL.
    Восстанавливаться элементарно запустив postgresql с указанием PGDATA в место где лежит результат pg_basebackup.
    Им обычно реплики поднимают.

    pg_dump или pg_dumpall
    Логический бекап данных. Обычно не очень подходит по критерию быстро восстанавливаться т.к. при восстановлении будут перестраивать индексы, проверять fk и прочие constraint, зато как правило сильно (в пару раз без сжатия легко, со сжатием ещё больше разница) компактнее по размеру бекапа

    Все из штатной поставки Postgresql. И другие способы бекапа Postgresql в основе своей опираются на них же.
    Ответ написан
    1 комментарий
  • Время от времени падает Redis?

    Melkij
    @Melkij
    PostgreSQL DBA
    # Failed opening .rdb for saving: Read-only file system

    ну?

    Настроено писать копию данных на диск. Писать копию не получается. Редис обижается и уходит в RO.
    Ответ написан
    3 комментария
  • Какое DE принято в Debian 9 по умолчанию?

    Melkij
    @Melkij
    PostgreSQL DBA
    Официальный установщик из debian-9.1.0-amd64-DVD-1.iso выглядит вот так:
    49cf66d6f1cb4945bd783f678d730ec1.png
    То есть вообще-то сложно сказать, что здесь что-то принято по-умолчанию. Предлагается сразу 6 вариантов по вкусу. Если ничего не выбрать, то да, наверное это будет gnome, как первый в списке.
    Ответ написан
    1 комментарий
  • Как перенести большой объем файлов с одного диска на другой?

    Melkij
    @Melkij
    PostgreSQL DBA
    rsync. Старый проверенный админский молоток.
    0) Монтируете оба диска
    1) делаете rsync
    2) повторяете команду выше до тех пор, пока время работы не придёт к какому-то допустимому промежутку
    3) закрываете работу с файлами, старый диск лучше перемонтировать в ro
    4) ещё один rsync
    5) отмонтируете старый диск, перемонтируете новый на место старого
    6) открываете работу с файлами обратно

    На случай дальнейшего расширения дисков - поставьте поверх нового диска LVM. Если на старом диске уже есть LVM - то штатные pvinit, vgextend, pvmove, lvresize, vgreduce, pvremove, resizefs
    Если у вас всё-таки сервер, то выясните какой стоит raid. Для программного linux raid можно доставить диски большей ёмкости без даунтайма.
    Ответ написан
    4 комментария