Задать вопрос
  • MySQL: count(*) или table_rows или ...?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    innodb - это MVCC.
    Чтобы узнать, сколько строк в таблице - нужно узнать, какие версии строк может видеть эта транзакция. Без вычитывания всех подходящий строк ответ не получить. Разумеется, быстро это работать не будет.
    Поэтому данные в information_schema - приблизительная оценка всегда.

    Уменьшайте объём данных. Например, если вы растёте по шкале времени, то стройте аггрегаты по времени заранее. Например, по дням и часам. Текущий час s/вычитывать count'ом/инкрементить в каком-нибудь редисе или мемкеше вместе с insert'ами/g,, потом пересчитывать и сохранять к другим аггрегатам.
    Ответ написан
  • SSD вместо RAM?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    есть SSD с достаточно высокой скоростью чтения/записи

    Недостаточной. Весьма недостаточной. Настолько, что в самих flash SSD распаяны чипы DRAM для нужд кеша и контроллера. Сейчас типично DDR3, объёмом 64-1024мб в зависимости от модели.

    Латентность доступа на чтение SSD весьма далека от латентности RAM в пару десятков нс.
    Латентность записи - пока есть свободные страницы для записи ещё ничего, а вот если свободных страниц нет - то привет. Латентность растёт крайне существенно.

    Магниторезистивная память либо память на основе фазового перехода - вот чем некоторые компании надеются заменить DRAM. Пока безуспешно.
    Ответ написан
    Комментировать
  • Какой учебник по SQL почитать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Must read по mysql: High Performance MySQL Optimization, Backups, and Replication, Baron Schwartz

    Для теоретических знаний - относительно недавно в реляционных базах принципиально ничего не менялось, как и десятилетие назад. И два десятилетия и может даже три. Фундаментальная теория РСУБД и транзакционных систем - да, из прошлого тысячелетия. За новизной в теории гнаться бессмысленно.
    Другое дело, если вы хотите особенности какой-то определённой СУБД. У каждой ворох своих особенностей, бывают и нарушения стандартов и что-нибудь меняется с каждым релизом. Лучший друг - мануал от корки до корки, книги поздновато выходят. Можно много полезного вычитать.
    Ответ написан
    1 комментарий
  • Как записать иконки в БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Во-первых, используйте нормальные подготовленные выражения или хотя бы не отключайте эмуляцию в PDO. Ничего они не порежут. Реальные подготовленные выражения пойдут вообще как есть в бинарном виде, эмуляция в PDO сделает всё возможное для корректной передачи.

    Второе - используйте кодировку utf8mb4. Если вы думаете, что utf8 в mysql и utf8 в остальном мире - это одно и то же, то вы ошибаетесь. Во всём мире в utf8 до 4 байт на символ, в mysql - только 3. Вот всякие модные нынче смайлики в этом 4 байте и живут.
    Ответ написан
    1 комментарий
  • Какие существую способы стабилизации процессов в linux?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Странное что-то рассказываете. У вас железо-то вообще исправно? memtest?
    sysrq жив? Скорей всего жив, раз вы можете на tty переключиться. Посмотрите, что ядро ответит https://en.wikipedia.org/wiki/Magic_SysRq_key
    Ответ написан
    3 комментария
  • Подойдет ли видеокарта моему PC?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вам подойдёт любая PCI-E видеокарта. Любая.
    Ни процессор (разницей PCI-E 2.0 и 3.0 всё ещё можно пренебрегать), ни ваш 500вт блок питания (лимит по +12В, практически только и используемая современным железом) выбор не ограничивают.
    Ответ написан
  • PostgreSQL - как архивировать старые записи в большой таблице?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как разделить таблицу, горячие данные оставить на SSD, холодные - на HDD. Для этого во-первых партицирование для разделения таблицы на две. https://habrahabr.ru/post/273933/ (как обычно, внимание на комменты и pg_partman)
    Затем, до миграции данных (или сразу при создании партиций), перенос архивных в другой tablespace www.postgresql.org/docs/current/static/sql-createt... stackoverflow.com/a/11228536 на HDD.
    Затем миграция данных на партиции.
    Вообще-то, это уже может быть вполне достаточно. 1-2млн строк * 365 дней это не запредельно много. Хотя не указан характер данных.

    Прозрачный для приложения перенос таблиц на другую железку - FDW, foreign data wrapper. Чем актуальнее postgresql - тем лучше. Пилится штука весьма активно по части оптимального распределения запроса. Дружит ли уже с партицированием - честно, не в курсе.

    Прозрачно отправить запрос на две базы и склеить - элементарно view с union all из локальной таблицы и FDW. Только это неинтересный вариант, зачем для запроса на горячие данные дёргать холодную часть базы?

    Вдобавок, можете посмотреть в сторону postgresql-xl, greenplum. Первый года полтора назад был не вполне production-ready, сейчас не знаю, второй используется даже в банковской сфере, но как мне помнится катастрофически не годится для OLTP, только OLAP нагрузка.
    Ответ написан
    1 комментарий
  • Sphinx, как создать конфиг если количество таблиц может изменяться но они однотипные?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Сделать одну таблицу клиентов. Если того требуют объёмы в миллиарды строк - партицировать штатными средствами.
    Ответ написан
    1 комментарий
  • Какая ОЗУ подходит для Acer ASPIRE Z3751?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Раз стадию инициализации биоса проходит - значит технически планка совместима. Планка памяти, контроллер памяти и биос режим работы согласовать смогли. Может быть банально неисправна. То что она только что из магазина - ничего не значит. Запустите memtest.

    Имеющийся i3 550 умеет DDR3 максимум 4гб на планку, 1066 или 1333мгц. Последнее не значит, что более высокочастотные планки работать не будут, у них типично прошиты более низкие частоты в SPD, вот на более низкой частоте и заведётся. 1333 сейчас действительно уже не повсеместно встречается, можно 1600 взять. Ну и память всегда надо брать под манибек, встречается и индивидуальная несовместимость конкретной планки, конкретного контроллера памяти и конкретной матплаты..
    Ответ написан
    Комментировать
  • Как перенести систему на другой диск большего размера?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Будет работать. Даже fstab править не нужно.
    Дополнительные действия нужны будут, если захотите как-то использовать свободное место с бОльшего диска.
    Ответ написан
    Комментировать
  • Что если расположить жесткие диски вплотную?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Едва пролезет мизинец - это по меньшей мере сантиметр места. Это дофига места. Типичное плотное расположение дисков - расстояние в считанные миллиметры.
    Что с ними будет при этом - им всё равно. И крайне не всё равно на собственную температуру. По-дурацки спроектированный корпус может допускать перегрев даже одного диска. Смотрите в мониторинг, оптимальная температура диска и в простое и в нагрузке расположена в диапазоне 35-45С.
    Соответственно при плотной компоновке может потребоваться более мощный обдув.

    SSD - всё равно, жёстких требований к установке и рабочей температуре нет.
    Ответ написан
    7 комментариев
  • 2 WAN, 2 LAN разделение и переключение Mikrotik?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Либо же conntrack вместо маршрутизации по источнику.
    Посмотрите в моём старом вопрос: Mikrotik, выбор предпочтительного шлюза на основе Address Lists , под ваши нужды address-list wan_failover_prefer_gw*
    Автоматический failover эта моя схема поддерживает, но без скриптовый я так и не раскурил, как работает. Как-то так: https://habrahabr.ru/post/141785/#comment_4742281 (ссылка именно на комментарий)
    Ответ написан
    Комментировать
  • Как сформировать сложный запрос mysql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    WHERE (a=1 or b=1) and (a=2 or b=2)
    ?
    Ответ написан
    4 комментария
  • Как отличить лаги компьютера?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Жесткий диск периодически при запуске выдает ошибку об отсутствии.

    Для начала проверить исправность железа.
    Особенно диска (MHDD, Victoria), посмотреть SMART.

    Затем - при каких действиях тормозит и что в этот момент утилизируется максимально?
    Если только у вас не резко вычислительная задача, то ваш добротный 4-ядерный i5 вполне актуален до сих пор. Катастрофической разницы в производительности нет, хотя этими черепашьими шагами в пару процентов за поколение нынешние и побыстрее будут.
    ОЗУ - возможно просто недостаточно объёма. Но опять же зависит от задач.
    Ответ написан
    3 комментария
  • Как настроить проброс портов при балансировки Mikrotik PCC?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если у вас не только в prerouting стоят первые 4 правила, но и в таблице маршрутизации созданы routing mark соответствующие, то картина ничем не отличается от одного аплинка. Эти правила как раз и обеспечивают ответ на входящее соединение именно на тот канал, откуда запрос пришёл.

    Я для удобства в nat завёл цепочку port_forward, в которую перебрасывал пакеты по правилам in-interface=ether2 и in-interface=ether3. А в этой цепочке уже обычный форвардинг без привязки к реальному интерфейсу.

    /ip firewall nat
    add action=masquerade chain=srcnat out-interface=ether3-gw0
    add action=masquerade chain=srcnat out-interface=ether4-gw1
    add action=jump chain=dstnat in-interface=ether3-gw0 jump-target=port_forwarding_udp protocol=udp
    add action=jump chain=dstnat in-interface=ether4-gw1 jump-target=port_forwarding_udp protocol=udp
    add action=jump chain=dstnat in-interface=ether3-gw0 jump-target=port_forwarding_tcp protocol=tcp
    add action=jump chain=dstnat in-interface=ether4-gw1 jump-target=port_forwarding_tcp protocol=tcp
    add action=dst-nat chain=port_forwarding_udp dst-port=6891 protocol=udp to-addresses=192.168.5.20
    add action=dst-nat chain=port_forwarding_tcp dst-port=80 protocol=tcp to-addresses=192.168.7.10

    Если с какого-то аплинка порт остаётся закрыт, попробуйте попинговать сам роутер. Если пингов нет на том же самом провайдере - разбирайтесь с routing-mark. Я не раскурил в своё время, как работает эта магия с check-gateway 8.8.8.8.
    Ответ написан
    5 комментариев
  • Как выяснить сколько осталось роутеру жить?

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

    https://geektimes.ru/post/256350/
    Или вскройте свой (что дешевле) или попробуйте заменить блок питания (что проще). Весьма вероятная причина, давняя и известная.
    Ответ написан
    Комментировать
  • По каким правилам соединяют маршрутизаторы?

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

    Главное, чтобы оба маршрутизатора знали, куда отправлять пакеты.
    Маршрутизатор X должен знать, что сеть B доступна через хост Y.
    Маршрутизатор Y должен знать, что сеть A доступна через хост X.
    Сами IP адреса хостов X и Y значения не имеют, как и количество этих адресов. Далее идёт только вопрос, как бы сделать, чтобы не прописывать эти таблицы маршрутизации вручную и всякие схемы резервирования, балансировки нагрузки, стоимости.
    Это если без NAT, просто пакетики перебрасывать между собой.
    Ответ написан
    5 комментариев
  • Как правильно убить postgresql idle процессы?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    pgbouncer держит всегда запущенными некоторый пул коннектов (дефолтно, во всяком случае, не в курсе, можно ли его попросить долговременно не держать коннекты вообще). Если вы их утилизируете не все - то будут idle.
    А так же это могут быть и старые коннекты, если инициатор соединение ещё не закрыл сам или оно ещё не было закрыто по таймауту. Например, приложение может иметь собственный пул коннектов.

    И, разумеется, pgbouncer обрабатывает только те коннекты, которые адресованы именно ему. СУБД он не трогает вовсе, pgbouncer - стороннее приложение, для postgresql - это просто ещё один клиент.
    Ответ написан
    Комментировать
  • Как фиксить эту проблему ( залил проект на хостинг )?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /var/www/vhosts/mysite/httpdocs/mysite.mysite/public/index.php on line 49

    5.3 это вроде бы текущий мастер https://github.com/laravel/laravel/blob/master/pub...
    49 строка пуста. А у вас там что?

    php-5.4.45 -l index.php
    PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in index.php on line 50

    Ошибка похожа. Значит вы не на 7.0.
    Ответ написан
  • Стоит ли делать на nosql highload с несколькими млрд строк, чтобы уйти от add column?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А зачем останавливать репликацию и прочие странные вещи для добавления колонки в postgresql?
    Добавляете default null колонку. Транзакционно, мгновенно. Если колонка не должна быть null - то после добавления колонки меняете ей default, затем небольшими пачками обновляете имеющиеся строки, затем drop null.
    Ответ написан
    6 комментариев