Base de datos de optimizaciones/ajuste fino


ajuste sus parámetros de base de datos para extraer el máximo provecho de ella!

Hola ,

Estas son algunas de mis experiencias, mientras que yo era la construcción de un motor de búsqueda y optimizar la base de datos postgresql hacia sonic-velocidades!

Nuestra configuración para el servidor Postgresql fue:
Redhat 7.2
PIV 2.00 Ghz Sistema
1024 MB de RAM

Una de las primeras cosas que me di cuenta después de encender el Servlet programa, fue que a pesar de las consultas fueron devueltos casi tan rápido como el de la anterior MySQL base del sistema, la carga en el servidor era mucho mayor. Entonces empecé a ir hacia abajo en la profundidad de los detalles de las cosas. Me habían optimizado MySQL antes por el gran aumento de la caché y el tamaño del buffer y tirando más ram hacia el problema. La única cosa más grande que uno tiene que hacer antes de ejecutar Postgresql,es proporcionar suficiente compartido espacio en el buffer. Pero entonces,
¿cuánto es suficiente?
Hay un acalorado debate sobre el mismo, entre las personas que dicen que lógicamente toda la RAM podría ser dedicado como contra aquellos que dicen que tirar más de RAM después de un cierto límite, no tiene ningún uso. El más compartido de la caché del búfer que tienen, mayor es el porcentaje de la base de datos que no causa read() & #39 s ni memoria copiar desde el sistema operativo de la caché del búfer.Pero, en general, en la memoria caché de un pequeño número de bloques debido a que usted será el búfer de ellos dos veces. Cuando se copia un bloque desde el sistema operativo búfer de memoria compartida, la copia, todavía existe en el sistema operativo de búfer. De modo que el bloque es ahora el doble búfer. Un único e/S de disco es mucho más caro que cientos de copias entre el sistema operativo de la caché del búfer y postgres & #39 memoria compartida. Considero también que todas las otras cosas que usted & #39 volver a hacer en la máquina & las cosas pequeñas, como cron y tal. Todo lo que tiene memoria. Por lo tanto, & #39 s peligroso de no dejar que el sistema operativo gestionar una buena parte de la memoria.
ocurre que estos dos factores opuestos se podría trazar y hacer algo de una línea cada uno. El punto ideal sería donde se cruzaron.

Además de que yo también optimizado consultas SQL diseñados específicamente para mi propósito. Una desventaja importante en PostgreSQL se encuentra en la aplicación de la evaluación de las consultas que contienen & #39 & #39 y & #39 EXISTE & #39 . Supongamos que:
Consulta 1. SELECT * FROM db1 where ID IN ((SELECT id FROM db2 en DONDE la palabra = & #39 lo que sea & #39 ) LÍMITE 20
la Consulta 2. SELECT * FROM db1 where ID IN(1234,2345,1242,1256,1245,1567,2222,22,345,234,567,456,35,56)

(donde ID es la clave primaria).

La consulta posterior se escanea con el índice en el ID, mientras que el primero se ejecuta en un recorrido secuencial. Creo que este es el llamado 'error del piloto', en el cual la base de datos se ejecuta la subconsulta para cada fila de la consulta externa. En cambio, si utilizamos explícita UNE (a continuación) a continuación, nos podría obligar a la base de datos para utilizar un índice de exploración en su lugar.
última Consulta :
select * from db1, db2 una, db2 b
where id = un.id y una.palabra= & #39 word1 & #39
e id = b.id y b.palabra= & #39 palabra2 & #39
etc

NOTA: también Se podría ejecutar en un recorrido secuencial, en lugar de una espera de índice de búsqueda, si el número de tuplas a escanear más de un 30-40% del total de tuplas en la tabla. Aunque esto se puede modificar cambiando los pesos asignados a tener bajo este valor le, cpu_tuple_cost, cpu_index_cost y cpu_operator_cost utiliza el optimizador para la fabricación de estos decesions.

también me decidí a lanzar más de RAM para el propósito. Yo asignados 64MB de RAM hacia el búfer compartido espacio. El archivo /var/lib/pgsql/data/postgresql.conf contiene la configuración para el servidor de base de datos. Postgresql utiliza el sistema de memoria compartida como un tampón. En un sistema Linux, puede ver la cantidad de memoria compartida fue asignado por el sistema ejecutando el comando:
cat /proc/sys/kernel/shmmax
Y para ver el uso de memoria compartida del sistema:
ipcs
El resultado será en bytes. Por defecto RedHat 7.2 asigna 32 mb de memoria compartida, que puede no ser suficiente para postgresql. Yo el aumento de este límite de 64 mb haciendo el comando:
echo 67108864 > /proc/sys/kernel/shmmax

debes colocar esta línea en su postgresql archivo de inicio, o editando el /etc/rc.d/rc.archivo local para una más permanente.A continuación, en nuestro postgresql.conf I conjunto shared_buffers a 8192.Yo también establece nuestra sort_mem 16384 (16Megs para una especie, el área de memoria). Desde la agrupación de conexiones fue, en efecto, me puse max_connections 50.
Y fsync también false.

shared_buffers = 8192
sort_mem = 16384
max_connections=50
fsync=false

enganche he encontrado inicialmente era que el sistema tenía que construir y derribar una postgresql relación con cada solicitud. Esto era intolerable, así que empecé a usar la conexión de la agrupación de características proporcionadas por la Resina (http://caucho.com).

& & -
Varun

Agradecimientos : Curt , Bruce , Andrew et todos para despejar mis dudas!









Base de datos de optimizaciones/ajuste fino


Base de datos de optimizaciones/ajuste fino : Multi-millones de consejos para hacer su vida mas facil.


ajuste sus parametros de base de datos para extraer el maximo provecho de ella!

Hola ,

Estas son algunas de mis experiencias, mientras que yo era la construccion de un motor de busqueda y optimizar la base de datos postgresql hacia sonic-velocidades!

Nuestra configuracion para el servidor Postgresql fue:
Redhat 7.2
PIV 2.00 Ghz Sistema
1024 MB de RAM

Una de las primeras cosas que me di cuenta despues de encender el Servlet programa, fue que a pesar de las consultas fueron devueltos casi tan rapido como el de la anterior MySQL base del sistema, la carga en el servidor era mucho mayor. Entonces empece a ir hacia abajo en la profundidad de los detalles de las cosas. Me habian optimizado MySQL antes por el gran aumento de la cache y el tamaño del buffer y tirando mas ram hacia el problema. La unica cosa mas grande que uno tiene que hacer antes de ejecutar Postgresql,es proporcionar suficiente compartido espacio en el buffer. Pero entonces,
¿cuanto es suficiente?
Hay un acalorado debate sobre el mismo, entre las personas que dicen que logicamente toda la RAM podria ser dedicado como contra aquellos que dicen que tirar mas de RAM despues de un cierto limite, no tiene ningun uso. El mas compartido de la cache del bufer que tienen, mayor es el porcentaje de la base de datos que no causa read() & #39 s ni memoria copiar desde el sistema operativo de la cache del bufer.Pero, en general, en la memoria cache de un pequeño numero de bloques debido a que usted sera el bufer de ellos dos veces. Cuando se copia un bloque desde el sistema operativo bufer de memoria compartida, la copia, todavia existe en el sistema operativo de bufer. De modo que el bloque es ahora el doble bufer. Un unico e/S de disco es mucho mas caro que cientos de copias entre el sistema operativo de la cache del bufer y postgres & #39 memoria compartida. Considero tambien que todas las otras cosas que usted & #39 volver a hacer en la maquina & las cosas pequeñas, como cron y tal. Todo lo que tiene memoria. Por lo tanto, & #39 s peligroso de no dejar que el sistema operativo gestionar una buena parte de la memoria.
ocurre que estos dos factores opuestos se podria trazar y hacer algo de una linea cada uno. El punto ideal seria donde se cruzaron.

Ademas de que yo tambien optimizado consultas SQL diseñados especificamente para mi proposito. Una desventaja importante en PostgreSQL se encuentra en la aplicacion de la evaluacion de las consultas que contienen & #39 & #39 y & #39 EXISTE & #39 . Supongamos que:
Consulta 1. SELECT * FROM db1 where ID IN ((SELECT id FROM db2 en DONDE la palabra = & #39 lo que sea & #39 ) LIMITE 20
la Consulta 2. SELECT * FROM db1 where ID IN(1234,2345,1242,1256,1245,1567,2222,22,345,234,567,456,35,56)

(donde ID es la clave primaria).

La consulta posterior se escanea con el indice en el ID, mientras que el primero se ejecuta en un recorrido secuencial. Creo que este es el llamado 'error del piloto', en el cual la base de datos se ejecuta la subconsulta para cada fila de la consulta externa. En cambio, si utilizamos explicita UNE (a continuacion) a continuacion, nos podria obligar a la base de datos para utilizar un indice de exploracion en su lugar.
ultima Consulta :
select * from db1, db2 una, db2 b
where id = un.id y una.palabra= & #39 word1 & #39
e id = b.id y b.palabra= & #39 palabra2 & #39
etc

NOTA: tambien Se podria ejecutar en un recorrido secuencial, en lugar de una espera de indice de busqueda, si el numero de tuplas a escanear mas de un 30-40% del total de tuplas en la tabla. Aunque esto se puede modificar cambiando los pesos asignados a tener bajo este valor le, cpu_tuple_cost, cpu_index_cost y cpu_operator_cost utiliza el optimizador para la fabricacion de estos decesions.

tambien me decidi a lanzar mas de RAM para el proposito. Yo asignados 64MB de RAM hacia el bufer compartido espacio. El archivo /var/lib/pgsql/data/postgresql.conf contiene la configuracion para el servidor de base de datos. Postgresql utiliza el sistema de memoria compartida como un tampon. En un sistema Linux, puede ver la cantidad de memoria compartida fue asignado por el sistema ejecutando el comando:
cat /proc/sys/kernel/shmmax
Y para ver el uso de memoria compartida del sistema:
ipcs
El resultado sera en bytes. Por defecto RedHat 7.2 asigna 32 mb de memoria compartida, que puede no ser suficiente para postgresql. Yo el aumento de este limite de 64 mb haciendo el comando:
echo 67108864 > /proc/sys/kernel/shmmax

debes colocar esta linea en su postgresql archivo de inicio, o editando el /etc/rc.d/rc.archivo local para una mas permanente.A continuacion, en nuestro postgresql.conf I conjunto shared_buffers a 8192.Yo tambien establece nuestra sort_mem 16384 (16Megs para una especie, el area de memoria). Desde la agrupacion de conexiones fue, en efecto, me puse max_connections 50.
Y fsync tambien false.

shared_buffers = 8192
sort_mem = 16384
max_connections=50
fsync=false

enganche he encontrado inicialmente era que el sistema tenia que construir y derribar una postgresql relacion con cada solicitud. Esto era intolerable, asi que empece a usar la conexion de la agrupacion de caracteristicas proporcionadas por la Resina (http://caucho.com).

& & -
Varun

Agradecimientos : Curt , Bruce , Andrew et todos para despejar mis dudas!


Base de datos de optimizaciones/ajuste fino

Base de datos de optimizaciones/ajuste fino : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación