Uraim,
A következő kérdésben keresek segítséget.
Az alaprendszer debian lenny, a sed gnu sed 4.1.5, a gép erős (xeon proci, 2 liter ram)
Adva van egy sed parancs ami postgresql dumpokat alakít át, elég perverzül néz ki elismerem.
Nos ez a sed parancs kis file-ra hipphopp lefut, nagyobbacskára (10M) már 1-2 percig elmolyol de lefut, viszont egy 100M-s file-ra már esélytelen, kivágja 100%-ra a cpu usage-t és lehet várni a világ végéig.
Sajnálatos módon többszáz megás illetve pár gigás file-okon kellene futnia...
Kérdés hogy találkozott-e már valaki ilyen problémával, illetve hogy mit lehetne neki ártani.
Persze meg lehet patkolni a dolgot, split, cat, stb. de én az alapproblémára keresem a megoldást, nevezetesen hogy a fileméret növekedésével miért nő radikálisan a futási idő?
Íme a sed:
sed -n '1h;1!H
${;g
s/CREATE FUNCTION uniqueidentifier_in(cstring) RETURNS uniqueidentifier.*ALTER FUNCTION public.uniqueidentifier_in(cstring) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_out(uniqueidentifier) RETURNS cstring.*ALTER FUNCTION public.uniqueidentifier_out(uniqueidentifier) OWNER TO root;//g
s/CREATE TYPE uniqueidentifier (.*ALTER TYPE public.uniqueidentifier OWNER TO root;//g
s/CREATE FUNCTION text(uniqueidentifier) RETURNS text.*ALTER FUNCTION public.text(uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_cmp(uniqueidentifier, uniqueidentifier) RETURNS integer.*ALTER FUNCTION public.uniqueidentifier_cmp(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_eq(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_eq(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_ge(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_ge(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_gt(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_gt(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_hash(uniqueidentifier) RETURNS integer.*ALTER FUNCTION public.uniqueidentifier_hash(uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_le(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_le(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_lt(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_lt(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE FUNCTION uniqueidentifier_ne(uniqueidentifier, uniqueidentifier) RETURNS boolean.*ALTER FUNCTION public.uniqueidentifier_ne(uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR < (.*ALTER OPERATOR public.< (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR <= (.*ALTER OPERATOR public.<= (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR <> (.*ALTER OPERATOR public.<> (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR = (.*ALTER OPERATOR public.= (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR > (.*ALTER OPERATOR public.> (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR >= (.*ALTER OPERATOR public.>= (uniqueidentifier, uniqueidentifier) OWNER TO root;//g
s/CREATE OPERATOR CLASS uniqueidentifier_ops_btree.*ALTER OPERATOR CLASS public.uniqueidentifier_ops_btree USING btree OWNER TO root;//g
s/CREATE OPERATOR CLASS uniqueidentifier_ops_hash.*ALTER OPERATOR CLASS public.uniqueidentifier_ops_hash USING hash OWNER TO root;//g
s/CREATE CAST (text AS public.uniqueidentifier) WITH FUNCTION public.newid(text) AS IMPLICIT;//g
s/CREATE CAST (public.uniqueidentifier AS text) WITH FUNCTION public.text(public.uniqueidentifier) AS IMPLICIT;//g
s/pg_locks."transaction", //g
s/uniqueidentifier/uniqueidentifier/g
p;}
' central_scg2.psql
Szerk:
Egy fontos információ kimaradt, a pattern-ben található .* regexp többsoros.