Задать вопрос
  • Как увеличить скорость скрипта работающего с БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Возьмите профилировщик и посмотрите, на чём именно теряете время.

    О каком классе СУБД вообще речь?
    Например, если речь о транзакционной РСУБД, строки объёмные, то можно сделать так:
    create temporary table updatetable(guid uuid not null)
    пачками этак по 1000 guid вычитываете guid'ы из источника и записываете в эту временную табличку.
    select guid from updatetable where not exists (select 1 from normaltable where normaltable.guid = updatetable.guid)
    Так получили список guid, которых в целевой БД нет. Сходили в источник за полной версией всех данных этих guid, пачками записали в целевую БД.
    Ответ написан
  • Как можно создать таблицу count-ов?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select QuestionId, 
    sum(case when Value = 5 then 1 else 0 end) as '5'
    sum(case when Value = 4 then 1 else 0 end) as '4'
    sum(case when Value = 3 then 1 else 0 end) as '3'
    from tablename
    group by QuestionId


    Возможно ваша СУБД умеет выполнять операцию pivot.
    Ответ написан
    Комментировать
  • Скопировал таблицу MySQL. Что не так?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Всё так. Что сказали сделать, то СУБД и сделала.

    create table as select никак не связано с копированием структуры таблицы. Создаёт новую таблицу, используя в качестве полей результат запроса и затем копирует результат запроса в качестве данных.

    Копирует структуру таблицы включая индексы запрос CREATE TABLE newtable LIKE oldtable;
    Данные не копирует. Можно скопировать через insert .. select.
    Ответ написан
  • Сильная нагрузка на CPU при выполнении apt-get\aptitude update. Как побороть?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Попробуйте выключить package diff: https://debian-administration.org/article/439/Avoi...

    Это актуально для raspberrypi, где и видел комментарий, что на слабых cpu pdiff лучше выключить. Вам вероятно тоже поможет.
    Ответ написан
  • Как прочитать ответ от сервиса?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    то в файл приходит:

    Значит именно этот мусор вам и отправляют. Вместо нормально кодированного application/x-www-form-urlencoded. Пинайте разработчиков этого сервиса, чтобы исправили этот идиотизм.

    Ну или пишите парсер-костыль.
    Ответ написан
  • Как считается длина ключа в Explain mysql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Давайте считать:
    timestamp - 4 байта
    tinyint по 1 байту
    int - 4 байта
    varchar(255) - где 255 длина в символах. В байтах будет больше. Например, для utf8, потребуется 255*3+2 байта. 767 байт. Для utf8mb4 - 255*4+2
    Итого строка индекса занимает 4 + 767 + 1 + 1 + 4 = 777 байт. Немного не хватает, может быть у вас какие-то из полей могут быть NULL?

    Да, если вы не знали, в индексе и в памяти (например, при сортировке) varchar всегда развёрнут до максимальной длины.
    Если возможные строки у вас фиксированы - используйте enum. 1 или 2 байта места для записи. И уж определённо не 255, если у вас строки в 4-6 символов.
    Ответ написан
    1 комментарий
  • Как подставить значения одной колонки в другие, отсортировав по содержимому этих колонок?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    У вас табличка ожидаемого результата не соответствует исходным данным.

    Ну, например, так:
    with origtable (name, math, physic, chemie) as (values ('Вася', 80, 52, 69), ('Коля', 50, 90, 95), ('Петя', 62,98, 42)) 
    , orders as (
    select name, 
    row_number() over (order by math desc) as mathid,
    row_number() over (order by physic desc) as phid,
    row_number() over (order by chemie desc) as chid
     from origtable
    )
    select m.name as "математика", p.name as "физика", c.name as "химия" from orders as m                              
    join orders as p on m.mathid=p.phid
    join orders as c on m.mathid=c.chid
    order by m.mathid;


    математика | физика | химия 
    ------------+--------+-------
     Вася       | Петя   | Коля
     Петя       | Коля   | Вася
     Коля       | Вася   | Петя
    Ответ написан
    1 комментарий
  • Как отобразить ошибку 500?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    /etc/php/7.0/cli/php.ini

    Перезапускаю nginx и php7.0-fpm

    А почему что-то должно было измениться на веб-морде?
    Ответ написан
    4 комментария
  • Как получить параметры колонки при выборки данных через SELECT?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Приджойнить подходящую вьюху из INFORMATION_SCHEMA. Вроде бы INFORMATION_SCHEMA.COLUMNS должна содержать нужные данные.
    Ответ написан
    1 комментарий
  • Как вложить файл к письму PHP?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Раскурить 5-10 RFC, как правильно форматировать заголовки письма.
    Или использовать что-то более умное, чем низкоуровневый mail, например phpmailer.
    Ответ написан
    Комментировать
  • Как оптимизировать выборку строк из базы данных?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Сгенерируйте и запишите в свою табличку какой-нибудь мелкий объём тестовых данных. Миллионов 10 строк хотя бы. Мелочь какая-то, да хоть будет о чём поговорить.
    Поиграйтесь с этой мелкой табличкой, посмотрите, какие запросы будут выполняться медленно. Затем возвращайтесь с конкретными запросами и explain'ами.
    Ответ написан
    Комментировать
  • Как получить все даты с 01-01-2014 по сегодня с помощью простого mysql-запроса без хранимы процедур?

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

    К слову, order by 1 - deprecated. "Use of column positions is deprecated because the syntax has been removed from the SQL standard."
    Ответ написан
    Комментировать
  • Как организовать прямое подключение Raspberry PI и ноутбука?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ноутбуку сконфигурируйте адрес из подсети 169.254.0.0/16. Затем минут через 5 после включения малинки чем-нибудь вроде nmap просканируйте эту подсеть. RPi скорей всего отзовётся на каком-нибудь адресе. Это специальная подсеть, адреса из которой устройства используют, если не получают ответа от DHCP, rfc3927.

    Или поднять на ноутбуке DHCP и посмотреть, какой адрес выдан малинке. Без понятий, как это делается на винде. Можно в виртуалку openwrt какой-нибудь поставить и бриджем объединить ethernet физический с виртуалкой.
    Ответ написан
    Комментировать
  • Почему намертво зависает компьютер?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Проверяйте на стабильность память - memtest, по меньшей мере 2 полных цикла. Это надолго.
    И диски. Начать с отчёта SMART, благо это быстро, затем MHDD или victoria с загрузочного диска. Один тест поверхности, довольно длителен. Лучше с диска начать, раз кто-то вам намерил 36 попугаев.
    По результатам смотреть.
    Ответ написан
    Комментировать
  • Как оптимизировать функцию обработки полей формы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Но перед записью эти данные нужно обработать

    Зачем?

    Безопасно записать в СУБД - это prepared statements. Никак калечить пользовательский ввод для этого не нужно.
    Вывести в html - есть нативный htmlspecialchars.

    А вот в upd верное направление мысли. Абсолютно неважно, откуда данные - единственно важно куда эти данные пойдут. И именно для этого может понадобится дополнительная обработка именно для этого выходного формата.
    Отправка письма - plain text можно отправлять как есть. html - html и есть, всё тот же htmlspecialchars.
    Куда-нибудь в csv - используйте нативные функции обработки csv. json - json_encode. И так далее. Для каждого формата свои требования к оформлению пользовательского ввода.
    Ответ написан
    Комментировать
  • Почему незафиксированная транзакция может изменять данные?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Читайте далее. Это, судя по всему, прелюдия к описанию уровней изоляции транзакций.
    READ UNCOMMITTED - позволяет СУБД показывать данные, которые ещё не были зафиксированы. Это не значит, что именно так на этом уровне изоляции должна так себя вести СУБД, но поведение допускается стандартом для этого уровня изоляции. Например, в упомянутом postgresql на шаге t4 900 вы не сможете получить никогда, даже на read uncommitted.
    Ответ написан
    1 комментарий
  • Ошибка cannot add or update a child row при создании связи между таблицами, как исправить?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Существующие в таблицах данные не проходят проверку внешним ключом. Т.е. существуют ссылки на отсутствующие магазины.
    Ответ написан
    1 комментарий
  • Как влияет количество контактов в pci-e разьеме на работу видеокарт в crossfire?

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

    Второй слот: у вас даже если и присутствуют контакты в слоте физически - этот слот подключен к южному мосту через PCI-E 2.0 x4. Для тех GPU, из которых имеет смысл городить multigpu, а не осмысленнее взять карту уровнем выше и не страдать от отсутствия поддержки multigpu в играх - это бутылочное горлышко. Основной слот PCI-E x16 даёт пропускную способность в 4-8 раз выше (в зависимости от вставленного сокет CPU - слот подключен напрямую к CPU и тот определяет версию шины). Как думаете, что происходит при таком дисбалансе пропускной способности? CF реализован просто для галочки.
    Но отличная вещь для втыкания какого-нибудь рейд-контроллера PCI-E х4 или х8, или ещё чего-нибудь, чему мало х1 слота.

    По майнерам не подскажу.
    Ответ написан
    Комментировать
  • Что такое "Внешняя скорость передачи данных" HDD?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Под "Внешняя скорость передачи данных" в этом случае понимается пиковая теоретическая скорость интерфейса. Бесполезная циферка.

    Смотрите утилизацию сети и утилизацию диска. Возможно вы утилизируете полностью сеть. Гигабитку занять, в общем-то, не проблема.
    Ответ написан
    3 комментария
  • Какую выбрать конфигурацию RAID для домашнего NAS?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Софтовый рейд вас не ограничивает глупостями вроде 1 диск может быть только в одном массиве. Можно разделы одного диска объединять в разные массивы.
    Пилить диски можно как угодно. Например, распилить 3тб диски каждый на два раздела: по 1 и по 2тб каждый. Собрать в итоге два raid5: 3 тома по 1тб и три по 2тб. Итого 6тб форматированной ёмкости, допустимо выпадение любого диска массива. При необходимости в едином куске места - поверх этого развернуть LVM.
    Наращивать можно дисками любого размера, условие одно: добавляемый том не меньше используемого размера тома в действующем массиве.

    Про raid5 в домашних NAS - у меня два диска разом за 8 лет не умирало. Дефолтно в debian включен кроновый скрипт верификации всех софтовых рейдов раз в месяц. Пару дисков проблемных он и обнаружил заблаговременно.
    Но вот два диска разом выпасть из массива - это было. Кабель питания отошёл. Собрать обратно массив удалось, а вот ФС побилась. Но у меня был бекап, потеряны только неважные данные.

    Если нет никакой возможности использовать географически-удалённое место для бекапа, то для бекапа можно выделить области на этих дисках. Только не в составе чего-то сложного (lvm, raid) и не на том же диске, где лежит основная копия! Можно использовать raid1 при необходимости продолжать работу при отказе диска - зеркало хоть восстанавливать просто и достаточно одного любого диска.
    Например, порезать 3тб диски на два раздела: 2тб и 1 тб. Затем собрать raid5 на трёх 2тб томах - под всякое не очень нужное. Три раздела по 1 тб - под важные данные. Можно собрать raid1 из двух дисков. Но не как зеркало из всех 3 дисков! Это только от физической поломки поможет, а от проблемы с ФС - уже нет. Один раздел не должен быть примонтирован постоянно, монтируется только на время бекапа основной части. rsync в кроне как самый простой вариант. Лучше бы, как уже советовали, 3 независимых тома: актуальная копия, горячий регулярный бекап, последний диск под холодный бекап, его физически отключать (можно сколхозить автоматический девайс для размыкания цепей на твердотельных реле).
    Ответ написан
    Комментировать