El 6/28/2011 4:41 PM, Gino Rojas Tillemann escribió:
Mi hardware es el siguiente:

Server HP ML150 G6 (2 CPUS)
1.- XEON E5504 2.0GHz 4 cores
2.- XEON E5504 2.0GHz 4 cores
8GB de RAM KINGSTON 2GB KTH-PL313/2G Unbuffered Advanced ECC memory
Controlador STD HP Smart Array P410 controller w/ Zero Memory cache Raid Controller (RAID 0,1, 0+1)
3 Discos HDD 146GB 15K SAS 3.5 DUAL PORT hot-swap - SAS - 15000 rpm
Tarjeta de memoria para la controladora - HP 256MBP-SERIESCACHEUPGRADE
Sistema operativo FreeBSD 8.2
PostgreSQL 9.0

Mi postgresql.conf

listen_addresses = '*'
port = 5432
max_connections = 100
temp_buffers = 8MB
cpu_tuple_cost = 0.0030
cpu_index_tuple_cost = 0.0010
cpu_operator_cost = 0.0005
fsync = off
checkpoint_timeout = 1h
maintenance_work_mem = 480MB
checkpoint_completion_target = 0.9
effective_cache_size = 5632MB
work_mem = 80MB
A mi entender, lo veo muy alto
wal_buffers = 128
checkpoint_segments = 256
shared_buffers = 1920MB
Éste pudieras subir a 2048 Mb, en caso de que tu FreeBSD 8.2 sea de 64 bits (altamente recomendado) Recuerda también tunear el sistema operativo, si es un servidor dedicado a PostgreSQL. Algunas cosas de las que pudieras hacer (hazlas sólo si sabes lo que estás haciendo): en el /boot/loader.conf, necesitas incrementar el número de semáforos SysV IPC
kern.ipc.semmni=512
kern.ipc.semmns=1024

Ahora, en el /etc/sysctl.conf, debes incrementar el valor de los tamaños de la memoria compartida:
kern.ipc.shmmax=4089446400
Éste es el máximo valor del tamaño de un segment de memoria compartida en bytes

kern.pic.shmall=1050000

Éste es el máximo valor de memoria permitido a ser usado como la memoria compartida de SysV, en páginas de 4 Kb En el caso de que la base de datos contenga muchos objetos (díganse tablas, índices, etc), debes incrementar el máximo número de archivos abiertos en memoria para la cache de la lista de directorios:
kern.maxfiles=16384
vfs.ufs.dirhash_maxmem=4194304 (en caso de que estés usando UFS como sistema de ficheros) Para bases de datos
muchos recomiendan ZFS
Puedes guiarte por la guia propuesta acá
http://solarisinternals.com/ZFSforDatabases


El 28 de junio de 2011 16:22, Juan <smalltalker.marc...@gmail.com <mailto:smalltalker.marc...@gmail.com>> escribió:

    No sabria decirte.
    proba copiar una cantidad menor de registros asi la variable
    cantidad de
    registros desaparece.
    Otra es como tenes configurado el postgres y en que fierro corre.
    publica tu postgres.conf y la configuracion de hasrdware
    Alvaro , y otros podran decirte q parametro de configuracion
    no esta bueno
    sal2

    mdc

    2011/6/28 Gino Rojas Tillemann <g...@masnet.cl
    <mailto:g...@masnet.cl>>

        lamentablemente la función hace lo que tiene que hacer y ya se
        ha optimizado bastante, aunque no sé si en regexp \d es mas
        rápido que [0-9], cosas como esas no las he probado.

        tal parece que no hay forma de optimizar eso desde el motor
        creo que tendré que asumir el tiempo de proceso de la función :(

        tendré el mismo problema si levanto una DB de pgsql en EC2 de
        amazon? mejorarán los procesos desde el cloud de amazon?

        gracias

        El 28 de junio de 2011 16:08, Juan
        <smalltalker.marc...@gmail.com
        <mailto:smalltalker.marc...@gmail.com>> escribió:

            Gino gente ,
            Perdon se me escapo sin terminar el correo.
            Fijate entonces como optimizar si es posible la expresion
            en si misma
            sino podes crear expresiones q funcionen pero q sean lentas.
            salu2
            mdc


            2011/6/28 Juan <smalltalker.marc...@gmail.com
            <mailto:smalltalker.marc...@gmail.com>>

                Gino

                Entonces y si las regexp estan compiladas en C no creo
                q haya manera de
                mejorar la velocidad.
                Las expresiones regulares la sintax es importante y
                existen muchas formas de
                mejorar la busqueda.
                Si no estas muy experto en ellas es posible construir
                expresiones regulares
                poco eficientes


                2011/6/28 Gino Rojas Tillemann <g...@masnet.cl
                <mailto:g...@masnet.cl>>

                    el campo id ya esta indexado y no se trata de la
                    cantidad de registros que tenga la tabla, probé
                    moviendo 10 mil registros a una tabla nueva y
                    demora lo mismo, solo cambia los tiempos de
                    proceso cuando quito expresiones regulares de la
                    función, pero lamentablemente no puedo quitar esas
                    regexp de la fn, es por eso que busco que el
                    proceso se haga mas rápido desde el procesador,
                    lamentablemente postgresql solo me entrega un core
                    del CPU para realizar este trabajo, si tan solo
                    usara los 2 CPU y sus 8 nucleos sería maravilloso :)



                    El 28 de junio de 2011 15:56, Anthony
                    <asotolo...@uci.cu <mailto:asotolo...@uci.cu>>
                    escribió:

                        On 28/06/11 15:48, Gino Rojas Tillemann wrote:
                        Hola Juan, si hago eso tendría que crear
                        3.200 indices para esa tabla, ademas
                        no necesariamente voy a actualizar el
                        registros 1 al 10mil podría ser del 8mil al
                        15mil etc...

                        ahora voy a crear la misma función en C para
                        ver si así logro mejores resultados con el
                        procesamiento del texto.

                        alguna otra idea?
                        sld2

                        El 28 de junio de 2011 15:41, Juan
                        <smalltalker.marc...@gmail.com
                        <mailto:smalltalker.marc...@gmail.com>> escribió:

                            Hola gente
                            Gino por lo que veo en tu query te
                            convendria tener un index en la expresion
                            where
                            o sea my_table tenga un index con where .
                            o mejor.

                            create index my_nombre_de_index on
                            mytable( id ) where id between 1 and 10000 ;
                            eso generalmente acelera las cosas.
                            salvo claro esta q ya lo tengas
                            salu2
                            mdc


                            2011/6/28 Gino Rojas Tillemann
                            <g...@masnet.cl <mailto:g...@masnet.cl>>

                                Hola a todos,

                                hace un par de semanas
                                estoy peleando con mi DB y las
                                expresiones regulares, cada vez que
                                proceso 10 mil registros de un
                                universo de 32 millones el motor
                                demora 7 minutos pegados sin
                                variación en procesar una cadena de
                                texto por cada registro; para lograr
                                esto creé una función en plpgsql con
                                (de momento) 40 expresiones regulares
                                (en algunos casos bastante complejas)
                                y actualizo un campo de una tabla con
                                el resultado del proceso, algo como esto:

                                update my_table set
                                campo_final=fn_regexp(campo1||campo2||campo3)
                                where id between 1 and 10000

                                la función "fn_regexp" contiene la
                                lógica de las expresiones regulares y
                                la tabla my_table es de 32 millones
                                de registros

                                si alguien tiene alguna idea de como
                                optimizar la ejecución de las
                                expresiones regulares será de gran
                                ayuda, gracias..

                                haaa y por fa no me sugieran crear
                                varios threads con otro lenguaje ya
                                que lo que busco es bajar mis
                                actuales 7 minutos de proceso


                                saludos

-- Gino Rojas Tillemann





-- Gino Rojas Tillemann
                        tienes algún criterio que te pueda servir para
                        particionar la tabla? pues el particioamiento
                        te puede ayudar.
                        saludos




-- Gino Rojas Tillemann






-- Gino Rojas Tillemann





--
Gino Rojas Tillemann

--
Marcos Luís Ortíz Valmaseda
 Software Engineer (UCI)
 http://marcosluis2186.posterous.com
 http://twitter.com/marcosluis2186

Responder a