Portál AbcLinuxu, 14. května 2025 02:04
Mám mysql 5.0.51a-3ubuntu5.4 server. V my.cnf mám nastaveno max_connections na 10000, ale nastavilo se jich jen 886. Je to asi nějaká limit systému či co, ale pokud to nastavím přímo přes set global v mysql tak to funguje. Kde je problém?
Už jsem našel problém. Může za to ulimit, konkrétně ulimit na open files. Nedá se to nějak obejít, nežli nastavováním ulimits na vyšší hodnotu. Já nepotřebuju 10000 spojení na socketu, ale na portu. Port je vlastně taky socket, ale pro něj neexistuje soubor ne tak by se na něj limit neměl vztahovat?
Jsi si jist, že ten stroj 10'000 spojení vůbec zvládne? Pro každé spojení je potřeba paměť (podle mysqltuneru nějakých 12MB, bude se lišit podle nastavení) a na produkčním serveru zákazníka jsem (po předchozím adminovi) našel max_connection=1024
a MysqlTuner prohlášil, že by to chtělo 42GB paměti (což je pro ten stroj zcela mimo možnosti). Ukazuje se, že 128 spojení na běžný provoz bohatě stačí. Je to ještě složitější v tom, že každé spojení si nevezme celou paměť, takže jich v praxi může být i víc, ale ne 10000.
No určitě vím že mi nestačí defaultních 100. 1000 by mohlo stačit, ale nevím. Používám to jako databázi uživatelů, ale při současném přihlášení mnoha uživatelů potřebuju povolit víc spojení. libnss-mysql se totiž chová tak, že otevře spojení a zůstane připojeno dokud nenastane wait_timeout serveru, který jsem musel stáhnout na 60.
Co místo takovýchto "overhead" naučit vývojáře používat connection pool.
No tak jsem stáhnul max connections na 1200 a wait timeout na 10. To by snad mělo fungovat. Wait timeout je jen timeout při neaktivitě nebo zabere i ve chvíli, kdy je prováděný nějaká dotaz?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.