Ad Widget

Collapse

Удалить конкретное значение из таблицы history

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • andrey_y
    Junior Member
    • Sep 2022
    • 18

    #1

    Удалить конкретное значение из таблицы history

    Доброго времени суток,

    Есть небольшая проблема с конкретным значением одного итема (itemid 53776), которое ломает функцию max из другого итема. Нужно удалить одну строку из таблицы history, где value=2532 и itemid=53776. Относится к хосту, таблица hosts, где hostid=10583. Написал такой запрос:

    DELETE *
    FROM history
    INNER JOIN hosts ON hosts.hostid
    WHERE history.itemid = 53776
    AND history.value = 2532
    AND hosts.hostid = 10583;

    Мои знания по sql немного заржавели. Как правильно составить запрос?

    Заранее спасибо
  • Griboed0ff
    Senior Member
    • Sep 2022
    • 153

    #2
    Originally posted by andrey_y
    Доброго времени суток,

    Есть небольшая проблема с конкретным значением одного итема (itemid 53776), которое ломает функцию max из другого итема. Нужно удалить одну строку из таблицы history, где value=2532 и itemid=53776. Относится к хосту, таблица hosts, где hostid=10583. Написал такой запрос:

    DELETE *
    FROM history
    INNER JOIN hosts ON hosts.hostid
    WHERE history.itemid = 53776
    AND history.value = 2532
    AND hosts.hostid = 10583;

    Мои знания по sql немного заржавели. Как правильно составить запрос?

    Заранее спасибо
    сделайте сначала селект, если видите нужную строку, то уже тогда делайте delete, только в delete звездочка не используется, а так же джоины. Попробуйте примерно так
    Code:
    DELETE FROM history
    WHERE itemid = 53776
    AND value = 2532
    AND EXISTS (
        SELECT 1 FROM hosts
        WHERE hosts.hostid = 10583 AND hosts.hostid = history.itemid
    );
    Но как я и говорил нужно проверять селектом сначала.

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Добавлю ещё, что в таблице history хранятся числовые дробные значения. Целочисленные значения хранятся в таблице history_uint.
      Я бы искал (на экране Monitoring -> Latest data) нужный айтем, нажав на ссылку "Graph" справа - смотрел бы график и находил бы нужный отрезок времени, куда попадает "нехорошее" значение, затем переключателем справа вверху выбрал бы "View as:" -> "Values", чтобы увидеть список конкретных значений, после чего, наконец, там же справа вверху нажал бы кнопку "As plain text" - будут видны не только конкретные значения, но и их таймстэмпы в том виде, как они хранятся в базе. itemid, кстати, при этом виден в адресной строке браузера.
      Тогда можно удалить конкретное значение (если оно в истории одно в течение этой секунды) запросом:
      Code:
      DELETE FROM history
      WHERE itemid = 53776
      AND
      clock = <таймстэмп>
      (ну, для целочисленных значений подставить другое имя таблицы).
      Last edited by Kos; 22-08-2024, 13:02. Reason: опечатка

      Comment

      • andrey_y
        Junior Member
        • Sep 2022
        • 18

        #4
        Добрый день,

        Благодарю за быстрый ответ Griboed0ff, Kos.

        Следующие запросы сработали:
        DELETE FROM history_uint
        WHERE itemid = 53776 // pppoe_conn_total
        AND
        clock = 1724089636;

        Или же
        DELETE FROM history_uint
        WHERE itemid = 53776
        AND
        value = 2532;

        То же самое с itemid 5979 // pppoe_conn_max

        Теперь другая проблема, если рисую график c pppoe_conn_total за последние 7 дней, снова появляется макс. значение 2532. Но когда исполняю этот запросЮ
        SELECT * FROM history_uint
        WHERE itemid = 53776;

        и ищу среди всех значений value = 2532, ничего не нахожу.
        Искал значение value = 2532 в разных таблицах: history, history_log, history_str, history_text, history_uint, безрезультатно.

        Опытным путём обраружил до секунды по графику pppoe_conn_total, где рисует максимум 2532, с 2024-08-16 12:46:01 (1723811041) до 2024-08-21 01:08:32 (1724202512).
        Составил запросы select для таблицы history_uint и условием clock в формате epoch указывая обозначенные ранее секунды. 0 линий:

        MariaDB [zabbix]> select * from history_uint
        -> where itemid = 53776 and clock = 1723811041;
        Empty set (0.001 sec)

        MariaDB [zabbix]> select * from history_uint where itemid = 53776 and clock = 1724202512;
        Empty set (0.001 sec)

        Кажется что график берёт значения не напрямую из таблицы, либо апач или мускул кеширует значение. Перезапускал демоны mysql & apache2, безрезультатно.

        Благодарю
        Attached Files

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Тот график, что у вас на скриншоте, построен на значениях не из истории, а из трендов (подробнее о трендах, они же - "динамика изменений", см. тут).

          Comment

          • andrey_y
            Junior Member
            • Sep 2022
            • 18

            #6
            Небольшая зарисовка этих 2х айтемов:

            item1=max(item2,365d)
            item2=item3+item4+item5+item6

            Значение item1 по прежнему 2532, учитывая что я его удалил вручную из базы данных и больше его там нет. Исходя из этого, item2, как вы сказали, берёт значение из таблицы трендов. Я правильно понял? То есть для решения проблемы мне нужно удалить значение 2532 из таблицы трендов?

            Comment

            • Kos
              Senior Member
              Zabbix Certified SpecialistZabbix Certified Professional
              • Aug 2015
              • 3404

              #7
              Я ни слова не говорил про item1 и item2, я лишь комментировал ваш скриншот и вот это утверждение:
              Теперь другая проблема, если рисую график c pppoe_conn_total за последние 7 дней, снова появляется макс. значение 2532.
              Я вижу, что при отрисовке графика за несколько дней у вас для генерирования картинки используются данные не из истории, а из трендов (как это описано здесь).
              Если упомянутые вами item1 и item2 - это вычисляемые элементы данных (которые уже получили свои значения, т.е. были вычислены), то их собственные значения остаются в базе. Или что вы имеете в виду?

              Comment

              Working...