Задать вопрос
  • 100% использование памяти в Debian 8 + VestaCP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Внимательнее на то, как именно занята. Приложениями или используется всего.
    Потому что linuxatemyram.ru
    Ответ написан
    1 комментарий
  • Почему просит GET метод при обновлении записи?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Обратите внимание, что в HTML нет method PUT.
    https://www.w3.org/TR/html5/forms.html#attr-fs-method
    The invalid value default for these attributes is the GET state.


    То есть прежде чем искать ошибку на бекенде - посмотрите сначала, какой именно запрос отправляет клиент.
    Ответ написан
    Комментировать
  • Как подключать классы в рантайме в PHP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Раз они однотипные - то может и задачу они решают однотипную?
    Может, вам нужен паттерн factory и в контроллере и будет только use фабрики?
    Ответ написан
    Комментировать
  • Что почитать на досуге?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Конечно, Макконнелл "Совершенный код",
    Мартин "Чистый код"
    "Рефакторинг" Фаулера

    "Приемы объектно-ориентированного проектирования" Э. Гамма

    Поскольку в списке mysql - High Performance MySQL обязателен к прочтению
    Отдельно рекомендую "Регулярные выражения" Дж.Фриддла, отлично вправляет мозг по регуляркам.

    По базам в целом:
    короткая "Architecture of a Database System" J. M. Hellerstein, M. Stonebraker and J. Hamilton расскажет об общих подходах построения СУБД
    Bill Karwin SQL_Antipatterns - как не надо писать SQL. А вот, кстати, отличный материал как надо писать, но не книга: use-the-index-luke.com

    Это всё вполне можно читать в порядке отдыха.

    Фундаментальные, которые уже идут заметно тяжелее:
    "Transactional Information Systems" Weikum, Vossen - монументальная теория транзакционной обработки
    "Алгоритмы. Построение и анализ" Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн - про основные алгоритмы. Всё библиотечное, но полезнейшая весь для понимания обычно скрытой машинерии и для прохождения собеседований.
    Ответ написан
    Комментировать
  • Как добавить через insert values в начало таблицы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В таблице в sql в принципе нет начала и конца. Есть большая куча строк.
    А порядок в этой куче появляется только когда вы явно указываете order by. Без order by база может возвращать строки в любом порядке, в каком захочет.
    Ответ написан
    2 комментария
  • Как обнулить get параметры?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Сделать редирект куда-нибудь в другое место. Например, на ту же самую страницу, но без параметра в url.
    Ответ написан
    Комментировать
  • Что я делаю не так с Ansible?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    SSH конектится что с сервака на десктоп, так и обратно

    Внимание, вопрос: под каким пользователем?
    Потому что плейбук вы с весьма неясной целью запускаете через sudo. А у рута в таком случае ключи настроены?

    Вообще не надо в /etc/ansible лезть. Заведите себе в любом месте директорию и в ней размещайте всю информацию для ansible. ansible-playbook не нужны рутовые права для своего запуска. Ему нужен только доступ на целевые хосты и возможность орудовать там.
    Ответ написан
    1 комментарий
  • Насколько внешние ключи любят ресурсы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Делать внешние ключи обязательно.
    И уникальные индексы проставлять. Ещё бы check constraint ставить, да у вас глупый mysql в тегах, он такое не умеет.
    Это всё ваши помощники. Они помогают искать ошибки и отлично мешают делать глупости.
    И выбирать подходящие типы данных. Ну и раз у вас mysql - то всенепременно проверить sql_mode и выставить его максимально агрессивным. В 5.7 стало гораздо лучше, до этого из коробки уж слишком много позволял делать глупостей.

    Дорастёте до террабайтной базы как авито - тогда можете начинать думать, а сколько денег нам стоит целостность внешних ключей или дешевле будет периодически проверять целостность скриптами и озадачивать разработчиков. О, кстати, вот запись доклада с pgday15, на 27 минуте как раз начинается обсуждение вопроса из зала "ребята, а вы в своём уме отключать FK?"
    Ответ написан
    5 комментариев
  • Почему далеко не на всех сайтах есть каптча?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Капча лишняя по своему определению. Мешает, раздражает и никак не упрощает жизнь пользователя.
    И лишь вынужденное зло для отсева наиболее глупых ботов.

    Ведь легко можно написать скрипт, какой регистрируется сразу сотню левых аккаунтов на сайте, не успел оглянуться, и бд уже в ботах.

    И пусть. Нормально сделанной базе плюс-минус лям пользователей - не вопрос.

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

    С этим сложнее. Если есть пользовательский контент - то сначала необходимы люди, которые будут его модерировать (не забудьте сделать внятный инструмент модератора для поиска и удаления пачкой комментариев по шаблону). Антиспам автоматика не исключает необходимости в людях, которые будут проверять вручную. Вы видели спам на stackoverflow? А попадается и там.
    И капча, разумеется, не панацея тоже.
    Ответ написан
    2 комментария
  • Как составить запрос для выборки по времени из TIMESTAMP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Правильно, хех?
    А правильно - включает в себя "чтобы быстро работало"?
    Чтобы работало медленно всегда, но просто:
    where time(timestamp) = '14:30:00'
    Чтобы работало быстро - материализовать time(timestamp) в generated column (5.7, отдельно уточните какая версия нужна для построения индекса по ним) или в отдельное поле типа time (тогда плюс соответственно триггеры для поддержания актуальности данных в поле) и повесить поверх индекс.
    where timestamp_time_field = '14:30:00'
    Ответ написан
  • Можно ли создать raid1 из 2 дисков, если на одном есть данные, не потеряв их?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Массив можно создать в деградировавшем виде:
    mdadm -C /dev/md0 -l 1 -n 2 missing /dev/sdc
    Затем скопировать данные на массив
    rsync sdb -> md0
    И добавить диск в массив
    mdadm /dev/md0 -a /dev/sdb
    Ответ написан
    7 комментариев
  • Как найти вывести список всех не найденных значений из массива?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select children.code is null as is_not_found, /*another children data is null too*/ 
    from unnest(array[...]) as code 
    left join children using(code)
    Ответ написан
    Комментировать
  • Как сделать временную таблицу с одинаковыми данными?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    небольшая ремарка №3: а нафига вам вообще cross join понадобился?
    SELECT 'Economy' FROM generate_series(1,10);
    Ответ написан
    1 комментарий
  • Как понять запрос к MySQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Это то, как НЕ надо делать фильтр, если нужны строки за определённый месяц.
    Потому что mysql не умеет функциональные индексы, значит если даже индекс подходящий по дате есть - использоваться он не будет. Должно быть:
    WHERE f=1 
    AND tab.site_id = '5568' 
    AND user_payment >=  '2016-06-01' 
    AND user_payment <  '2017-07-01'

    Что отлично пойдёт по индексу, например, site_id, user_payment. Надо ли сюда включать f - смотрите ваши данные, вам лучше знать вашу базу.
    Ответ написан
    2 комментария
  • Как правильно изменить месторасположение базы postgresql-9.2.18.rl7?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    С большим даунтаймом, зато целиком на новый диск:
    Потушить базу, скопировать PGDATA (data_directory в конфиге) в новое место, заменить data_directory в конфиге на новое место, запустить базу.
    Можно, кстати, не менять data_directory, а сделать симлинк. Postgresql не против по симлинкам сходить за своими данными.

    С небольшим даунтаймом, зато с чуть большим числом телодвижений:
    через pg_basebackup сделать копию в новом месте, запустить там второй инстанс постреса с репликой. Когда реплика догонит мастер, потушить мастер (сделав checkpoint), потушить реплику (тоже с чекпоинтом), заменить data_directory в конфиге на новое место, запустить базу.

    Без даунтайма:
    инициализировать второй диск как tablespace, перенести на этот tablespace что мешается на основном (pg_repack попробуйте, емнип умеет без пишущего лока даже переносить). Использоваться будут оба диска, что кстати хорошо с точки зрения io.
    Ответ написан
    2 комментария
  • Сервер не осуществляет проверку имени в БД и все равно регистрирует пользователя, в чём проблема???

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    LIMIT 1,1

    Т.е. разрешено два пользователя с одним именем.

    И никогда не подставляйте данные в текст запроса. Используйте prepared statements.

    $arr = array('$login','$tel','$email');

    Без комментариев. Посмотрите, что в переменной записано, удивитесь.
    Ответ написан
    1 комментарий
  • Нужен ли primary key для такого?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    primary key нужен всегда.
    Если по логике вашего приложения одному user_id может соответствовать только один пользователь в каждом service_id - то PK на первые два поля.
    Если несколько - то pk на 3 поля.

    Порядок полей при указании PK таблицы связей важен. Для mysql/innodb очень важен, т.к. таблица кластеризована по PK и любое обращение по вторичному ключу влечёт поиск по PK (кроме покрывающих индексов). Порядок выбирайте исходя из наиболее частых запросов к таблице, чтобы максимум запросов могло идти по первичному ключу.
    Ответ написан
    Комментировать
  • Как замониторить банусер?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Нет, сам postgresql о существовании баунсера вообще не знает. pgbouncer является обычным libpq клиентом с точки зрения базы.
    Ответ написан
  • Быстрее ли несколько параллельных запросов одного последовательного?

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

    Есть, если треды не дерутся за одно и те же ресурсы. Например, ходят в физически разные кластеры БД.

    Получается, что один последовательный запрос, что несколько параллельных, имеют сопоставимую продолжительность.

    Или вы неверно описали наблюдаемый результат или же параллельное выполнение медленнее в 2 раза и дальше ухудшается при конкурентной нагрузке.

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

    Запросто. Но на вашу наблюдаемую картину не похоже, у вас время выполнения работы выросло в несколько раз.
    Значит процессы дрались за ресурсы и очень сильно мешали друг другу.

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

    Что подтверждает диагноз. Ресурсов для параллельного выполнения нет.

    Поскольку вопрос затрагивает субд и вы не называете, что там происходит - самое очевидно - вы упёрлись в диски. Возможно даже в механические диски. Добавление новых io задач на диски ожидаемо и очень сильно замедляет весь остальной io.
    Ответ написан
    2 комментария