|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] postgresql: выбрать последние значения по метке времени для каждого итема zabbix. |
|
Прочие БД - [решено] postgresql: выбрать последние значения по метке времени для каждого итема zabbix.
|
Старожил Сообщения: 211 |
Профиль | Отправить PM | Цитировать Доброго времени суток!
Создал запрос в базу заббикса, который выводит мне отчет по принтерам, число копий и напечатанных страниц. Проблема в том, что во время запроса требуется выявить именно последние значения итемов по метке времени, которые есть в базе, поиск по таблице истории (она большая). Для этого в запросе есть вложенный запрос, который справляется со своей задачей, но очень медленно. Цена такого подзапроса слишком велика для меня. База большая, 500gb+, postgresql 11. Я ищу другие решения для вложенного запроса, который выберет последние значения. Проблемный вложенный запрос
Запрос полностью
Буду рад любым идеям, которые помогут облегчить и ускорить запрос. |
|
Отправлено: 16:56, 23-11-2022 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать В общем любой запрос с фильтром в таблицу history_uint оказывался слишком долгим. Поэтому решил сделать мат вьюху запросом, где сначала отсортировал по дате, потом ограничил лимитом до 200 лямов строк (столько примерно прибывает за пару дней). А потом уже по готовой мат вьюхе искал нужные значения.
CREATE*MATERIALIZED*VIEW*prn_rep*AS* SELECT os3.clock as clock, os3.itemid as itemid from (select os2.clock, os2.itemid from history_uint os2 order by os2.clock desc limit 200000000) os3, ( SELECT items.itemid FROM hosts hosts, items items WHERE hosts.hostid = items.hostid AND (items.key_::text = ANY (ARRAY['page_copy_2'::character varying, 'page_copy_1'::character varying, 'page_counter'::character varying]::text[]))) item where os3.itemid = item.itemid; |
Последний раз редактировалось Griboed0ff, 24-11-2022 в 19:39. Отправлено: 19:33, 24-11-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Нашлось правильное решение. У меня в базе есть партиционирование по датам. И explain показывал, что запрос перебирал все партиции, хотя должен был только несколько. В общем сделал правильное ограничение по дате и все залетало! Выполняется за 2-3 минуты.
Конечный запрос
SELECT split_part(hosts.host::text, ' '::text, 1) AS op, hosts.hostid AS id, reverse(split_part(hosts.description, 'SN:'::text, 2)) AS serial, split_part(split_part(hosts.description, ','::text, 1), ':'::text, 2) AS model, hosts.host AS hostname, ip.ip, uint.clock::abstime::TIMESTAMP WITHOUT TIME zone AS datetime, CURRENT_DATE - '1 day'::INTERVAL DAY AS date_values, uint.value AS count_copy, CASE WHEN items.name::text = 'Счётчик копий'::text THEN 'page_copy'::text WHEN items.name::text = 'Счётчик напечатанных страниц'::text THEN 'page_counter'::text ELSE NULL::text END AS TYPE FROM interface ip, hosts hosts, items items, history_uint uint WHERE hosts.hostid = items.hostid AND hosts.hostid = ip.hostid AND items.itemid = uint.itemid AND uint.clock = ( SELECT MAX(os2.clock) AS MAX FROM history_uint os2 WHERE os2.itemid = uint.itemid AND os2.clock >= CAST(EXTRACT(epoch FROM (CURRENT_DATE - INTERVAL '5' DAY)) AS INTEGER)) AND (items.name::text = ANY (ARRAY['Счётчик копий'::CHARACTER VARYING, 'Счётчик напечатанных страниц'::CHARACTER VARYING]::text[])) AND items.key_::text !~~ '%{#SNMPINDEX}%'::text AND uint.clock >= CAST(EXTRACT(epoch FROM (CURRENT_DATE - INTERVAL '5' DAY)) AS INTEGER); |
Отправлено: 16:08, 08-12-2022 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создать BAT для вывода значения в консоль по условию | moh3 | Скриптовые языки администрирования Windows | 4 | 12-05-2022 11:51 | |
2019 - Обои по умолчанию и обои для каждого пользователя. | poisonkit | Windows Server 2016/2019/2022 | 0 | 28-10-2021 09:35 | |
CMD/BAT - [решено] Скрипт для проверки файлов по размеру и по времени | NickTeilor | Скриптовые языки администрирования Windows | 8 | 23-04-2021 05:11 | |
Разное - [решено] excel изменение значения времени | chamskiu | Microsoft Office (Word, Excel, Outlook и т.д.) | 9 | 05-11-2014 14:30 | |
Прочие БД - Postgresql - действие по истечении времени(проверка кажд день)? | Killer_13 | Программирование и базы данных | 1 | 05-06-2012 23:08 |
|