Mazanie duplicit v Icinga db - zlepšenie sub selectu

e3k

  • ***
  • 117
    • Zobrazit profil
    • E-mail
Mazanie duplicit v Icinga db - zlepšenie sub selectu
« kdy: 10. 05. 2021, 09:43:02 »
Ahoj,

musim pomazat duplicity (bug) v icinga_commenthistory (5000000 zaznamov).

Vymyslel som to tak ze zistim maximalne id v subselecte a tieto ID nebudem mazat. Zial bezi to neskutocne dlho.

Kód: [Vybrat]
select max(commenthistory_id)
from icinga_commenthistory
group by comment_time, comment_data

Nejaky napad jak toto urychlit?
« Poslední změna: 10. 05. 2021, 10:47:57 od Petr Krčmář »


Re:Mazanie duplicit v Icinga db - zlepšenie sub selectu
« Odpověď #1 kdy: 10. 05. 2021, 11:26:44 »
Ahoj,

musim pomazat duplicity (bug) v icinga_commenthistory (5000000 zaznamov).

Vymyslel som to tak ze zistim maximalne id v subselecte a tieto ID nebudem mazat. Zial bezi to neskutocne dlho.

Kód: [Vybrat]
select max(commenthistory_id)
from icinga_commenthistory
group by comment_time, comment_data

Nejaky napad jak toto urychlit?

Co to je za databázi? Pro většinu db se dá vygooglit dotaz na efektivní mazání duplicit.

Váš dotaz by dost možná urychlil složený index na (comment_time,comment_data, comment_history_id)

e3k

  • ***
  • 117
    • Zobrazit profil
    • E-mail
Re:Mazanie duplicit v Icinga db - zlepšenie sub selectu
« Odpověď #2 kdy: 12. 05. 2021, 09:46:17 »
je to icinga db. index na tie polia by bol giganticky jedna sa o timestamp a roznorode commenty.

Re:Mazanie duplicit v Icinga db - zlepšenie sub selectu
« Odpověď #3 kdy: 13. 05. 2021, 12:20:13 »
Pokud je důležitější cíl, než cesta, pak uložení do txt souboru a pak sort -u a vložit zpět. Ani 10x větší soubor nedělá problémy (test se 4.5GB):
time cat xxxx.log |sort -S 100G |wc -l
50243744
real    0m44,233s
time cat xxxx.log |sort -S 100G -u |wc -l
33461294
real    1m6,306s

Re:Mazanie duplicit v Icinga db - zlepšenie sub selectu
« Odpověď #4 kdy: 13. 05. 2021, 13:46:32 »
A co vytvořit index jen na comment_time?


Re:Mazanie duplicit v Icinga db - zlepšenie sub selectu
« Odpověď #5 kdy: 14. 05. 2021, 15:03:13 »
Pokud je to už Icinga2, tak použijte přímo funkci v Icinze - https://icinga.com/docs/icinga-2/latest/doc/14-features/#db-ido-cleanup

Icinga umí pravidlně mazat záznamy, které jsou starší, než nějaká hodnota.


EDIT: Málo jsem si přečetl původní dotaz. Tohle jenom maže moc staré záznamy, původní tazatel chtěl mazat duplicitní záznamy. Nic jsem neřekl.
« Poslední změna: 14. 05. 2021, 15:04:52 od Věroš K. »