abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:33 | Zajímavý projekt

    Patchouli je open source implementace EMR grafického tabletu (polohovací zařízení). Projekt je hostován na GitLabu.

    Ladislav Hagara | Komentářů: 0
    dnes 14:11 | IT novinky

    Český Nejvyšší soud potvrdil, že česká právní úprava plošného uchování dat o elektronické komunikaci porušuje právo Evropské unie. Pravomocným rozsudkem zamítl dovolání ministerstva průmyslu a obchodu. To se teď musí omluvit novináři Českého rozhlasu Janu Cibulkovi za zásah do práv na ochranu soukromí a osobních údajů. Ve sporu jde o povinnost provozovatelů sítí uchovávat údaje, ze kterých lze odvodit, kdo, s kým a odkud komunikoval.

    Ladislav Hagara | Komentářů: 2
    dnes 02:11 | Komunita

    Google bude vydávat zdrojové kódy Androidu pouze dvakrát ročně. Ve 2. a 4. čtvrtletí.

    Ladislav Hagara | Komentářů: 0
    včera 17:22 | Zajímavý článek

    Bezpečnostní specialista Graham Helton z Low Orbit Security si všímá podezřelých anomálií v BGP, zaznamenaných krátce před vstupem ozbrojených sil USA na území Venezuely, které tam během bleskové speciální vojenské operace úspěšně zatkly venezuelského diktátora Madura za narkoterorismus. BGP (Border Gateway Protocol) je 'dynamický směrovací protokol, který umožňuje routerům automaticky reagovat na změny topologie počítačové sítě' a je v bezpečnostních kruzích znám jako 'notoricky nezabezpečený'.

    NUKE GAZA! 🎆 | Komentářů: 8
    včera 06:11 | Nová verze

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,58 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,32 %. Procesor AMD používá 67,43 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 1
    včera 05:55 | IT novinky

    V Las Vegas probíhá veletrh CES (Consumer Electronics Show, Wikipedie). Firmy představují své novinky. Například LEGO představilo systém LEGO SMART Play: chytré kostky SMART Brick, dlaždičky SMART Tagy a SMART minifigurky. Kostka SMART Brick dokáže rozpoznat přítomnost SMART Tagů a SMART minifigurek, které se nacházejí v její blízkosti. Ty kostku SMART Brick aktivují a určí, co má dělat.

    Ladislav Hagara | Komentářů: 0
    6.1. 18:33 | Bezpečnostní upozornění

    Vládní CERT (GovCERT.CZ) upozorňuje (𝕏) na kritickou zranitelnost v jsPDF, CVE-2025-68428. Tato zranitelnost umožňuje neautentizovaným vzdáleným útočníkům číst libovolné soubory z lokálního souborového systému serveru při použití jsPDF v prostředí Node.js. Problém vzniká kvůli nedostatečné validaci vstupu u cest k souborům předávaných několika metodám jsPDF. Útočník může zneužít tuto chybu k exfiltraci citlivých

    … více »
    Ladislav Hagara | Komentářů: 6
    6.1. 16:22 | Komunita

    V úterý 13. ledna 2025 se v pražské kanceláři SUSE v Karlíně uskuteční 5. Mobile Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a související infrastrukturu. Akci pořádá David Heidelberg.

    … více »
    lkocman | Komentářů: 0
    6.1. 16:00 | Pozvánky

    Už je 14 dní zbývá do začátku osmého ročníku komunitního setkání nejen českých a slovenských správců sítí CSNOG 2026. Registrace na akci je stále otevřená, ale termín uzávěrky se blíží. I proto organizátoři doporučují, aby se zájemci přihlásili brzy, nejlépe ještě tento týden.

    … více »
    VSladek | Komentářů: 0
    6.1. 02:22 | Pozvánky

    Rok 2026 sotva začal, ale už v prvním týdnu se nashromáždilo nezvykle mnoho zajímavostí, událostí a zpráv. Jedno je ale jisté - už ve středu se koná Virtuální Bastlírna - online setkání techniků, bastlířů a ajťáků, kam rozhodně doražte, ideálně s mikrofonem a kamerou a zapojte se do diskuze o zajímavých technických tématech.

    Dějí se i ne zcela šťastné věci – zdražování a nedostupnost RAM a SSD, nedostatek waferů, 3€ clo na každou položku z Číny … více »
    bkralik | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (1%)
     (4%)
     (0%)
     (10%)
     (22%)
     (5%)
     (5%)
     (3%)
     (11%)
     (54%)
    Celkem 285 hlasů
     Komentářů: 7, poslední dnes 15:35
    Rozcestník

    Předumpování databáze, aneb bude to brnkačka

    19.6.2020 08:03 | Přečteno: 2191× | Výběrový blog

    Rád se podělím o jednu epizodu z práce adminstrátorské, protože obsahuje pár technických zvrat(k)ů a možná i obecné životní poučení :)

    Začátek

    Kolega se snažil zkopírovat jednu instanci databáze do druhé. Jenže se mu to pořád nedařilo. Řešili to na poradách už asi tři týdny a pořád žádný výsledek. Už od začátku jsem v hlavě tušil, že bych hravě zvládnul, ale sám toho mám hodně a vůbec, tenhle projekt není moje starost. Jenže to porady pořád natahovalo a už to začínal být opruz i pro mě. Tak jsem se do toho vložil a dobrovolně se nabídl, že vyřeším.

    O co jde

    Jedná se o jednu Percona 5.6, čistě InnoDB databázi, ve které začalo konstantně leakovat místo na disku:
    Graf Projekt trochu znám a tušil jsem, že tam bude hodně databází a tabulek. Řešení za mě je komplet předumpování do nové čisté instance. Kolega zkoušel všelijak binárně a pomocí replikace bez výpadku, ale nikam se nedostal. A vůbec, dump je grunt, jak říkal můj dědeček administrátor. Navíc jsem se cítil silný v kramflecích, už jsem toto v menším měřítku párkrát dělal.

    Prvotní zmapování

    Kontrola konfigurace ukázala, že až na pár rychlostních optimalizací je DB nastavena správně (innodb_file_per_table!). Počet databází: 5 000, počet tabulek v nich: 550 000, největší tabulka ne více, než 500MB, naprostá většina mnohem méně. Výpis se dá získat takto:
    SELECT
    concat(table_schema, '.', table_name) tbl,
    engine,
    concat(round(table_rows/1000000,2),'M') rows,
    concat(round(data_length/(1024*1024*1024),2),'G') DATA,
    concat(round(index_length/(1024*1024*1024),2),'G') idx,
    concat(round((data_length+index_length)/
    (1024*1024*1024),2),'G') total_size,
    round(index_length/data_length,2) idxfrac
    FROM information_schema.TABLES
    WHERE table_schema not in
    ('mysql', 'performance_schema', 'information_schema')
    ORDER BY data_length+index_length DESC;
    
    BTW toto SQL běželo půl hodiny.

    Plán akce

    Mysqldump po databázích ukazuje něco přes 8 hodin. Tudy cesta nevede, ale to jsem věděl už od začátku a měl připravené řešení: budu dumpovat po jednotlivých tabulkách parelelně a získám tím potřebnou rychlost. Projekt snese pár hodin výpadku mezi druhou až dejme tomu pátou ráno. Mým cílem ale bylo ne déle, než 2 hodiny. Mám na to už hotovou kostru skriptu, hlavní práci odvádí tato část:
    while read -r db tabulka; do
    	(( i++ ))
    	echo "(${i} / ${tabulky_pocet}) ${db}.${tabulka}"
    
    	while (( $(jobs -p | wc -l) >= $POCET_PARALELNICH )); do
    		sleep 0.1
    	done
    
    	predumpuj "$db" "$tabulka" &
    done <<< "$tabulky"
    wait
    echo "Done"
    
    Mysqldump sype data rourou rovnou do nové DB.
    Skript mám hotový relativně brzo, dodělal jsem do něj hlavně zobrazení ETA a průměrné rychlosti, přeci jen chci u takto velké DB vidět nějaký progress.

    První test

    Jde se na první spuštění, díky --skip-lock-tables pro mysqldump můžu i v produkční době, navíc server má výkonu dost. POCET_PARALELNICH nastavuji na 20, po zkoušce jestli server nespadl dávám 40 a vypadá ještě trochu rychlejší. Nyní dumpuje rychlostí cca 100 tabulek za vteřinu v průměru. Jsem nadšen a ruším limit na prvních 10 000 tabulek a chci nechat předumovat všech 550 000.

    Dump běží krásně a už si plánuju budíka na druhou ráno, že rovnou překlopím. Jenže ...

    Bash bug?

    Průměrná rychlost postupně klesá a ETA se prodlužuje, ale to přisuzuji faktu, že narážím na tabulky, které jsou trochu větší. Jenže rychlost klesá pořád až se ETA blíží ke třem hodinám. To jsme na cca 50 000 tabulkách a rychlost je zhruba na polovině. Podezírám databáze, zkouším všechno možné ale děje se pořád. Až mě napadá: třeba to brzdí samotný bash? Chvíli exerimentuji s různými implementacemi paralelizace ve skriptu, ale posun žádný. Až google:
    https://unix.stackexchange.com/questions/573315/bash-script-that-runs-parallel-threads-slows-down-substantially-over-several-hou
    Tak je to přece jen bash! Naštěstí v odkazu výše jsou uvedené možné alternativy, jako první volím pro paralelizaci xargs.

    Jiná paralelizace

    Přepis do xargsu už je rychlovka, hlavní část vypadá takto:
    echo "$tables" | awk '{ i++; printf("%s %s %s\n", i, $1, $2) }' | xargs -n 3 -P "$POCET_PARALELNICH" ./predumpuj-worker.bash
    
    výstup workeru loguji takto přímo v něm:
    flock /root/predumpuj_worker.log echo "${1}	${2}	${3}	${ret}" >> /root/predumpuj_worker.log
    
    Díky tomuto logu a příkazu pv mám i jednoduchý progress i s ETA:
    tail -n0 -f /root/predumpuj_worker.log | pv -l -s 550000 > /dev/null
    
    Takto už šlape plnou rychlostí po celou dobu a plánuji ostré překlopení na druhou ráno. Čas celého dumpu: cca 70 minut. Skript je takto i mnohem kratší a elegantnější.

    První ostrý pokus

    Budík mě probudil, ale vstával bych stejně - dělal jsem něco i pro jiného zákazníka. Vše jde dobře a pouštím dump. ETA najednou 3.5 hodiny. WTF? Výkon na serveru je, disky stíhají (SSD), proč to najednou nejde?
    Po hodině se nelepší, tak celou akci odvolávám.

    Čím to je?

    Celá akce už jde mnohem složitěji, než jsem čekal. Trochu se toho začínám bát, že bych to nakonec nezvládl? Co bylo na ostrý pokus jinak? Až mi to na procházce dochází: předchozí pokusy nanečisto jsem dělal do prázdné databáze, zatímco ráno jsem zapisoval do databáze už jednou dumpnuté. Další testy tezi potvrzují - přepis dat je mnohem pomalejší, než zápis na čisto.

    Druhý ostrý pokus

    Budík vzbudil, začátek dobrý :) Dump frčí krásně, ETA dokonce 65 minut. Za 63 minut předumpováno, dělá tedy průměrně 145 tabulek za vteřinu. Zajímavost: v každém běhu cca 100-200 tabulek selže dump. Díky logu dohledám a pustím jejich dump znovu. Nyní proběhnou. Asi tam v prvním průběhu nejsou nějaké potřebné závislosti v databázi.

    Konec a poučení?

    Akce tedy proběhla, zabrané místo na disku se opět vrátilo do normálu a už se neztrácí do neznáma. A poučení? Byl jsem si až příliš jistý, že se snadno podaří :) A možná taky, že i v bashi (čemkoli) může být bug. A nakonec - když nevíš, použij google, už to určitě někdo řešil! :)

    Bonus na závěr

    Tato publikace zvedla naše znalosti MySQL/Percona na novou úroveň:
    Google: Speedemy-MySQL-Configuration-Tuning-Handbook.pdf
    Určitě doporučuji.        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    19.6.2020 09:11 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Poznas prikaz parallel?
    debian.plus@protonmail.com
    19.6.2020 09:36 henk | skóre: 2 | blog: henkovi_prdy
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Vím, že existuje. Ale xargs znám už déle, tak dostal přednost. Navíc mi parallel nepřišel moc intuitivní, když jsem na něj koukal naposled.
    19.6.2020 10:21 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Ja preferujem na pararell nieco: v tom duchu (zas bez toho formatovanie vety v tom a s :::: som pouzival)
    debian.plus@protonmail.com
    19.6.2020 09:21 petr
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    A cim bylo zpusobene to leakovani mista na disku?
    19.6.2020 09:39 henk | skóre: 2 | blog: henkovi_prdy
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Kolega na to nepřišel a já neměl čas se v tom vrtat. Jinak databáze je hodně stará a prošla mnoha verzemi(upgrady), tak mi přišlo lepší ji rovnou takto vyčistit.
    Max avatar 19.6.2020 11:03 Max | skóre: 72 | blog: Max_Devaine
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Hmm, pěkný leakožrout :)
    Zdar Max
    Měl jsem sen ... :(
    19.6.2020 11:24 johnyK | skóre: 2 | blog: uxblog
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    projekt, ktery ma 5000 databazi a celkem 550 000 tabulek? Tim se ridi zemekoule, vesmir nebo Agrofert? Uz u SAP jsem si rikal, ze kdyz to ma v zakladni sestave 60 000 tabulek, tak ze se panove analytici u SAP zblaznili, ale jak je videt ono se to da gradovat.

    Ostatne soudim, ze fandove relacnich databazi a cele te teorie okolo by se meli nechat vysetrit :-)
    19.6.2020 12:26 Faceless man
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Tabuliek v DB nieje nikdy dosť ! :-P
    19.6.2020 12:29 ehmmm
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    A pritom to ma jen 100 GB. (?)
    19.6.2020 12:41 Faceless man
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Na SQL db málo !
    19.6.2020 14:13 henk | skóre: 2 | blog: henkovi_prdy
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    :) Řekl bych co to je, ale nejsem si vůbec jistý jestli můžu. Je to prasečina a kdyby se na to někdo podíval, tak by možná zjistil, že půlka jde promazat. Ale to teď nikomu nestojí za námahu.

    Jinak k těm prasečinám: viděl jsem i systém, který pro ukládání dat používal názvy sloupců. Následně narazil na interní limit MySQL, tak jsme mu kvůli tomu museli upgradovat na verzi, která má limit výše :)
    Josef Kufner avatar 19.6.2020 14:14 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Neemuluje se těmi tabulkami dělení dat do partitions?
    Hello world ! Segmentation fault (core dumped)
    19.6.2020 15:40 podlesh
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Myslím že je naprosto jasné že ty tabulky nivytvořil žádný analytik, ty jsou prostě generovány za běhu. Možná jsou to dočasné tabulky a chybí mazání?
    Heron avatar 19.7.2020 20:43 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Viděl jsem projekt, který vytvářel DB per uživatele. Těch tabulek tam nebylo 110 per DB, ale trochu míň. Tuším snad SOGo nebo něco z balíku iRedMail. Je to prasárna, která nemá žádnou výhodu (možná až na jednoduchý drop v případě smazání uživatele). Navíc v žádném normálním DB produktu by to nešlo dělat, obvykle se připojuje ke konkrétní DB a nikoliv k serveru. Ale MySQL to má hold takto.

    Ale proč to dělají takto fakt netuším. Když tam těch userů bude fakt hodně, tak v případě MySQL to znamená stejný počet adresářů. Tuším že u ext3 byl limit 32tis podadresářů v jednom adresáři. Tj jen 32tis uživatelů. Kdyby to bylo v normálně strukturované DB, tak by nebyl žádný problém několik milionů.
    19.6.2020 15:53 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    innodb_file_per_table je na prd. docela často tomu nějaká tabulka uletí a pak se to musí nahánět, že se ztratil nějaký soubor, takže tabulka neexistuje, kromě případů, kdy ji chcete vytvořit, to pak hází chybu

    innodb_file_per_table je ovšem taky na prd, to si ten innodb soubor pěkně bobtná a když pak v serverovně vypadne napájení (samozřejmě zálohované, asi zálohovaný výpadek), tak možná máte o celodenní zábavu ve formě obnovy databází ze záloh postaráno

    Ale můžete si vybrat :-)
    Quando omni flunkus moritati
    19.6.2020 19:03 Odin1918 | skóre: 6 | blog: Valhalla
    Rozbalit Rozbalit vše Re: Předumpování databáze, aneb bude to brnkačka
    Predne je fajn, ze jste si nejak poradil. Co uz fajn neni, je fakt, ze se nikdo nezaobiral resenim priciny problemu. I kdyz chapu, ze toto vase reseni ma nejnizsi naklady na lidske zdroje. Do budoucna bych se zamyslel nad pouzitim nejake opravdove databaze. PostgreSQL urazil za posledni roky hezky kousek cesty a myslim si, ze na takove mnozstvi dbs a tabulek je to urcite lepsi alternativa. Pokud vam tam takove objemy vznikaji nejakou primitivni emulaci partitioningu, urcite bych ten postgres doporucil tim spise.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.