Když GraphQL dotazy přestanou stíhat, začněte optimalizovat

Z Mazovia

Co dělat s hlukem, který proniká i zavřenými dveř

Na konstrukci se osvědčilo smrkové nebo modřínové řezivo. Modřín vydrží venku déle i bez nátěru, smrk je levnější, ale potřebuje ochranu. Desky na stěny by měly mít sílu alespoň dva centimetry, tenčí se kroutí a vytvářejí spáry. Pletivo na výběh musí mít oka maximálně pět centimetrů a drát alespoň dva milimetry silný. Tenká síťovina, kterou prokoušou myši, je k ničemu. Pletivo upevněte sponkami nebo vruty s podložkou, ne jen drátkem, který se ohne. Všechny spáry větší než půl centimetru utěsněte, protože tudy se protáhne i malá lasička.

Do malého bytu se nevejde tiskárna, skener a skříň na dokumenty zároveň. Zvolte jednu kombinaci a zbytek přeneste do cloudu nebo do archivu, který vytáhnete jednou za měsíc. Papíry, které potřebujete denně, držte v jedné svislé složce na desce, ne v hromadě. Šuplík pod stolem je past – cokoli do něj dáte, přestane existovat. Lepší je otevřená krabice nebo police ve výšce očí, kde vidíte, co máte.

Typická chyba je optimalizovat podle dojmu. Vývojář si myslí, že brzdí databáze, ale ve skutečnosti je to špatně nastavený resolver, který pro každý záznam dělá samostatný dotaz. Tomu se říká N+1 problém a v GraphQL je ještě zákeřnější než v RESTu. Řešením je dávkování – načíst data pro více rodičovských objektů jedním dotazem. Mnoho knihoven pro GraphQL už dnes nabízí nástroje, které to řeší automaticky, ale musíte je správně nakonfigurovat a používat.

Kde hledat závadu dřív, než ucítíte spálený olej Druhým viníkem bývá vadný termostat. Zůstane zavřený, chladicí okruh se neotevře a motor se přehřeje během několika kilometrů. Poznáte to tak, že hadice k chladiči je studená, i když je motor horký. Opačný problém – termostat zůstane otevřený – motor se naopak nedohřeje a roste spotřeba. Termostat je levná součástka, ale jeho výměna vyžaduje vypuštění okruhu. Pokud neumíte odvzdušnit systém, svěřte práci mechanikovi.

Úložný prostor plánujte svisle, ne do šířky. Police až ke stropu využijí místo, které by jinak zůstalo prázdné. Do skříně se vejde víc, když použijete tenké ramínka a rozdělovače. Zásuvky pod postelí berou věci, které používáte mimo sezónu. Naopak otevřené police zahlcené drobnostmi vytvářejí vizuální hluk, který unavuje. Do otevřených polic patří jen to, co je opravdu potřeba denně.

Druhým krokem je omezit, co klient může poslat. Zaveďte maximální hloubku dotazu, maximální počet polí a timeout na serveru. Pokud klient pošle dotaz, který by trval příliš dlouho, odmítněte ho hned – ne až po minutě. Tím ochráníte zbytek systému. Zároveň zvažte, zda některá pole nemají být dostupná jen pro určité typy klientů. GraphQL schéma by mělo být navržené tak, aby běžný klient nemohl omylem sestavit katastrofální dotaz.

Když se vaše GraphQL API začne zdržovat, první instinkt bývá přidat výkon serveru. Jenže problém často není v hardwaru, ale v tom, jak jsou dotazy napsané. GraphQL dává klientovi velkou svobodu – a přesně ta svoboda se mění v noční můru, jakmile ji nikdo nehlídá. V roce 2026 už nestačí spoléhat na to, že se to nějak vyřeší. Je potřeba se na dotazy podívat zblízka a zavést pravidla, která zabrání tomu nejhoršímu.

Nejčastější příčinou je nedostatek chladicí kapaliny. Kapalina uniká přes netěsné hadice, prasklý chladič, vadné víčko expansní nádobky nebo přes těsnění vodní pumpy. Únik nemusí být vidět pod autem – malé množství se vypaří na horkém bloku. Kontrolujte hladinu vždy za studena, nikdy neotevírejte víčko za tepla. Dolévejte pouze předepsaný typ kapaliny, nikdy ne obyčejnou vodu. Voda snižuje bod varu, způsobuje korozi a v zimě zamrzá.

Nejdřív změřte, co se skutečně děje Než začnete cokoli optimalizovat, zapněte podrobné logování a sledujte, které dotazy trvají nejdéle. Často zjistíte, že pár konkrétních operací zabíjí celý systém. GraphQL umožňuje klientům poslat jeden dotaz, který vytáhne data z desítek resolverů. Pokud nemáte limity na hloubku nebo šířku dotazu, někdo vám pošle něco, co vypadá nevinně, ale v databázi spustí stovky dotazů. Zaveďte analytiku na úrovni polí a resolverů – ne jen na úrovni HTTP požadavků. Uvidíte, která pole jsou pomalá a která se volají zbytečně často.

Na závěr: optimalizace GraphQL není jednorázová akce. Je to pokračující proces, kdy sledujete, měříte a upravujete. Co fungovalo před rokem, nemusí stačit, když se změní datový objem nebo chování klientů. Pravidelně kontrolujte, zda se neobjevily nové pomalé dotazy, a nebojte se omezit přílišnou svobodu klientů. GraphQL má být výkonný nástroj, ne zdroj nekonečných problémů.