Задать вопрос
  • Composite index Имеет ли значение порядок в Where?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет, не имеет. Планировщик запроса с таким разберётся самостоятельно.
    Ответ написан
    4 комментария
  • Какой из способов виртуализации более подходящий для сервера базы данных?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Поскольку меня сюда призвали, то напишу пару слов.

    Если вы ещё не доросли до отдельной железки под базу - то для базы не будет принципиальной разницы какой гипервизор у вашей виртуалки. Интереснее вопрос насколько честен хостер (уточняйте отдельно, я с хостерами не знаком).
    openvz заметно легче для хостера по ресурсам и позволяет легко продавать ресурсов сильно больше чем у него есть в действительности.
    С kvm - сложнее заниматься оверселлом хотя бы по памяти, хотя помнится даже там можно.

    С openvz у вас будет на порядок меньше возможностей настройки, т.к. ядро используется хост-системы и никто не даст вам его трогать. И весьма старое ядро, кстати.
    На kvm соответственно полноценная виртуальная система. Можете ставить что угодно и как угодно тюнить ядро. Если хостер уважает себя и предоставляет virtio устройства - то это и работать будет внятно.
    mysql запустится и там и там. Краеугольный для любой СУБД вопрос производительности дисков и там и там от вас полностью скрыт и зависит от хостера.

    Универсального ответа нет. Если вы под базу не настраиваете ядро, то возможно и openvz подойдёт, обычно там предлагают больше ресурсов за те же деньги.

    Мой ответ про докер же относится именно к докеру. Если вы можете пробросить директорию хост-системы в докер - почти наверняка у вас уже своя железка или vps и вы пытаетесь именно добавить ещё прослойку. Если вы захотите на своей vps ещё вдобавок запихать бинарники базы в докер - тогда будет вопрос "зачем". Если вы хотите имея отдельную железку только под базу запихать эту базу в виртуалку - тогда будет вопрос "зачем".
    Если у вас нет железки - то vps очевидно дешевле чем аренда целой железки и за счёт этого вполне целесообразно рассматривать аренду виртуалки.
    Ответ написан
    1 комментарий
  • Как правильно достать id вставленной строки в бд?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    lastInsertId (ака LAST_INSERT_ID функция mysql) безопасен для конкурентного доступа, возвращает сгенерированное значение auto increment для предшествующего запроса именно в этом соединении.

    Поэтому если вы в одном соединении делаете insert, то последующий lastInsertId через это соединение гарантированно вернёт корректное значение.
    Ответ написан
    Комментировать
  • Как правильно спроектировать доступ к БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Смотрите в разделы транзакционной обработки данных; транзакции и изоляция транзакций. По этой теме книги пишут вот уже полвека минимум.
    Коллизии конечно могут быть если об этом не думать во время разработки. Жертвовать конкурентностью и принудительно выполнять задачи в один поток - да, бывает и такое.
    Ответ написан
    1 комментарий
  • Почему не запускается postgres 9.6?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Всё ему нравится,
    согласованное состояние восстановления достигнуто

    начало передачи журнала с главного сервера, с позиции 4A4/E000000 на линии времени 2

    База запустилась, репликация запустилась, всё работает.

    А вот вам, наверное, не нравится то что база не принимает read only коннекты? Проверьте настройку hot_standby в postgresql.conf, дефолтно выключено.
    Ответ написан
    1 комментарий
  • Как наследуются метода в PHP?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для начала обратите внимание, что vаlue и value - две разные переменные. Буква а, да.

    А по существу подсказку даёт любезно написанный echo __CLASS__. getValue в обоих случаях работает в контексте класса A и видит только свойство класса A.
    setValue в B видит же только своё собственное value, существующее только в этом классе и не имеет доступа к свойству из A

    var_dump($b); хорошо пояснит происходящее:
    object(B)#2 (2) {
      ["value":"B":private]=>
      int(555)
      ["vаlue":"A":private]=>
      NULL
    }
    Ответ написан
    Комментировать
  • Составной индекс и селективность его столбцов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Составной индекс b типа сравнивается кортежами, то бишь порядок определения индекса имеет значение

    Зависит от алгоритма. Справедливо для btree, может быть полностью лишено смысла для других типов. Например, если СУБД будет строить ключ для hash-индекса от конкатенации полей индекса - (a,b) ничем не будет отличаться от (b,a).

    лучше определять b индекс для столбцов с высокой селективностью

    Не имеет важного значения.
    Значение имеет под какие запросы индексы делаем. btree (a,b) не может нормально обслуживать where b = value and a > value, для этого запроса куда осмысленнее (b,a)
    Если у вас запрос where a = const and b = const, то btree индексы (a,b) и (b,a) будут равнозначны.

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

    имеется два столбца в некоторой абстрактной таблице: x - внешний ключ, y - datetime

    Варианты если вы попробуете сделать только btree(y,x) индекс:
    - СУБД вовсе откажется делать FK т.к. нет подходящего индекса для проверки FK
    - СУБД неявно этот индекс создаст при добавлении FK
    - СУБД позволит существовать FK без индекса, но соответственно fullscan всей таблицы на каждую проверку консистентности по этому FK (возможно по отдельному сканированию на каждую строку, которая вызвала проверку целостности ключа)
    Ответ написан
    2 комментария
  • Конкатенатор php файлов в стиле препроцессора си. Есть такой?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Соберите в phar - будет ровно один файл. Замечали же что сам composer пакуется в composer.phar?

    Можно ли упакованную в phar библиотеку представить как библиотеку для composer - не смогу ответить.
    Ответ написан
    Комментировать
  • Почему в MySQL 8.0 при последовательной записи через пользовательскую функцию в автоинкрементном id образуются пропуски?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А зачем эти извращения? Есть гарантированно конкурентно-безопасный LAST_INSERT_ID()

    У вас insert ignore используется. Значит, данные натыкаются на уникальные индексы? auto_increment при этом штатно тикает.
    Вообще auto_increment - это гарантированная уникальность. Если вы хотите "без пропусков" - вы взяли не тот инструмент.
    Ответ написан
    2 комментария
  • Как работает mysql limit?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Потому что верное описание синтаксиса limit дано в первой статье.
    Что проверяется первоисточником https://dev.mysql.com/doc/refman/8.0/en/select.html
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]


    Формируется выборка из row_count + offset числа строк, затем первые offset строк отбрасываются и в результирующий набор попадает не более row_count строк.

    Без явно указанного order by выборка смысла не имеет вообще, СУБД по стандарту имеет право отдавать любые удовлетворяющие запросу данные в любом порядке по своему усмотрению. Соответственно offset будет взять непонятно откуда и непонятно как.
    Ответ написан
    Комментировать
  • Как найти родительский процесс?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Есть у меня один зомби-процесс

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

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

    А grep в списке процессов ожидаемо есть и по условию "встречается Z" он успешно находит самого себя.
    Ответ написан
    1 комментарий
  • Какой RAID массив 1+0 или 0+1 наиболее надежный?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    И тот и другой гарантируют выживаемость при отказе только одного любого диска. И оба могут выдержать отсутствие до половины, но строго определённых дисков. Потому гарантии надёжности одинаковы - один диск массива.

    Следует упомянуть, что конкретные реализации могут понимать под raid10 что-нибудь другое относительно классических примеров зеркало поверх страйпа или страйп поверх зеркала. Например, mdadm можно настроить писать raid10 разными способами, в том числе на произвольном числе дисков (например, raid10 на 5 дисках с равной утилизацией каждого) и с конфигурируемым объёмом избыточности (например, чтобы переживать смерть любых 2 дисков, но тогда общая ёмкость массива будет не raw/2, а raw/3)
    Ответ написан
    Комментировать
  • Современные инструменты для анализа sql запросов, какие они ( бренды)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Касательно postgresql:
    Анализ конкретного запроса - explain (analyze,buffers) плюс немного знаний какие цифры что значат. Порой https://explain.depesz.com/ используется для визуализации цифр.
    Анализ нагрузки от запросов суммарно - contrib pg_stat_statements плюс любые какие вам нравятся выборки по полученной вьюшке. Например, топ запросов по времени выполнения, или какие запросы больше всего читают данных или какие пишут временные файлы - счётчиков для этого уже достаточно.
    Сторонние утилиты не скажут чего-то, что не скажет сама база.

    Касательно других баз - смотрите другие базы. explain есть наверное у всех, и точно у всех есть какие-то нативные метрики для запросов.
    Ответ написан
    2 комментария
  • Как составить следующий запрос SQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Смотрите в оконные функции. lag и lead, в postgresql давно, в mysql в 8.0 наконец появились. Для более старых mysql - извращаться.
    Ответ написан
  • Почему не дает перенести файл с правами 777 даже по sudo?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если чуть присмотреться к пути в сообщении ошибки - то будет очевидно, что прав нет на удалённом хосте 192.168.1.27
    То есть вы банально не там смотрите права. sudo разумеется работает только на локальном хосте и удалённому нет никакого дела, есть у вас рутовые права на вашей локальной системе или нет.
    Ответ написан
    2 комментария
  • Существуют мини боксы для hdd\ssd с raid для подключения к компу по usb3.0?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Коробка под диски для прямого подключение (а не сетевого т.е. NAS) правильно гуглится как DAS, Direct-attached storage
    А вот с NAS оборудованными USB портами как раз поаккуратнее, зачастую это USB-хост и к ПК не подключается.

    Например
    Ответ написан
    Комментировать
  • SQL. Как запросить данные между двумя датами в таком случае?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    И где здесь "такой случай"?
    У вас в вопросе полностью запрос уже написан, приклейте к первой части вторую.
    Ответ написан
    Комментировать
  • Как настроить Postgres в Docker?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Зачем оно вам? Вот скажите, зачем? Пока ни один из встреченных адептов докера не справился с таким простым вопросом "зачем вам база в докере?", может вы справитесь.

    Для использования базы вы обязаны предоставить нормальную файловую систему, необходимо предоставить сеть хоста. Изоляция? Так у вас система целиком под базу и так. Миграция на другой хост? Да у вас в этом докере только бинарники базы и есть. Точно такие же как в репозиториях, сама база-то снаружи в нормальной ФС. На другую архитектуру вы datadir не перетащите в принципе. Несколько кластеров баз на одной машине? А докер для этого зачем? На ubuntu/debian есть шикарные скрипты pg_ctlcluster. Про извращения с pg_upgrade обновлением базы не буду перепечатывать ответ с ruSO.

    На взгляд postgresql dba вы не передали никаких настроек вообще, а work_mem и вовсе уменьшили, 4мб у него дефолт. Соответственно база будет работать по-умолчанию, т.е. из расчёта запуститься на любом калькуляторе, а не внятно работать. Не хватает, соответственно, всего. Настройки более агрессивных checkpointer, bgwriter и autovacuum в первую очередь.
    По запросам смотрите pg_stat_statements
    Ответ написан
    3 комментария
  • Генерация случайной уникальной последовательности чисел?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А что, в go нет вызова для CSPRNG?

    https://golang.org/pkg/crypto/rand/#Int
    1e13 + случайное число от 0 до 1e14
    Ответ написан
    Комментировать
  • Как удалить файл с кириллическим символом из коммита?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    git rm - это про файл уже зафиксированного в истории коммита.
    Сбросить ошибочно добавленный файл в отслеживание после git add можно через git reset HEAD filename
    (и мне так помнится, подсказки об этом есть даже в самом git status)
    Ответ написан